diff --git a/.dockerignore b/.dockerignore index 1b4e5f1f0f9..3647c99be6d 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,14 +3,15 @@ docker packages/cosmic-swingset/t[0-9] packages/cosmic-swingset/t[0-9].* -packages/cosmic-swingset/lib/lib*.h -packages/cosmic-swingset/lib/lib*.so +golang/cosmos/build +packages/deployment packages/swingset-runner packages/stat-logger **/deployment.json **/vars.tf **/*.log **/build +**/bundles **/__pycache__ **/*.egg-info **/swingset-kernel-state diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 65bc0b25612..5d17ed26567 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -36,6 +36,8 @@ module.exports = { parser: '@typescript-eslint/parser', parserOptions: lintTypes ? { + // this is not yet compatible with eslint lsp so it's conditioned on AGORIC_ESLINT_TYPES + EXPERIMENTAL_useProjectService: true, sourceType: 'module', project: [ './packages/*/jsconfig.json', diff --git a/.github/ISSUE_TEMPLATE/work_item.md b/.github/ISSUE_TEMPLATE/work_item.md index 44f8c9d8e28..8330f2770bf 100644 --- a/.github/ISSUE_TEMPLATE/work_item.md +++ b/.github/ISSUE_TEMPLATE/work_item.md @@ -17,3 +17,4 @@ assignees: '' ## Test Plan +## Upgrade Considerations diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index f3e5ea47055..d8e9e25c2c2 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -34,3 +34,7 @@ Backwards compatibility: what happens to existing data or deployments when this + +### Upgrade Considerations + + diff --git a/.github/actions/restore-golang/action.yml b/.github/actions/restore-golang/action.yml index 492c8b902a3..abd26858fc3 100644 --- a/.github/actions/restore-golang/action.yml +++ b/.github/actions/restore-golang/action.yml @@ -5,6 +5,10 @@ inputs: go-version: description: 'The version of Go to use' required: true + path: + description: 'The relative path to the agoric-sdk directory' + required: false + default: '.' runs: using: composite @@ -14,13 +18,14 @@ runs: shell: bash - uses: actions/checkout@v3 with: + path: ${{ inputs.path }} clean: 'false' submodules: 'true' - uses: actions/setup-go@v4 with: - cache-dependency-path: golang/cosmos/go.sum + cache-dependency-path: ${{ inputs.path }}/golang/cosmos/go.sum go-version: ${{ inputs.go-version }} - name: go mod download - working-directory: ./golang/cosmos + working-directory: ${{ inputs.path }}/golang/cosmos run: go mod download shell: bash diff --git a/.github/workflows/after-merge.yml b/.github/workflows/after-merge.yml index 6e12ce1919e..31c8ef4d31a 100644 --- a/.github/workflows/after-merge.yml +++ b/.github/workflows/after-merge.yml @@ -61,7 +61,8 @@ jobs: # Just a dev release. TAG=dev fi - yarn lerna publish --conventional-prerelease --canary --exact \ + # without concurrency until https://github.com/Agoric/agoric-sdk/issues/8091 + yarn lerna publish --concurrency 1 --conventional-prerelease --canary --exact \ --dist-tag=$TAG --preid=$TAG-$(git rev-parse --short=7 HEAD) \ --no-push --no-verify-access --yes - name: notify on failure diff --git a/.github/workflows/deployment-test.yml b/.github/workflows/deployment-test.yml index cfb858656ad..eac662a41f9 100644 --- a/.github/workflows/deployment-test.yml +++ b/.github/workflows/deployment-test.yml @@ -27,13 +27,17 @@ jobs: - uses: actions/checkout@v3 with: submodules: 'true' + path: ./agoric-sdk - run: sudo packages/deployment/scripts/install-deps.sh - - uses: ./.github/actions/restore-golang + working-directory: ./agoric-sdk + - uses: ./agoric-sdk/.github/actions/restore-golang with: go-version: '1.20' - - uses: ./.github/actions/restore-node + path: ./agoric-sdk + - uses: ./agoric-sdk/.github/actions/restore-node with: node-version: 18.x + path: ./agoric-sdk # Forces xsnap to initialize all memory to random data, which increases # the chances the content of snapshots may deviate between validators xsnap-random-init: '1' @@ -63,54 +67,55 @@ jobs: uses: actions/checkout@v3 with: repository: Agoric/testnet-load-generator - path: testnet-load-generator + path: ./testnet-load-generator ref: ${{steps.get-loadgen-branch.outputs.result}} - - name: Put repos under /usr/src where scripts expect them - run: | - set -e - sudo mv "$GITHUB_WORKSPACE/testnet-load-generator" /usr/src/testnet-load-generator - sudo cp -a "$GITHUB_WORKSPACE" /usr/src/agoric-sdk - ln -s /usr/src/agoric-sdk/packages/deployment/bin/ag-setup-cosmos /usr/local/bin/ag-setup-cosmos - working-directory: / - - name: Build cosmic-swingset dependencies + working-directory: ./agoric-sdk run: | set -e cd packages/cosmic-swingset make install - working-directory: /usr/src/agoric-sdk - - run: /usr/src/agoric-sdk/packages/deployment/scripts/integration-test.sh + - name: Make networks directory + run: | + set -e + mkdir networks + - name: Run integration test + working-directory: ./networks + run: | + set -xe + DOCKER_VOLUMES="$PWD/../agoric-sdk:/usr/src/agoric-sdk" \ + LOADGEN=1 \ + ../agoric-sdk/packages/deployment/scripts/integration-test.sh timeout-minutes: 90 - working-directory: /usr/src/agoric-sdk env: NETWORK_NAME: chaintest - name: capture results if: always() + working-directory: ./networks run: | NOW=$(date -u +%Y%m%dT%H%M%S) echo "NOW=$NOW" >> "$GITHUB_ENV" # Stop the chain from running. - packages/deployment/scripts/setup.sh play stop || true + ../agoric-sdk/packages/deployment/scripts/setup.sh play stop || true # Get the results. - packages/deployment/scripts/capture-integration-results.sh "${{ job.status == 'failure' }}" + ../agoric-sdk/packages/deployment/scripts/capture-integration-results.sh "${{ job.status == 'failure' }}" # Tear down the nodes. - echo yes | packages/deployment/scripts/setup.sh destroy || true - working-directory: /usr/src/agoric-sdk + echo yes | ../agoric-sdk/packages/deployment/scripts/setup.sh destroy || true env: NETWORK_NAME: chaintest - uses: actions/upload-artifact@v3 if: always() with: name: deployment-test-results-${{ env.NOW }} - path: /usr/src/agoric-sdk/chaintest/results + path: ./networks/chaintest/results - name: notify on failure if: failure() && github.event_name != 'pull_request' - uses: ./.github/actions/notify-status + uses: ./agoric-sdk/.github/actions/notify-status with: webhook: ${{ secrets.SLACK_WEBHOOK_URL }} from: ${{ secrets.NOTIFY_EMAIL_FROM }} diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 70055ce1941..64d77b6a2fb 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -104,7 +104,8 @@ jobs: npm whoami # Publish the packages to our local service. - yarn lerna publish --conventional-prerelease --canary --exact \ + # without concurrency until https://github.com/Agoric/agoric-sdk/issues/8091 + yarn lerna publish --concurrency 1 --conventional-prerelease --canary --exact \ --dist-tag=$dist_tag --preid=dev-$(git rev-parse --short=7 HEAD) \ --no-push --no-verify-access --yes diff --git a/MAINTAINERS.md b/MAINTAINERS.md index 7dc7baba75d..062d7bee549 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -158,7 +158,8 @@ to pass. ```sh # Publish to NPM. NOTE: You may have to repeat this several times if there are failures. -yarn lerna publish from-package +# without concurrency until https://github.com/Agoric/agoric-sdk/issues/8091 +yarn lerna publish --concurrency 1 from-package ``` - [ ] Merge the release PR into the base branch. DO NOT REBASE OR SQUASH OR YOU WILL LOSE @@ -299,6 +300,13 @@ export const METER_TYPE = 'xs-meter-0'; Be sure to also update `test/test-xs-perf.js` with the new meter version. +```sh +cd packages/xsnap +git add api.js +git commit -am 'chore: Bump xsnap meter type' +cd ../.. +``` + Changing anything in Endo usually frustrates the SwingSet kernel hashes, and if Endo changes nothing, bumping the meter version certainly will, and so predictably frustrates the kernel hash golden test. @@ -317,13 +325,6 @@ git commit -m 'chore(swingset-vat): Update xsnap store test snapshots' cd ../.. ``` -```sh -cd packages/xsnap -git add api.js -git commit -am 'chore: Bump xsnap meter type' -cd ../.. -``` - Push this branch and create a pull request. ```sh diff --git a/golang/cosmos/app/app.go b/golang/cosmos/app/app.go index 9d037a3bf3f..318d3a4add0 100644 --- a/golang/cosmos/app/app.go +++ b/golang/cosmos/app/app.go @@ -8,6 +8,7 @@ import ( "net/http" "os" "path/filepath" + "runtime/debug" "time" "github.com/cosmos/cosmos-sdk/baseapp" @@ -21,6 +22,7 @@ import ( servertypes "github.com/cosmos/cosmos-sdk/server/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/module" "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/auth" @@ -196,6 +198,7 @@ type GaiaApp struct { // nolint: golint interfaceRegistry types.InterfaceRegistry controllerInited bool + bootstrapNeeded bool lienPort int vbankPort int vibcPort int @@ -431,17 +434,20 @@ func NewAgoricApp( // This function is tricky to get right, so we build it ourselves. callToController := func(ctx sdk.Context, str string) (string, error) { + app.CheckControllerInited(true) // We use SwingSet-level metering to charge the user for the call. - app.MustInitController(ctx) defer vm.SetControllerContext(ctx)() return sendToController(true, str) } + setBootstrapNeeded := func() { + app.bootstrapNeeded = true + } + app.VstorageKeeper = vstorage.NewKeeper( keys[vstorage.StoreKey], ) - vm.RegisterPortHandler("vstorage", vstorage.NewStorageHandler(app.VstorageKeeper)) - app.vstoragePort = vm.GetPort("vstorage") + app.vstoragePort = vm.RegisterPortHandler("vstorage", vstorage.NewStorageHandler(app.VstorageKeeper)) // The SwingSetKeeper is the Keeper from the SwingSet module app.SwingSetKeeper = swingset.NewKeeper( @@ -453,8 +459,18 @@ func NewAgoricApp( app.SwingSetSnapshotter = swingsetkeeper.NewSwingsetSnapshotter( bApp, - app.SwingSetKeeper, - sendToController, + app.SwingSetKeeper.ExportSwingStore, + func(action vm.Jsonable, mustNotBeInited bool) (string, error) { + if mustNotBeInited { + app.CheckControllerInited(false) + } + + bz, err := json.Marshal(action) + if err != nil { + return "", err + } + return sendToController(true, string(bz)) + }, ) app.VibcKeeper = vibc.NewKeeper( @@ -582,7 +598,7 @@ func NewAgoricApp( transferModule, icaModule, vstorage.NewAppModule(app.VstorageKeeper), - swingset.NewAppModule(app.SwingSetKeeper), + swingset.NewAppModule(app.SwingSetKeeper, setBootstrapNeeded), vibcModule, vbankModule, lienModule, @@ -809,57 +825,91 @@ func normalizeModuleAccount(ctx sdk.Context, ak authkeeper.AccountKeeper, name s type cosmosInitAction struct { Type string `json:"type"` ChainID string `json:"chainID"` + IsBootstrap bool `json:"isBootstrap"` Params swingset.Params `json:"params"` - StoragePort int `json:"storagePort"` SupplyCoins sdk.Coins `json:"supplyCoins"` - VibcPort int `json:"vibcPort"` - VbankPort int `json:"vbankPort"` - LienPort int `json:"lienPort"` UpgradePlan *upgradetypes.Plan `json:"upgradePlan,omitempty"` + LienPort int `json:"lienPort"` + StoragePort int `json:"storagePort"` + VbankPort int `json:"vbankPort"` + VibcPort int `json:"vibcPort"` } // Name returns the name of the App func (app *GaiaApp) Name() string { return app.BaseApp.Name() } -func (app *GaiaApp) MustInitController(ctx sdk.Context) { - if app.controllerInited { - return +// CheckControllerInited exits if the controller initialization state does not match `expected`. +func (app *GaiaApp) CheckControllerInited(expected bool) { + if app.controllerInited != expected { + fmt.Fprintf(os.Stderr, "controllerInited != %t\n", expected) + debug.PrintStack() + os.Exit(1) } +} + +// initController sends the initialization message to the VM. +// Exits if the controller has already been initialized. +func (app *GaiaApp) initController(ctx sdk.Context, bootstrap bool) { + app.CheckControllerInited(false) app.controllerInited = true // Begin initializing the controller here. action := &cosmosInitAction{ Type: "AG_COSMOS_INIT", ChainID: ctx.ChainID(), + IsBootstrap: bootstrap, Params: app.SwingSetKeeper.GetParams(ctx), - StoragePort: app.vstoragePort, SupplyCoins: sdk.NewCoins(app.BankKeeper.GetSupply(ctx, "uist")), - VibcPort: app.vibcPort, - VbankPort: app.vbankPort, - LienPort: app.lienPort, UpgradePlan: app.upgradePlan, + LienPort: app.lienPort, + StoragePort: app.vstoragePort, + VbankPort: app.vbankPort, + VibcPort: app.vibcPort, } + // This really abuses `BlockingSend` to get back at `sendToController` out, err := app.SwingSetKeeper.BlockingSend(ctx, action) // fmt.Fprintf(os.Stderr, "AG_COSMOS_INIT Returned from SwingSet: %s, %v\n", out, err) if err != nil { - fmt.Fprintln(os.Stderr, "Cannot initialize Controller", err) - os.Exit(1) + panic(errors.Wrap(err, "cannot initialize Controller")) } var res bool err = json.Unmarshal([]byte(out), &res) if err != nil { - fmt.Fprintln(os.Stderr, "Cannot unmarshal Controller init response", out, err) - os.Exit(1) + panic(errors.Wrapf(err, "cannot unmarshal Controller init response: %s", out)) } if !res { - fmt.Fprintln(os.Stderr, "Controller negative init response") - os.Exit(1) + panic(fmt.Errorf("controller negative init response")) + } +} + +type bootstrapBlockAction struct { + Type string `json:"type"` + BlockTime int64 `json:"blockTime"` +} + +// BootstrapController initializes the controller (with the bootstrap flag) and sends a bootstrap action. +func (app *GaiaApp) BootstrapController(ctx sdk.Context) error { + app.initController(ctx, true) + + stdlog.Println("Running SwingSet until bootstrap is ready") + // Just run the SwingSet kernel to finish bootstrap and get ready to open for + // business. + action := &bootstrapBlockAction{ + Type: "BOOTSTRAP_BLOCK", + BlockTime: ctx.BlockTime().Unix(), } + + _, err := app.SwingSetKeeper.BlockingSend(ctx, action) + return err } // BeginBlocker application updates every begin block func (app *GaiaApp) BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock) abci.ResponseBeginBlock { + if !app.controllerInited { + app.initController(ctx, false) + } + return app.mm.BeginBlock(ctx, req) } @@ -878,6 +928,21 @@ func (app *GaiaApp) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci app.UpgradeKeeper.SetModuleVersionMap(ctx, app.mm.GetVersionMap()) res := app.mm.InitGenesis(ctx, app.appCodec, genesisState) + // initialize the provision and reserve module accounts, to avoid their implicit creation + // as a default account upon receiving a transfer. See BlockedAddrs(). + normalizeModuleAccount(ctx, app.AccountKeeper, vbanktypes.ProvisionPoolName) + normalizeModuleAccount(ctx, app.AccountKeeper, vbanktypes.ReservePoolName) + + if app.bootstrapNeeded { + err := app.BootstrapController(ctx) + // fmt.Fprintf(os.Stderr, "BOOTSTRAP_BLOCK Returned from swingset: %s, %v\n", out, err) + if err != nil { + // NOTE: A failed BOOTSTRAP_BLOCK means that the SwingSet state is inconsistent. + // Panic here, in the hopes that a replay from scratch will fix the problem. + panic(err) + } + } + // Agoric: report the genesis time explicitly. genTime := req.GetTime() if genTime.After(time.Now()) { @@ -885,11 +950,6 @@ func (app *GaiaApp) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci stdlog.Printf("Genesis time %s is in %s\n", genTime, d) } - // initialize the provision and reserve module accounts, to avoid their implicit creation - // as a default account upon receiving a transfer. See BockedAddrs(). - normalizeModuleAccount(ctx, app.AccountKeeper, vbanktypes.ProvisionPoolName) - normalizeModuleAccount(ctx, app.AccountKeeper, vbanktypes.ReservePoolName) - return res } diff --git a/golang/cosmos/package.json b/golang/cosmos/package.json index 60676206c74..77e5531eaab 100644 --- a/golang/cosmos/package.json +++ b/golang/cosmos/package.json @@ -19,7 +19,7 @@ "postpack": "git clean -f git-revision.txt", "build": "exit 0", "lint-fix": "yarn lint:eslint --fix", - "lint": "eslint '**/*.{cjs,js}'" + "lint": "exit 0" }, "dependencies": { "bindings": "^1.2.1", diff --git a/golang/cosmos/vm/controller.go b/golang/cosmos/vm/controller.go index bf4f317f402..acc70f3e573 100644 --- a/golang/cosmos/vm/controller.go +++ b/golang/cosmos/vm/controller.go @@ -8,7 +8,6 @@ import ( type ControllerContext struct { Context sdk.Context - StoragePort int IBCChannelHandlerPort int } @@ -74,7 +73,7 @@ func UnregisterPortHandler(portNum int) error { func ReceiveFromController(portNum int, msg string) (string, error) { handler := portToHandler[portNum] if handler == nil { - return "", fmt.Errorf("Unregistered port %d", portNum) + return "", fmt.Errorf("unregistered port %d", portNum) } return handler.Receive(&controllerContext, msg) } diff --git a/golang/cosmos/x/swingset/abci.go b/golang/cosmos/x/swingset/abci.go index ec9077f30f8..567975c995f 100644 --- a/golang/cosmos/x/swingset/abci.go +++ b/golang/cosmos/x/swingset/abci.go @@ -9,13 +9,11 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" abci "github.com/tendermint/tendermint/abci/types" - "github.com/Agoric/agoric-sdk/golang/cosmos/vm" "github.com/Agoric/agoric-sdk/golang/cosmos/x/swingset/types" ) type beginBlockAction struct { Type string `json:"type"` - StoragePort int `json:"storagePort"` BlockHeight int64 `json:"blockHeight"` BlockTime int64 `json:"blockTime"` ChainID string `json:"chainID"` @@ -39,7 +37,6 @@ func BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock, keeper Keeper) erro action := &beginBlockAction{ Type: "BEGIN_BLOCK", - StoragePort: vm.GetPort("vstorage"), BlockHeight: ctx.BlockHeight(), BlockTime: ctx.BlockTime().Unix(), ChainID: ctx.ChainID(), diff --git a/golang/cosmos/x/swingset/genesis.go b/golang/cosmos/x/swingset/genesis.go index 8205d4836ba..59a2725a263 100644 --- a/golang/cosmos/x/swingset/genesis.go +++ b/golang/cosmos/x/swingset/genesis.go @@ -3,12 +3,9 @@ package swingset import ( // "os" "fmt" - stdlog "log" - "github.com/Agoric/agoric-sdk/golang/cosmos/vm" "github.com/Agoric/agoric-sdk/golang/cosmos/x/swingset/types" sdk "github.com/cosmos/cosmos-sdk/types" - abci "github.com/tendermint/tendermint/abci/types" ) func NewGenesisState() *types.GenesisState { @@ -31,40 +28,14 @@ func DefaultGenesisState() *types.GenesisState { } } -type bootstrapBlockAction struct { - Type string `json:"type"` - BlockTime int64 `json:"blockTime"` - StoragePort int `json:"storagePort"` -} - -func BootSwingset(ctx sdk.Context, keeper Keeper) error { - // Just run the SwingSet kernel to finish bootstrap and get ready to open for - // business. - action := &bootstrapBlockAction{ - Type: "BOOTSTRAP_BLOCK", - BlockTime: ctx.BlockTime().Unix(), - StoragePort: vm.GetPort("vstorage"), - } - - _, err := keeper.BlockingSend(ctx, action) - return err -} - -func InitGenesis(ctx sdk.Context, keeper Keeper, data *types.GenesisState) []abci.ValidatorUpdate { +// InitGenesis initializes the (Cosmos-side) SwingSet state from the GenesisState. +// Returns whether the app should send a bootstrap action to the controller. +func InitGenesis(ctx sdk.Context, keeper Keeper, data *types.GenesisState) bool { keeper.SetParams(ctx, data.GetParams()) keeper.SetState(ctx, data.GetState()) - stdlog.Println("Running SwingSet until bootstrap is ready") - err := BootSwingset(ctx, keeper) - - // fmt.Fprintf(os.Stderr, "BOOTSTRAP_BLOCK Returned from swingset: %s, %v\n", out, err) - if err != nil { - // NOTE: A failed BOOTSTRAP_BLOCK means that the SwingSet state is inconsistent. - // Panic here, in the hopes that a replay from scratch will fix the problem. - panic(err) - } - - return []abci.ValidatorUpdate{} + // TODO: bootstrap only if not restoring swing-store from genesis state + return true } func ExportGenesis(ctx sdk.Context, k Keeper) *types.GenesisState { diff --git a/golang/cosmos/x/swingset/keeper/msg_server.go b/golang/cosmos/x/swingset/keeper/msg_server.go index 65f3d108f05..0d959ce23cc 100644 --- a/golang/cosmos/x/swingset/keeper/msg_server.go +++ b/golang/cosmos/x/swingset/keeper/msg_server.go @@ -25,7 +25,6 @@ type deliverInboundAction struct { Peer string `json:"peer"` Messages [][]interface{} `json:"messages"` Ack uint64 `json:"ack"` - StoragePort int `json:"storagePort"` BlockHeight int64 `json:"blockHeight"` BlockTime int64 `json:"blockTime"` } @@ -58,7 +57,6 @@ func (keeper msgServer) DeliverInbound(goCtx context.Context, msg *types.MsgDeli Peer: msg.Submitter.String(), Messages: messages, Ack: msg.Ack, - StoragePort: vm.GetPort("vstorage"), BlockHeight: ctx.BlockHeight(), BlockTime: ctx.BlockTime().Unix(), } diff --git a/golang/cosmos/x/swingset/keeper/snapshotter.go b/golang/cosmos/x/swingset/keeper/snapshotter.go index 2cba32bcf6f..d0d4b738c64 100644 --- a/golang/cosmos/x/swingset/keeper/snapshotter.go +++ b/golang/cosmos/x/swingset/keeper/snapshotter.go @@ -41,6 +41,8 @@ func sanitizeArtifactName(name string) string { } type activeSnapshot struct { + // Whether the operation in progress is a restore + isRestore bool // The block height of the snapshot in progress height int64 // The logger for this snapshot @@ -62,17 +64,13 @@ type exportManifest struct { Artifacts [][2]string `json:"artifacts"` } -type SwingStoreExporter interface { - ExportSwingStore(ctx sdk.Context) []*vstoragetypes.DataEntry -} - type SwingsetSnapshotter struct { - isConfigured func() bool - takeSnapshot func(height int64) - newRestoreContext func(height int64) sdk.Context - logger log.Logger - exporter SwingStoreExporter - blockingSend func(action vm.Jsonable) (string, error) + isConfigured func() bool + takeSnapshot func(height int64) + newRestoreContext func(height int64) sdk.Context + logger log.Logger + getSwingStoreExportData func(ctx sdk.Context) []*vstoragetypes.DataEntry + blockingSend func(action vm.Jsonable, mustNotBeInited bool) (string, error) // Only modified by the main goroutine. activeSnapshot *activeSnapshot } @@ -84,49 +82,64 @@ type snapshotAction struct { Args []json.RawMessage `json:"args,omitempty"` } -func NewSwingsetSnapshotter(app *baseapp.BaseApp, exporter SwingStoreExporter, sendToController func(bool, string) (string, error)) SwingsetSnapshotter { - // The sendToController performed by this submodule are non-deterministic. - // This submodule will send messages to JS from goroutines at unpredictable - // times, but this is safe because when handling the messages, the JS side - // does not perform operations affecting consensus and ignores state changes - // since committing the previous block. - // Since this submodule implements block level commit synchronization, the - // processing and results are both insensitive to sub-block timing of messages. - - blockingSend := func(action vm.Jsonable) (string, error) { - bz, err := json.Marshal(action) - if err != nil { - return "", err - } - return sendToController(true, string(bz)) - } - +// NewSwingsetSnapshotter creates a SwingsetSnapshotter which exclusively +// manages communication with the JS side for Swingset snapshots, ensuring +// insensitivity to sub-block timing, and enforcing concurrency requirements. +// The caller of this submodule must arrange block level commit synchronization, +// to ensure the results are deterministic. +// +// Some `blockingSend` calls performed by this submodule are non-deterministic. +// This submodule will send messages to JS from goroutines at unpredictable +// times, but this is safe because when handling the messages, the JS side +// does not perform operations affecting consensus and ignores state changes +// since committing the previous block. +// Some other `blockingSend` calls however do change the JS swing-store and +// must happen before the Swingset controller on the JS side was inited. +func NewSwingsetSnapshotter( + app *baseapp.BaseApp, + getSwingStoreExportData func(ctx sdk.Context) []*vstoragetypes.DataEntry, + blockingSend func(action vm.Jsonable, mustNotBeInited bool) (string, error), +) SwingsetSnapshotter { return SwingsetSnapshotter{ isConfigured: func() bool { return app.SnapshotManager() != nil }, takeSnapshot: app.Snapshot, newRestoreContext: func(height int64) sdk.Context { return app.NewUncachedContext(false, tmproto.Header{Height: height}) }, - logger: app.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName), "submodule", "snapshotter"), - exporter: exporter, - blockingSend: blockingSend, - activeSnapshot: nil, + logger: app.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName), "submodule", "snapshotter"), + getSwingStoreExportData: getSwingStoreExportData, + blockingSend: blockingSend, + activeSnapshot: nil, } } +// checkNotActive returns an error if there is an active snapshot. +func (snapshotter *SwingsetSnapshotter) checkNotActive() error { + active := snapshotter.activeSnapshot + if active != nil { + select { + case <-active.done: + snapshotter.activeSnapshot = nil + default: + if active.isRestore { + return fmt.Errorf("snapshot restore already in progress for height %d", active.height) + } else { + return fmt.Errorf("snapshot already in progress for height %d", active.height) + } + } + } + return nil +} + // InitiateSnapshot synchronously initiates a snapshot for the given height. // If a snapshot is already in progress, or if no snapshot manager is configured, // this will fail. // The snapshot operation is performed in a goroutine, and synchronized with the // main thread through the `WaitUntilSnapshotStarted` method. func (snapshotter *SwingsetSnapshotter) InitiateSnapshot(height int64) error { - if snapshotter.activeSnapshot != nil { - select { - case <-snapshotter.activeSnapshot.done: - snapshotter.activeSnapshot = nil - default: - return fmt.Errorf("snapshot already in progress for height %d", snapshotter.activeSnapshot.height) - } + err := snapshotter.checkNotActive() + if err != nil { + return err } if !snapshotter.isConfigured() { @@ -157,7 +170,7 @@ func (snapshotter *SwingsetSnapshotter) InitiateSnapshot(height int64) error { } // blockingSend for COSMOS_SNAPSHOT action is safe to call from a goroutine - _, err := snapshotter.blockingSend(action) + _, err := snapshotter.blockingSend(action, false) if err != nil { // First indicate a snapshot is no longer in progress if the call to @@ -188,7 +201,7 @@ func (snapshotter *SwingsetSnapshotter) InitiateSnapshot(height int64) error { BlockHeight: height, Request: "discard", } - _, err = snapshotter.blockingSend(action) + _, err = snapshotter.blockingSend(action, false) if err != nil { logger.Error("failed to discard swingset snapshot", "err", err) @@ -286,7 +299,7 @@ func (snapshotter *SwingsetSnapshotter) SnapshotExtension(height uint64, payload BlockHeight: activeSnapshot.height, Request: "retrieve", } - out, err := snapshotter.blockingSend(action) + out, err := snapshotter.blockingSend(action, false) if err != nil { return err @@ -369,6 +382,30 @@ func (snapshotter *SwingsetSnapshotter) RestoreExtension(height uint64, format u return snapshots.ErrUnknownFormat } + err := snapshotter.checkNotActive() + if err != nil { + return err + } + + // We technically don't need to create an active snapshot here since both + // `InitiateSnapshot` and `RestoreExtension` should only be called from the + // main thread, but it doesn't cost much to add in case things go wrong. + active := &activeSnapshot{ + isRestore: true, + height: int64(height), + logger: snapshotter.logger, + // goroutine synchronization is unnecessary since anything checking should + // be called from the same thread. + // Effectively `WaitUntilSnapshotStarted` would block infinitely and + // and `InitiateSnapshot` will error when calling `checkNotActive`. + startedResult: nil, + done: nil, + } + snapshotter.activeSnapshot = active + defer func() { + snapshotter.activeSnapshot = nil + }() + ctx := snapshotter.newRestoreContext(int64(height)) exportDir, err := os.MkdirTemp("", fmt.Sprintf("agd-state-sync-restore-%d-*", height)) @@ -392,7 +429,7 @@ func (snapshotter *SwingsetSnapshotter) RestoreExtension(height uint64, format u // At this point the content of the cosmos DB has been verified against the // AppHash, which means the SwingStore data it contains can be used as the // trusted root against which to validate the artifacts. - swingStoreEntries := snapshotter.exporter.ExportSwingStore(ctx) + swingStoreEntries := snapshotter.getSwingStoreExportData(ctx) if len(swingStoreEntries) > 0 { encoder := json.NewEncoder(exportDataFile) @@ -480,7 +517,7 @@ func (snapshotter *SwingsetSnapshotter) RestoreExtension(height uint64, format u Args: []json.RawMessage{encodedExportDir}, } - _, err = snapshotter.blockingSend(action) + _, err = snapshotter.blockingSend(action, true) if err != nil { return err } diff --git a/golang/cosmos/x/swingset/keeper/snapshotter_test.go b/golang/cosmos/x/swingset/keeper/snapshotter_test.go index e1b6f36dc94..196dad37eea 100644 --- a/golang/cosmos/x/swingset/keeper/snapshotter_test.go +++ b/golang/cosmos/x/swingset/keeper/snapshotter_test.go @@ -2,6 +2,7 @@ package keeper import ( "errors" + "io" "testing" "github.com/Agoric/agoric-sdk/golang/cosmos/vm" @@ -16,7 +17,7 @@ func newTestSnapshotter() SwingsetSnapshotter { takeSnapshot: func(height int64) {}, newRestoreContext: func(height int64) sdk.Context { return sdk.Context{} }, logger: logger, - blockingSend: func(action vm.Jsonable) (string, error) { return "", nil }, + blockingSend: func(action vm.Jsonable, mustNotBeInited bool) (string, error) { return "", nil }, } } @@ -40,6 +41,15 @@ func TestSnapshotInProgress(t *testing.T) { t.Error("wanted error for snapshot in progress") } + err = swingsetSnapshotter.RestoreExtension( + 456, SnapshotFormat, + func() ([]byte, error) { + return nil, io.EOF + }) + if err == nil { + t.Error("wanted error for snapshot in progress") + } + close(ch) <-swingsetSnapshotter.activeSnapshot.done err = swingsetSnapshotter.InitiateSnapshot(456) @@ -89,7 +99,7 @@ func TestSecondCommit(t *testing.T) { func TestInitiateFails(t *testing.T) { swingsetSnapshotter := newTestSnapshotter() - swingsetSnapshotter.blockingSend = func(action vm.Jsonable) (string, error) { + swingsetSnapshotter.blockingSend = func(action vm.Jsonable, mustNotBeInited bool) (string, error) { if action.(*snapshotAction).Request == "initiate" { return "", errors.New("initiate failed") } @@ -116,7 +126,7 @@ func TestInitiateFails(t *testing.T) { func TestRetrievalFails(t *testing.T) { swingsetSnapshotter := newTestSnapshotter() - swingsetSnapshotter.blockingSend = func(action vm.Jsonable) (string, error) { + swingsetSnapshotter.blockingSend = func(action vm.Jsonable, mustNotBeInited bool) (string, error) { if action.(*snapshotAction).Request == "retrieve" { return "", errors.New("retrieve failed") } @@ -152,7 +162,7 @@ func TestRetrievalFails(t *testing.T) { func TestDiscard(t *testing.T) { discardCalled := false swingsetSnapshotter := newTestSnapshotter() - swingsetSnapshotter.blockingSend = func(action vm.Jsonable) (string, error) { + swingsetSnapshotter.blockingSend = func(action vm.Jsonable, mustNotBeInited bool) (string, error) { if action.(*snapshotAction).Request == "discard" { discardCalled = true } diff --git a/golang/cosmos/x/swingset/module.go b/golang/cosmos/x/swingset/module.go index 8e3f030ccf9..9e38f05e864 100644 --- a/golang/cosmos/x/swingset/module.go +++ b/golang/cosmos/x/swingset/module.go @@ -80,14 +80,16 @@ func (AppModuleBasic) GetTxCmd() *cobra.Command { type AppModule struct { AppModuleBasic - keeper Keeper + keeper Keeper + setBootstrapNeeded func() } // NewAppModule creates a new AppModule Object -func NewAppModule(k Keeper) AppModule { +func NewAppModule(k Keeper, setBootstrapNeeded func()) AppModule { am := AppModule{ - AppModuleBasic: AppModuleBasic{}, - keeper: k, + AppModuleBasic: AppModuleBasic{}, + keeper: k, + setBootstrapNeeded: setBootstrapNeeded, } return am } @@ -147,7 +149,11 @@ func (am AppModule) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) []abci.V func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { var genesisState types.GenesisState cdc.MustUnmarshalJSON(data, &genesisState) - return InitGenesis(ctx, am.keeper, &genesisState) + bootstrapNeeded := InitGenesis(ctx, am.keeper, &genesisState) + if bootstrapNeeded { + am.setBootstrapNeeded() + } + return []abci.ValidatorUpdate{} } func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { diff --git a/golang/cosmos/x/vstorage/genesis.go b/golang/cosmos/x/vstorage/genesis.go index 2d596166829..970a70a8e7e 100644 --- a/golang/cosmos/x/vstorage/genesis.go +++ b/golang/cosmos/x/vstorage/genesis.go @@ -22,9 +22,6 @@ func ValidateGenesis(data *types.GenesisState) error { if err := types.ValidatePath(entry.Path); err != nil { return fmt.Errorf("genesis vstorage.data entry %q has invalid path format: %s", entry.Path, err) } - if entry.Value == "" { - return fmt.Errorf("genesis vstorage.data entry %q has no data", entry.Path) - } } return nil } diff --git a/golang/cosmos/x/vstorage/keeper/keeper.go b/golang/cosmos/x/vstorage/keeper/keeper.go index ea6eca0797e..9a91e793b10 100644 --- a/golang/cosmos/x/vstorage/keeper/keeper.go +++ b/golang/cosmos/x/vstorage/keeper/keeper.go @@ -181,30 +181,6 @@ func (k Keeper) ImportStorage(ctx sdk.Context, entries []*types.DataEntry) { } } -func (k Keeper) MigrateNoDataPlaceholders(ctx sdk.Context) { - store := ctx.KVStore(k.storeKey) - - iterator := sdk.KVStorePrefixIterator(store, nil) - - // Copy empty keys first since cosmos stores do not support writing keys - // while an iterator is open over the domain - emptyKeys := [][]byte{} - for ; iterator.Valid(); iterator.Next() { - rawValue := iterator.Value() - if bytes.Equal(rawValue, types.EncodedDataPrefix) { - key := iterator.Key() - clonedKey := make([]byte, len(key)) - copy(clonedKey, key) - emptyKeys = append(emptyKeys, clonedKey) - } - } - iterator.Close() - - for _, key := range emptyKeys { - store.Set(key, types.EncodedNoDataValue) - } -} - func (k Keeper) EmitChange(ctx sdk.Context, change *ProposedChange) { if change.NewValue == change.ValueFromLastBlock { // No change. diff --git a/golang/cosmos/x/vstorage/keeper/keeper_test.go b/golang/cosmos/x/vstorage/keeper/keeper_test.go index d53c67ee842..1a2ce5d58ee 100644 --- a/golang/cosmos/x/vstorage/keeper/keeper_test.go +++ b/golang/cosmos/x/vstorage/keeper/keeper_test.go @@ -273,44 +273,3 @@ func TestStorageNotify(t *testing.T) { t.Errorf("got after second flush events %#v, want %#v", got, expectedAfterFlushEvents) } } - -func TestStorageMigrate(t *testing.T) { - testKit := makeTestKit() - ctx, keeper := testKit.ctx, testKit.vstorageKeeper - - // Simulate a pre-migration storage with empty string as placeholders - keeper.SetStorage(ctx, types.NewStorageEntry("key1", "value1")) - keeper.SetStorage(ctx, types.NewStorageEntry("key1.child1.grandchild1", "value1grandchild")) - keeper.SetStorage(ctx, types.NewStorageEntry("key1.child1", "")) - - // Do a deep set. - keeper.SetStorage(ctx, types.NewStorageEntry("key2.child2.grandchild2", "value2grandchild")) - keeper.SetStorage(ctx, types.NewStorageEntry("key2.child2.grandchild2a", "value2grandchilda")) - keeper.SetStorage(ctx, types.NewStorageEntry("key2.child2", "")) - keeper.SetStorage(ctx, types.NewStorageEntry("key2", "")) - - keeper.MigrateNoDataPlaceholders(ctx) - - if keeper.HasStorage(ctx, "key1.child1") { - t.Errorf("has key1.child1, want no value") - } - if keeper.HasStorage(ctx, "key2.child2") { - t.Errorf("has key2.child2, want no value") - } - if keeper.HasStorage(ctx, "key2") { - t.Errorf("has key2, want no value") - } - - // Check the export. - expectedExport := []*types.DataEntry{ - {Path: "key1", Value: "value1"}, - {Path: "key1.child1.grandchild1", Value: "value1grandchild"}, - {Path: "key2.child2.grandchild2", Value: "value2grandchild"}, - {Path: "key2.child2.grandchild2a", Value: "value2grandchilda"}, - } - got := keeper.ExportStorage(ctx) - if !reflect.DeepEqual(got, expectedExport) { - t.Errorf("got export %q, want %q", got, expectedExport) - } - keeper.ImportStorage(ctx, got) -} diff --git a/lerna.json b/lerna.json index 125a6ddc125..a6b094cfeba 100644 --- a/lerna.json +++ b/lerna.json @@ -13,5 +13,6 @@ "packages/*", "packages/wallet/*" ], + "useWorkspaces": true, "version": "independent" } diff --git a/package.json b/package.json index a70fa293e00..acf4ecc1ad0 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ "@jessie.js/eslint-plugin": "^0.4.0", "@types/express": "^4.17.17", "@types/node": "^16.13.0", - "@typescript-eslint/eslint-plugin": "^5.61.0", - "@typescript-eslint/parser": "^5.61.0", + "@typescript-eslint/eslint-plugin": "^6.1.0", + "@typescript-eslint/parser": "^6.1.0", "ava": "^5.3.0", "c8": "^7.13.0", "conventional-changelog-conventionalcommits": "^4.6.0", @@ -26,10 +26,11 @@ "eslint-plugin-github": "^4.8.0", "eslint-plugin-import": "^2.25.3", "eslint-plugin-jsdoc": "^46.4.3", - "eslint-plugin-prettier": "^5.0.0-alpha.2", - "lerna": "^3.22.1", + "eslint-plugin-prettier": "^5.0.0", + "lerna": "^5.6.2", "npm-run-all": "^4.1.5", "prettier": "^3.0.0", + "prettier-plugin-jsdoc": "^1.0.0", "typescript": "~5.1.6" }, "engines": { @@ -37,6 +38,24 @@ }, "prettier": { "arrowParens": "avoid", + "overrides": [ + { + "files": [ + "packages/ERTP/**/*.{js,ts}", + "packages/inter-protocol/**/*.{js,ts}", + "packages/vats/**/*.{js,ts}" + ], + "options": { + "plugins": [ + "prettier-plugin-jsdoc" + ], + "jsdocAddDefaultToDescription": false, + "jsdocParser": true, + "jsdocCapitalizeDescription": false, + "tsdoc": true + } + } + ], "singleQuote": true }, "scripts": { @@ -65,15 +84,5 @@ }, "dependencies": { "patch-package": "^6.5.1" - }, - "resolutions": { - "**/http-errors/depd": "^2.0.0", - "**/morgan/depd": "^2.0.0", - "**/agentkeepalive/depd": "^2.0.0", - "**/acorn-globals/acorn": "^8.7.1", - "**/acorn-node/acorn": "^8.7.1", - "**/espree/acorn": "^8.7.1", - "**/eslint/@babel/code-frame": "^7.12.11", - "**/@endo/eslint-config/@jessie.js/eslint-plugin": "^0.4.0" } } diff --git a/packages/ERTP/jsconfig.json b/packages/ERTP/jsconfig.json index d39030cbed2..376dea62cbb 100644 --- a/packages/ERTP/jsconfig.json +++ b/packages/ERTP/jsconfig.json @@ -2,6 +2,7 @@ { "extends": "../../tsconfig.json", "include": [ + "exported.js", "src/**/*.js", "src/**/*.ts", "test" diff --git a/packages/ERTP/package.json b/packages/ERTP/package.json index 6503f1fe1a5..7bc8f25d6aa 100644 --- a/packages/ERTP/package.json +++ b/packages/ERTP/package.json @@ -44,14 +44,14 @@ "@agoric/store": "^0.9.2", "@agoric/swingset-vat": "^0.32.2", "@agoric/vat-data": "^0.5.2", - "@endo/eventual-send": "^0.17.2", - "@endo/far": "^0.2.18", - "@endo/marshal": "^0.8.5", - "@endo/nat": "^4.1.27", - "@endo/promise-kit": "^0.2.56" + "@endo/eventual-send": "^0.17.3", + "@endo/far": "^0.2.19", + "@endo/marshal": "^0.8.6", + "@endo/nat": "^4.1.28", + "@endo/promise-kit": "^0.2.57" }, "devDependencies": { - "@endo/bundle-source": "^2.5.1", + "@endo/bundle-source": "^2.5.2", "@fast-check/ava": "^1.1.5", "ava": "^5.3.0", "tsd": "^0.28.1" diff --git a/packages/ERTP/src/amountMath.js b/packages/ERTP/src/amountMath.js index dbb05be47ba..2820cdc9c95 100644 --- a/packages/ERTP/src/amountMath.js +++ b/packages/ERTP/src/amountMath.js @@ -11,7 +11,12 @@ const { quote: q, Fail } = assert; /** * Constants for the kinds of assets we support. * - * @type {{ NAT: 'nat', SET: 'set', COPY_SET: 'copySet', COPY_BAG: 'copyBag' }} + * @type {{ + * NAT: 'nat'; + * SET: 'set'; + * COPY_SET: 'copySet'; + * COPY_BAG: 'copyBag'; + * }} */ const AssetKind = harden({ NAT: 'nat', @@ -21,9 +26,7 @@ const AssetKind = harden({ }); const assetKindNames = harden(Object.values(AssetKind).sort()); -/** - * @param {AssetKind} allegedAK - */ +/** @param {AssetKind} allegedAK */ const assertAssetKind = allegedAK => { assetKindNames.includes(allegedAK) || Fail`The assetKind ${allegedAK} must be one of ${q(assetKindNames)}`; @@ -31,42 +34,37 @@ const assertAssetKind = allegedAK => { harden(assertAssetKind); /** - * Amounts describe digital assets. From an amount, you can learn the - * brand of digital asset as well as "how much" or "how many". Amounts - * have two parts: a brand (loosely speaking, the type of digital - * asset) and the value (the answer to "how much"). For example, in - * the phrase "5 bucks", "bucks" takes the role of the brand and the - * value is 5. Amounts can describe fungible and non-fungible digital - * assets. Amounts are pass-by-copy and can be made by and sent to - * anyone. + * Amounts describe digital assets. From an amount, you can learn the brand of + * digital asset as well as "how much" or "how many". Amounts have two parts: a + * brand (loosely speaking, the type of digital asset) and the value (the answer + * to "how much"). For example, in the phrase "5 bucks", "bucks" takes the role + * of the brand and the value is 5. Amounts can describe fungible and + * non-fungible digital assets. Amounts are pass-by-copy and can be made by and + * sent to anyone. * - * The issuer is the authoritative source of the amount in payments - * and purses. The issuer must be able to do things such as add - * digital assets to a purse and withdraw digital assets from a purse. - * To do so, it must know how to add and subtract digital assets. - * Rather than hard-coding a particular solution, we chose to - * parameterize the issuer with a collection of polymorphic functions, - * which we call `AmountMath`. These math functions include concepts + * The issuer is the authoritative source of the amount in payments and purses. + * The issuer must be able to do things such as add digital assets to a purse + * and withdraw digital assets from a purse. To do so, it must know how to add + * and subtract digital assets. Rather than hard-coding a particular solution, + * we chose to parameterize the issuer with a collection of polymorphic + * functions, which we call `AmountMath`. These math functions include concepts * like addition, subtraction, and greater than or equal to. * - * We also want to make sure there is no confusion as to what kind of - * asset we are using. Thus, AmountMath includes checks of the - * `brand`, the unique identifier for the type of digital asset. If - * the wrong brand is used in AmountMath, an error is thrown and the - * operation does not succeed. + * We also want to make sure there is no confusion as to what kind of asset we + * are using. Thus, AmountMath includes checks of the `brand`, the unique + * identifier for the type of digital asset. If the wrong brand is used in + * AmountMath, an error is thrown and the operation does not succeed. * - * AmountMath uses mathHelpers to do most of the work, but then adds - * the brand to the result. The function `value` gets the value from - * the amount by removing the brand (amount -> value), and the - * function `make` adds the brand to produce an amount (value -> - * amount). The function `coerce` takes an amount and checks it, - * returning an amount (amount -> amount). + * AmountMath uses mathHelpers to do most of the work, but then adds the brand + * to the result. The function `value` gets the value from the amount by + * removing the brand (amount -> value), and the function `make` adds the brand + * to produce an amount (value -> amount). The function `coerce` takes an amount + * and checks it, returning an amount (amount -> amount). * - * Each issuer of digital assets has an associated brand in a - * one-to-one mapping. In untrusted contexts, such as in analyzing - * payments and amounts, we can get the brand and find the issuer - * which matches the brand. The issuer and the brand mutually validate - * each other. + * Each issuer of digital assets has an associated brand in a one-to-one + * mapping. In untrusted contexts, such as in analyzing payments and amounts, we + * can get the brand and find the issuer which matches the brand. The issuer and + * the brand mutually validate each other. */ const helpers = { @@ -137,7 +135,7 @@ const optionalBrandCheck = (allegedBrand, brand) => { * @param {Amount} leftAmount * @param {Amount} rightAmount * @param {Brand | undefined} brand - * @returns {MathHelpers<*>} + * @returns {MathHelpers} */ const checkLRAndGetHelpers = (leftAmount, rightAmount, brand = undefined) => { assertRecord(leftAmount, 'leftAmount'); @@ -172,11 +170,11 @@ const coerceLR = (h, leftAmount, rightAmount) => { }; /** - * Returns true if the leftAmount is greater than or equal to the - * rightAmount. The notion of "greater than or equal to" depends - * on the kind of amount, as defined by the MathHelpers. For example, - * whether rectangle A is greater than rectangle B depends on whether rectangle - * A includes rectangle B as defined by the logic in MathHelpers. + * Returns true if the leftAmount is greater than or equal to the rightAmount. + * The notion of "greater than or equal to" depends on the kind of amount, as + * defined by the MathHelpers. For example, whether rectangle A is greater than + * rectangle B depends on whether rectangle A includes rectangle B as defined by + * the logic in MathHelpers. * * @template {AssetKind} K * @param {Amount} leftAmount @@ -194,9 +192,8 @@ const isGTE = (leftAmount, rightAmount, brand = undefined) => { * * Amounts are the canonical description of tradable goods. They are manipulated * by issuers and mints, and represent the goods and currency carried by purses - * and - * payments. They can be used to represent things like currency, stock, and the - * abstract right to participate in a particular exchange. + * and payments. They can be used to represent things like currency, stock, and + * the abstract right to participate in a particular exchange. */ const AmountMath = { /** @@ -215,8 +212,8 @@ const AmountMath = { return harden({ brand, value }); }, /** - * Make sure this amount is valid enough, and return a corresponding - * valid amount if so. + * Make sure this amount is valid enough, and return a corresponding valid + * amount if so. * * @template {AssetKind} K * @param {Brand} brand @@ -242,8 +239,8 @@ const AmountMath = { */ getValue: (brand, amount) => AmountMath.coerce(brand, amount).value, /** - * Return the amount representing an empty amount. This is the - * identity element for MathHelpers.add and MatHelpers.subtract. + * Return the amount representing an empty amount. This is the identity + * element for MathHelpers.add and MatHelpers.subtract. * * @type {{ * (brand: Brand): Amount<'nat'>; @@ -257,8 +254,8 @@ const AmountMath = { return harden({ brand, value }); }, /** - * Return the amount representing an empty amount, using another - * amount as the template for the brand and assetKind. + * Return the amount representing an empty amount, using another amount as the + * template for the brand and assetKind. * * @template {AssetKind} K * @param {Amount} amount @@ -289,8 +286,8 @@ const AmountMath = { }, isGTE, /** - * Returns true if the leftAmount equals the rightAmount. We assume - * that if isGTE is true in both directions, isEqual is also true + * Returns true if the leftAmount equals the rightAmount. We assume that if + * isGTE is true in both directions, isEqual is also true * * @template {AssetKind} K * @param {Amount} leftAmount @@ -306,8 +303,8 @@ const AmountMath = { * Returns a new amount that is the union of both leftAmount and rightAmount. * * For fungible amount this means adding the values. For other kinds of - * amount, it usually means including all of the elements from both - * left and right. + * amount, it usually means including all of the elements from both left and + * right. * * @template {AssetKind} K * @param {Amount} leftAmount @@ -321,12 +318,11 @@ const AmountMath = { return harden({ brand: leftAmount.brand, value }); }, /** - * Returns a new amount that is the leftAmount minus the rightAmount - * (i.e. everything in the leftAmount that is not in the - * rightAmount). If leftAmount doesn't include rightAmount - * (subtraction results in a negative), throw an error. Because the - * left amount must include the right amount, this is NOT equivalent - * to set subtraction. + * Returns a new amount that is the leftAmount minus the rightAmount (i.e. + * everything in the leftAmount that is not in the rightAmount). If leftAmount + * doesn't include rightAmount (subtraction results in a negative), throw an + * error. Because the left amount must include the right amount, this is NOT + * equivalent to set subtraction. * * @template {AssetKind} K * @param {Amount} leftAmount @@ -374,9 +370,7 @@ const AmountMath = { }; harden(AmountMath); -/** - * @param {Amount} amount - */ +/** @param {Amount} amount */ const getAssetKind = amount => { assertRecord(amount, 'amount'); const { value } = amount; diff --git a/packages/ERTP/src/issuerKit.js b/packages/ERTP/src/issuerKit.js index a4e2589a35c..86b1107787d 100644 --- a/packages/ERTP/src/issuerKit.js +++ b/packages/ERTP/src/issuerKit.js @@ -25,13 +25,13 @@ import './types-ambient.js'; * @template {AssetKind} K * @param {IssuerRecord} issuerRecord * @param {Baggage} issuerBaggage - * @param {ShutdownWithFailure} [optShutdownWithFailure] If this issuer fails - * in the middle of an atomic action (which btw should never happen), it - * potentially leaves its ledger in a corrupted state. If this function was - * provided, then the failed atomic action will call it, so that some - * larger unit of computation, like the enclosing vat, can be shutdown - * before anything else is corrupted by that corrupted state. - * See https://github.com/Agoric/agoric-sdk/issues/3434 + * @param {ShutdownWithFailure} [optShutdownWithFailure] If this issuer fails in + * the middle of an atomic action (which btw should never happen), it + * potentially leaves its ledger in a corrupted state. If this function was + * provided, then the failed atomic action will call it, so that some larger + * unit of computation, like the enclosing vat, can be shutdown before + * anything else is corrupted by that corrupted state. See + * https://github.com/Agoric/agoric-sdk/issues/3434 * @returns {IssuerKit} */ const setupIssuerKit = ( @@ -80,13 +80,13 @@ const INSTANCE_KEY = 'issuer'; /** * @template {AssetKind} K * @param {Baggage} issuerBaggage - * @param {ShutdownWithFailure} [optShutdownWithFailure] If this issuer fails - * in the middle of an atomic action (which btw should never happen), it - * potentially leaves its ledger in a corrupted state. If this function was - * provided, then the failed atomic action will call it, so that some - * larger unit of computation, like the enclosing vat, can be shutdown - * before anything else is corrupted by that corrupted state. - * See https://github.com/Agoric/agoric-sdk/issues/3434 + * @param {ShutdownWithFailure} [optShutdownWithFailure] If this issuer fails in + * the middle of an atomic action (which btw should never happen), it + * potentially leaves its ledger in a corrupted state. If this function was + * provided, then the failed atomic action will call it, so that some larger + * unit of computation, like the enclosing vat, can be shutdown before + * anything else is corrupted by that corrupted state. See + * https://github.com/Agoric/agoric-sdk/issues/3434 * @returns {IssuerKit} */ export const prepareIssuerKit = ( @@ -99,43 +99,39 @@ export const prepareIssuerKit = ( harden(prepareIssuerKit); /** - * Does baggage already have an issuer from prepareIssuerKit()? - * That is: does it have the relevant keys defined? + * Does baggage already have an issuer from prepareIssuerKit()? That is: does it + * have the relevant keys defined? * * @param {Baggage} baggage */ export const hasIssuer = baggage => baggage.has(INSTANCE_KEY); -/** - * @typedef {Partial<{elementShape: Pattern}>} IssuerOptionsRecord - */ +/** @typedef {Partial<{ elementShape: Pattern }>} IssuerOptionsRecord */ /** - * @template {AssetKind} K - * The name becomes part of the brand in asset descriptions. - * The name is useful for debugging and double-checking - * assumptions, but should not be trusted wrt any external namespace. - * For example, anyone could create a new issuer kit with name 'BTC', but - * it is not bitcoin or even related. It is only the name according - * to that issuer and brand. + * @template {AssetKind} K The name becomes part of the brand in asset + * descriptions. The name is useful for debugging and double-checking + * assumptions, but should not be trusted wrt any external namespace. For + * example, anyone could create a new issuer kit with name 'BTC', but it is + * not bitcoin or even related. It is only the name according to that issuer + * and brand. * - * The assetKind will be used to import a specific mathHelpers - * from the mathHelpers library. For example, natMathHelpers, the - * default, is used for basic fungible tokens. - * - * `displayInfo` gives information to the UI on how to display the amount. + * The assetKind will be used to import a specific mathHelpers from the + * mathHelpers library. For example, natMathHelpers, the default, is used for + * basic fungible tokens. * + * `displayInfo` gives information to the UI on how to display the amount. * @param {Baggage} issuerBaggage * @param {string} name * @param {K} [assetKind=AssetKind.NAT] * @param {AdditionalDisplayInfo} [displayInfo={}] - * @param {ShutdownWithFailure} [optShutdownWithFailure] If this issuer fails - * in the middle of an atomic action (which btw should never happen), it - * potentially leaves its ledger in a corrupted state. If this function was - * provided, then the failed atomic action will call it, so that some - * larger unit of computation, like the enclosing vat, can be shutdown - * before anything else is corrupted by that corrupted state. - * See https://github.com/Agoric/agoric-sdk/issues/3434 + * @param {ShutdownWithFailure} [optShutdownWithFailure] If this issuer fails in + * the middle of an atomic action (which btw should never happen), it + * potentially leaves its ledger in a corrupted state. If this function was + * provided, then the failed atomic action will call it, so that some larger + * unit of computation, like the enclosing vat, can be shutdown before + * anything else is corrupted by that corrupted state. See + * https://github.com/Agoric/agoric-sdk/issues/3434 * @param {IssuerOptionsRecord} [options] * @returns {IssuerKit} */ @@ -155,30 +151,28 @@ export const makeDurableIssuerKit = ( harden(makeDurableIssuerKit); /** - * @template {AssetKind} [K='nat'] - * The name becomes part of the brand in asset descriptions. - * The name is useful for debugging and double-checking - * assumptions, but should not be trusted wrt any external namespace. - * For example, anyone could create a new issuer kit with name 'BTC', but - * it is not bitcoin or even related. It is only the name according - * to that issuer and brand. - * - * The assetKind will be used to import a specific mathHelpers - * from the mathHelpers library. For example, natMathHelpers, the - * default, is used for basic fungible tokens. + * @template {AssetKind} [K='nat'] The name becomes part of the brand in asset + * descriptions. The name is useful for debugging and double-checking + * assumptions, but should not be trusted wrt any external namespace. For + * example, anyone could create a new issuer kit with name 'BTC', but it is + * not bitcoin or even related. It is only the name according to that issuer + * and brand. * - * `displayInfo` gives information to the UI on how to display the amount. + * The assetKind will be used to import a specific mathHelpers from the + * mathHelpers library. For example, natMathHelpers, the default, is used for + * basic fungible tokens. * + * `displayInfo` gives information to the UI on how to display the amount. * @param {string} name * @param {K} [assetKind='nat'] * @param {AdditionalDisplayInfo} [displayInfo={}] - * @param {ShutdownWithFailure} [optShutdownWithFailure] If this issuer fails - * in the middle of an atomic action (which btw should never happen), it - * potentially leaves its ledger in a corrupted state. If this function was - * provided, then the failed atomic action will call it, so that some - * larger unit of computation, like the enclosing vat, can be shutdown - * before anything else is corrupted by that corrupted state. - * See https://github.com/Agoric/agoric-sdk/issues/3434 + * @param {ShutdownWithFailure} [optShutdownWithFailure] If this issuer fails in + * the middle of an atomic action (which btw should never happen), it + * potentially leaves its ledger in a corrupted state. If this function was + * provided, then the failed atomic action will call it, so that some larger + * unit of computation, like the enclosing vat, can be shutdown before + * anything else is corrupted by that corrupted state. See + * https://github.com/Agoric/agoric-sdk/issues/3434 * @param {IssuerOptionsRecord} [options] * @returns {IssuerKit} */ diff --git a/packages/ERTP/src/legacy-payment-helpers.js b/packages/ERTP/src/legacy-payment-helpers.js index 30873d6c46d..f7ee86b4e50 100644 --- a/packages/ERTP/src/legacy-payment-helpers.js +++ b/packages/ERTP/src/legacy-payment-helpers.js @@ -7,19 +7,17 @@ import { AmountMath } from './amountMath.js'; const { Fail } = assert; /** - * @file - * This file contains safer helper function alternatives to the - * similarly named methods on issuer. - * These are parameterized by a purse used for recovering lost payments, which - * we call a `recoveryPurse`. Any payments created by these - * helper functions are in the recovery set of that `recoveryPurse` until - * otherwise used up. + * @file This file contains safer helper function alternatives to the similarly + * named methods on issuer. These are parameterized by a purse used for + * recovering lost payments, which we call a `recoveryPurse`. Any payments + * created by these helper functions are in the recovery set of that + * `recoveryPurse` until otherwise used up. * - * One of these helper functions is less safe in one way: - * `combine` is not failure atomic. If the `combine` helper function - * fails, some of the input payments may have been used up. However, even - * in that case, no assets would be lost. The assets from the used up payments - * will be in the argument `recoveryPurse`. + * One of these helper functions is less safe in one way: `combine` is not + * failure atomic. If the `combine` helper function fails, some of the input + * payments may have been used up. However, even in that case, no assets would + * be lost. The assets from the used up payments will be in the argument + * `recoveryPurse`. */ /** @@ -43,11 +41,11 @@ harden(claim); /** * Note: Not failure atomic. But as long as you don't lose the argument - * `recoveryPurse`, no assets are lost. - * If any of the deposits fail, or the total does not - * match optTotalAmount, some payments may still have been deposited. Those - * assets will be in the argument `recoveryPurse`. All undeposited payments - * will still be in the recovery sets of their purses of origin. + * `recoveryPurse`, no assets are lost. If any of the deposits fail, or the + * total does not match optTotalAmount, some payments may still have been + * deposited. Those assets will be in the argument `recoveryPurse`. All + * undeposited payments will still be in the recovery sets of their purses of + * origin. * * @template {AssetKind} K * @param {ERef>} recoveryPurse @@ -84,11 +82,10 @@ harden(combine); /** * Note: Not failure atomic. But as long as you don't lose the argument - * `recoveryPurse`, no assets are lost. - * If the amount in `srcPaymentP` is not >= `paymentAmountA`, the payment may - * still be deposited anyway, before failing in the subsequent subtract. - * In that case, those - * assets will be in the argument `recoveryPurse`. + * `recoveryPurse`, no assets are lost. If the amount in `srcPaymentP` is not >= + * `paymentAmountA`, the payment may still be deposited anyway, before failing + * in the subsequent subtract. In that case, those assets will be in the + * argument `recoveryPurse`. * * @template {AssetKind} K * @param {ERef>} recoveryPurse @@ -111,12 +108,10 @@ harden(split); /** * Note: Not failure atomic. But as long as you don't lose the argument - * `recoveryPurse`, no assets are lost. - * If the amount in `srcPaymentP` is exactly the sum of the amounts, - * the payment may - * still be deposited anyway, before failing in the subsequent equality check. - * In that case, those - * assets will be in the argument `recoveryPurse`. + * `recoveryPurse`, no assets are lost. If the amount in `srcPaymentP` is + * exactly the sum of the amounts, the payment may still be deposited anyway, + * before failing in the subsequent equality check. In that case, those assets + * will be in the argument `recoveryPurse`. * * @template {AssetKind} K * @param {ERef>} recoveryPurse diff --git a/packages/ERTP/src/mathHelpers/copyBagMathHelpers.js b/packages/ERTP/src/mathHelpers/copyBagMathHelpers.js index 576bd2bc6c0..20305c24610 100644 --- a/packages/ERTP/src/mathHelpers/copyBagMathHelpers.js +++ b/packages/ERTP/src/mathHelpers/copyBagMathHelpers.js @@ -15,9 +15,7 @@ import '../types-ambient.js'; /** @type {CopyBag} */ const empty = makeCopyBag([]); -/** - * @type {MathHelpers} - */ +/** @type {MathHelpers} */ export const copyBagMathHelpers = harden({ doCoerce: bag => { mustMatch(bag, M.bag(), 'bag of amount'); diff --git a/packages/ERTP/src/mathHelpers/copySetMathHelpers.js b/packages/ERTP/src/mathHelpers/copySetMathHelpers.js index c18501f00e5..653f2185a16 100644 --- a/packages/ERTP/src/mathHelpers/copySetMathHelpers.js +++ b/packages/ERTP/src/mathHelpers/copySetMathHelpers.js @@ -15,9 +15,7 @@ import '../types-ambient.js'; /** @type {CopySet} */ const empty = makeCopySet([]); -/** - * @type {MathHelpers} - */ +/** @type {MathHelpers} */ export const copySetMathHelpers = harden({ doCoerce: set => { mustMatch(set, M.set(), 'set of amount'); diff --git a/packages/ERTP/src/mathHelpers/natMathHelpers.js b/packages/ERTP/src/mathHelpers/natMathHelpers.js index 3528047297f..688d19f5d4c 100644 --- a/packages/ERTP/src/mathHelpers/natMathHelpers.js +++ b/packages/ERTP/src/mathHelpers/natMathHelpers.js @@ -8,14 +8,13 @@ const { Fail } = assert; const empty = 0n; /** - * Fungible digital assets use the natMathHelpers to manage balances - - * the operations are merely arithmetic on natural, non-negative - * numbers. + * Fungible digital assets use the natMathHelpers to manage balances - the + * operations are merely arithmetic on natural, non-negative numbers. * - * Natural numbers are used for fungible erights such as money because - * rounding issues make floats problematic. All operations should be - * done with the smallest whole unit such that the `natMathHelpers` never - * deals with fractional parts. + * Natural numbers are used for fungible erights such as money because rounding + * issues make floats problematic. All operations should be done with the + * smallest whole unit such that the `natMathHelpers` never deals with + * fractional parts. * * @type {MathHelpers} */ diff --git a/packages/ERTP/src/paymentLedger.js b/packages/ERTP/src/paymentLedger.js index 330300b5e0f..b4575854d14 100644 --- a/packages/ERTP/src/paymentLedger.js +++ b/packages/ERTP/src/paymentLedger.js @@ -70,8 +70,8 @@ const amountShapeFromElementShape = (brand, assetKind, elementShape) => { }; /** - * Make the paymentLedger, the source of truth for the balances of - * payments. All minting and transfer authority originates here. + * Make the paymentLedger, the source of truth for the balances of payments. All + * minting and transfer authority originates here. * * @template {AssetKind} K * @param {Baggage} issuerBaggage @@ -146,22 +146,21 @@ export const preparePaymentLedger = ( ); /** - * A withdrawn live payment is associated with the recovery set of - * the purse it was withdrawn from. Let's call these "recoverable" - * payments. All recoverable payments are live, but not all live - * payments are recoverable. We do the bookkeeping for payment recovery - * with this weakmap from recoverable payments to the recovery set they are - * in. - * A bunch of interesting invariants here: - * * Every payment that is a key in the outer `paymentRecoverySets` - * weakMap is also in the recovery set indexed by that payment. - * * Implied by the above but worth stating: the payment is only - * in at most one recovery set. - * * A recovery set only contains such payments. - * * Every purse is associated with exactly one recovery set unique to - * it. - * * A purse's recovery set only contains payments withdrawn from - * that purse and not yet consumed. + * A withdrawn live payment is associated with the recovery set of the purse + * it was withdrawn from. Let's call these "recoverable" payments. All + * recoverable payments are live, but not all live payments are recoverable. + * We do the bookkeeping for payment recovery with this weakmap from + * recoverable payments to the recovery set they are in. A bunch of + * interesting invariants here: + * + * - Every payment that is a key in the outer `paymentRecoverySets` weakMap is + * also in the recovery set indexed by that payment. + * - Implied by the above but worth stating: the payment is only in at most one + * recovery set. + * - A recovery set only contains such payments. + * - Every purse is associated with exactly one recovery set unique to it. + * - A purse's recovery set only contains payments withdrawn from that purse and + * not yet consumed. * * @type {WeakMapStore>} */ @@ -172,8 +171,7 @@ export const preparePaymentLedger = ( /** * To maintain the invariants listed in the `paymentRecoverySets` comment, - * `initPayment` should contain the only - * call to `paymentLedger.init`. + * `initPayment` should contain the only call to `paymentLedger.init`. * * @param {Payment} payment * @param {Amount} amount @@ -189,8 +187,7 @@ export const preparePaymentLedger = ( /** * To maintain the invariants listed in the `paymentRecoverySets` comment, - * `deletePayment` should contain the only - * call to `paymentLedger.delete`. + * `deletePayment` should contain the only call to `paymentLedger.delete`. * * @param {Payment} payment */ @@ -203,19 +200,18 @@ export const preparePaymentLedger = ( } }; - /** @type {(left: Amount, right: Amount) => Amount } */ + /** @type {(left: Amount, right: Amount) => Amount} */ const add = (left, right) => AmountMath.add(left, right, brand); - /** @type {(left: Amount, right: Amount) => Amount } */ + /** @type {(left: Amount, right: Amount) => Amount} */ const subtract = (left, right) => AmountMath.subtract(left, right, brand); /** @type {(allegedAmount: Amount) => Amount} */ const coerce = allegedAmount => AmountMath.coerce(brand, allegedAmount); - /** @type {(left: Amount, right: Amount) => boolean } */ + /** @type {(left: Amount, right: Amount) => boolean} */ /** - * Methods like deposit() have an optional second parameter - * `optAmountShape` - * which, if present, is supposed to match the balance of the - * payment. This helper function does that check. + * Methods like deposit() have an optional second parameter `optAmountShape` + * which, if present, is supposed to match the balance of the payment. This + * helper function does that check. * * Note: `optAmountShape` is user-supplied with no previous validation. * @@ -243,10 +239,10 @@ export const preparePaymentLedger = ( /** * Used by the purse code to implement purse.deposit * - * @param {Amount} currentBalance - the current balance of the purse - * before a deposit - * @param {(newPurseBalance: Amount) => void} updatePurseBalance - - * commit the purse balance + * @param {Amount} currentBalance - the current balance of the purse before a + * deposit + * @param {(newPurseBalance: Amount) => void} updatePurseBalance - commit the + * purse balance * @param {Payment} srcPayment * @param {Pattern} [optAmountShape] * @returns {Amount} @@ -282,10 +278,10 @@ export const preparePaymentLedger = ( /** * Used by the purse code to implement purse.withdraw * - * @param {Amount} currentBalance - the current balance of the purse - * before a withdrawal - * @param {(newPurseBalance: Amount) => void} updatePurseBalance - - * commit the purse balance + * @param {Amount} currentBalance - the current balance of the purse before a + * withdrawal + * @param {(newPurseBalance: Amount) => void} updatePurseBalance - commit the + * purse balance * @param {Amount} amount - the amount to be withdrawn * @param {SetStore} recoverySet * @returns {Payment} @@ -378,9 +374,9 @@ export const preparePaymentLedger = ( /** * Provides for the recovery of newly minted but not-yet-deposited payments. * - * Because the `mintRecoveryPurse` is placed in baggage, even if the - * caller of `makeIssuerKit` drops it on the floor, it can still be - * recovered in an emergency upgrade. + * Because the `mintRecoveryPurse` is placed in baggage, even if the caller of + * `makeIssuerKit` drops it on the floor, it can still be recovered in an + * emergency upgrade. * * @type {Purse} */ diff --git a/packages/ERTP/src/typeGuards.js b/packages/ERTP/src/typeGuards.js index 22752f7daa4..d2751edb501 100644 --- a/packages/ERTP/src/typeGuards.js +++ b/packages/ERTP/src/typeGuards.js @@ -11,62 +11,56 @@ export const NotifierShape = M.remotable('Notifier'); export const MintShape = M.remotable('Mint'); /** - * When the AmountValue of an Amount fits the NatValueShape, i.e., when it is - * a non-negative bigint, then it represents that many units of the - * fungible asset represented by that amount. The brand of that amount - * should indeed represent a kind of asset consisting of a countable - * set of fungible units. + * When the AmountValue of an Amount fits the NatValueShape, i.e., when it is a + * non-negative bigint, then it represents that many units of the fungible asset + * represented by that amount. The brand of that amount should indeed represent + * a kind of asset consisting of a countable set of fungible units. */ const NatValueShape = M.nat(); /** * When the AmountValue of an Amount fits the CopySetValueShape, i.e., when it - * is a CopySet, then it represents the set of those - * keys, where each key represents some individual non-fungible - * item, like a concert ticket, from the non-fungible asset class - * represented by that amount's brand. The amount itself represents - * the set of these items, as opposed to any of the other items - * from the same asset class. + * is a CopySet, then it represents the set of those keys, where each key + * represents some individual non-fungible item, like a concert ticket, from the + * non-fungible asset class represented by that amount's brand. The amount + * itself represents the set of these items, as opposed to any of the other + * items from the same asset class. * - * If a given value class represents concert tickets, it seems bizarre - * that we can form amounts of any key. The hard constraint is that - * the code that holds the mint for that asset class---the one associated - * with that brand, only mints the items representing the real units - * of that asset class as defined by it. Anyone else can put together - * an amount expressing, for example, that they "want" some items that - * will never be minted. That want will never be satisfied. - * "You can't always get..." + * If a given value class represents concert tickets, it seems bizarre that we + * can form amounts of any key. The hard constraint is that the code that holds + * the mint for that asset class---the one associated with that brand, only + * mints the items representing the real units of that asset class as defined by + * it. Anyone else can put together an amount expressing, for example, that they + * "want" some items that will never be minted. That want will never be + * satisfied. "You can't always get..." */ const CopySetValueShape = M.set(); /** - * When the AmountValue of an Amount fits the SetValueShape, i.e., when it - * is a CopyArray of passable Keys. This representation is deprecated. + * When the AmountValue of an Amount fits the SetValueShape, i.e., when it is a + * CopyArray of passable Keys. This representation is deprecated. * * @deprecated Please change from using array-based SetValues to CopySet-based - * CopySetValues. + * CopySetValues. */ const SetValueShape = M.arrayOf(M.key()); /** * When the AmountValue of an Amount fits the CopyBagValueShape, i.e., when it - * is a CopyBag, then it represents the bag (multiset) of those - * keys, where each key represents some individual semi-fungible - * item, like a concert ticket, from the semi-fungible asset class - * represented by that amount's brand. The number of times that key - * appears in the bag is the number of fungible units of that key. - * The amount itself represents - * the bag of these items, as opposed to any of the other items - * from the same asset class. + * is a CopyBag, then it represents the bag (multiset) of those keys, where each + * key represents some individual semi-fungible item, like a concert ticket, + * from the semi-fungible asset class represented by that amount's brand. The + * number of times that key appears in the bag is the number of fungible units + * of that key. The amount itself represents the bag of these items, as opposed + * to any of the other items from the same asset class. * - * If a given value class represents concert tickets, it seems bizarre - * that we can form amounts of any key. The hard constraint is that - * the code that holds the mint for that asset class---the one associated - * with that brand, only mints the items representing the real units - * of that asset class as defined by it. Anyone else can put together - * an amount expressing, for example, that they "want" some items that - * will never be minted. That want will never be satisfied. - * "You can't always get..." + * If a given value class represents concert tickets, it seems bizarre that we + * can form amounts of any key. The hard constraint is that the code that holds + * the mint for that asset class---the one associated with that brand, only + * mints the items representing the real units of that asset class as defined by + * it. Anyone else can put together an amount expressing, for example, that they + * "want" some items that will never be minted. That want will never be + * satisfied. "You can't always get..." */ const CopyBagValueShape = M.bag(); @@ -106,11 +100,11 @@ export const isCopySetValue = value => matches(value, CopySetValueShape); harden(isCopySetValue); /** - * Returns true if value is a pass by copy array structure. Does not - * check for duplicates. To check for duplicates, use setMathHelpers.coerce. + * Returns true if value is a pass by copy array structure. Does not check for + * duplicates. To check for duplicates, use setMathHelpers.coerce. * * @deprecated Please change from using array-based SetValues to CopySet-based - * CopySetValues. + * CopySetValues. * @param {AmountValue} value * @returns {value is SetValue} */ diff --git a/packages/ERTP/src/types-ambient.js b/packages/ERTP/src/types-ambient.js index d5f9152ca82..4522ebfee6d 100644 --- a/packages/ERTP/src/types-ambient.js +++ b/packages/ERTP/src/types-ambient.js @@ -4,148 +4,134 @@ /** * @template {AssetKind} [K=AssetKind] - * @typedef {object} Amount - * Amounts are descriptions of digital assets, answering the questions - * "how much" and "of what kind". Amounts are values labeled with a brand. - * AmountMath executes the logic of how amounts are changed when digital - * assets are merged, separated, or otherwise manipulated. For - * example, a deposit of 2 bucks into a purse that already has 3 bucks - * gives a new purse balance of 5 bucks. An empty purse has 0 bucks. AmountMath - * relies heavily on polymorphic MathHelpers, which manipulate the unbranded - * portion. - * + * @typedef {object} Amount Amounts are descriptions of digital assets, + * answering the questions "how much" and "of what kind". Amounts are values + * labeled with a brand. AmountMath executes the logic of how amounts are + * changed when digital assets are merged, separated, or otherwise + * manipulated. For example, a deposit of 2 bucks into a purse that already + * has 3 bucks gives a new purse balance of 5 bucks. An empty purse has 0 + * bucks. AmountMath relies heavily on polymorphic MathHelpers, which + * manipulate the unbranded portion. * @property {Brand} brand * @property {AssetValueForKind} value */ /** - * @typedef {NatValue | SetValue | CopySet | CopyBag} AmountValue - * An `AmountValue` describes a set or quantity of assets that can be owned or - * shared. - * - * A fungible `AmountValue` uses a non-negative bigint to represent a quantity - * of that many assets. - * - * A non-fungible `AmountValue` uses an array or CopySet of `Key`s to represent - * a set of whatever asset each key represents. A `Key` is a passable value - * that can be used as an element in a set (SetStore or CopySet) or as the - * key in a map (MapStore or CopyMap). - * - * `SetValue` is for the deprecated set representation, using an array directly - * to represent the array of its elements. `CopySet` is the proper - * representation using a CopySet. - * - * A semi-fungible `CopyBag` is represented as a - * `CopyBag` of `Key` objects. "Bag" is synonymous with MultiSet, where an - * element of a bag can be present once or more times, i.e., some positive - * bigint number of times, representing that quantity of the asset represented - * by that key. + * @typedef {NatValue | SetValue | CopySet | CopyBag} AmountValue An + * `AmountValue` describes a set or quantity of assets that can be owned or + * shared. + * + * A fungible `AmountValue` uses a non-negative bigint to represent a quantity + * of that many assets. + * + * A non-fungible `AmountValue` uses an array or CopySet of `Key`s to represent + * a set of whatever asset each key represents. A `Key` is a passable value + * that can be used as an element in a set (SetStore or CopySet) or as the key + * in a map (MapStore or CopyMap). + * + * `SetValue` is for the deprecated set representation, using an array directly + * to represent the array of its elements. `CopySet` is the proper + * representation using a CopySet. + * + * A semi-fungible `CopyBag` is represented as a `CopyBag` of `Key` objects. + * "Bag" is synonymous with MultiSet, where an element of a bag can be present + * once or more times, i.e., some positive bigint number of times, + * representing that quantity of the asset represented by that key. */ /** - * @typedef {'nat' | 'set' | 'copySet' | 'copyBag' } AssetKind - * - * See doc-comment for `AmountValue`. + * @typedef {'nat' | 'set' | 'copySet' | 'copyBag'} AssetKind See doc-comment + * for `AmountValue`. */ /** * @template {AssetKind} K - * @typedef {K extends 'nat' ? NatValue : - * K extends 'set' ? SetValue : - * K extends 'copySet' ? CopySet: - * K extends 'copyBag' ? CopyBag : - * never - * } AssetValueForKind + * @typedef {K extends 'nat' + * ? NatValue + * : K extends 'set' + * ? SetValue + * : K extends 'copySet' + * ? CopySet + * : K extends 'copyBag' + * ? CopyBag + * : never} AssetValueForKind */ /** * @template {AmountValue} V - * @typedef {V extends NatValue ? 'nat' : - * V extends SetValue ? 'set' : - * V extends CopySet ? 'copySet' : - * V extends CopyBag ? 'copyBag' : - * never} AssetKindForValue + * @typedef {V extends NatValue + * ? 'nat' + * : V extends SetValue + * ? 'set' + * : V extends CopySet + * ? 'copySet' + * : V extends CopyBag + * ? 'copyBag' + * : never} AssetKindForValue */ /** * @template {AssetKind} [K=AssetKind] * @typedef {object} DisplayInfo - * @property {number} [decimalPlaces] Tells the display software how - * many decimal places to move the decimal over to the left, or in - * other words, which position corresponds to whole numbers. We - * require fungible digital assets to be represented in integers, in - * the smallest unit (i.e. USD might be represented in mill, a - * thousandth of a dollar. In that case, `decimalPlaces` would be - * 3.) This property is optional, and for non-fungible digital - * assets, should not be specified. The decimalPlaces property - * should be used for *display purposes only*. Any other use is an + * @property {number} [decimalPlaces] Tells the display software how many + * decimal places to move the decimal over to the left, or in other words, + * which position corresponds to whole numbers. We require fungible digital + * assets to be represented in integers, in the smallest unit (i.e. USD might + * be represented in mill, a thousandth of a dollar. In that case, + * `decimalPlaces` would be 3.) This property is optional, and for + * non-fungible digital assets, should not be specified. The decimalPlaces + * property should be used for _display purposes only_. Any other use is an * anti-pattern. - * @property {K} assetKind - the kind of asset, either - * AssetKind.NAT (fungible) or - * AssetKind.SET or AssetKind.COPY_SET (non-fungible) + * @property {K} assetKind - the kind of asset, either AssetKind.NAT (fungible) + * or AssetKind.SET or AssetKind.COPY_SET (non-fungible) */ /** * @template {AssetKind} [K=AssetKind] - * @typedef {object} Brand - * The brand identifies the kind of issuer, and has a function to get the - * alleged name for the kind of asset described. The alleged name (such - * as 'BTC' or 'moola') is provided by the maker of the issuer and should - * not be trusted as accurate. - * - * Every amount created by a particular AmountMath will share the same brand, - * but recipients cannot rely on the brand to verify that a purported amount - * represents the issuer they intended, since the same brand can be reused by - * a misbehaving issuer. - * + * @typedef {object} Brand The brand identifies the kind of issuer, and has a + * function to get the alleged name for the kind of asset described. The + * alleged name (such as 'BTC' or 'moola') is provided by the maker of the + * issuer and should not be trusted as accurate. + * + * Every amount created by a particular AmountMath will share the same brand, + * but recipients cannot rely on the brand to verify that a purported amount + * represents the issuer they intended, since the same brand can be reused by + * a misbehaving issuer. * @property {(allegedIssuer: ERef) => Promise} isMyIssuer - * Should be used with `issuer.getBrand` to ensure an issuer and brand match. + * Should be used with `issuer.getBrand` to ensure an issuer and brand match. * @property {() => string} getAllegedName - * @property {() => DisplayInfo} getDisplayInfo - * Give information to UI on how to display the amount. + * @property {() => DisplayInfo} getDisplayInfo Give information to UI on how + * to display the amount. * @property {() => Pattern} getAmountShape */ // /////////////////////////// Issuer ////////////////////////////////////////// /** - * @callback IssuerIsLive - * - * Return true if the payment continues to exist. - * - * If the payment is a promise, the operation will proceed upon - * resolution. + * @callback IssuerIsLive Return true if the payment continues to exist. * + * If the payment is a promise, the operation will proceed upon resolution. * @param {ERef} payment * @returns {Promise} */ /** * @template {AssetKind} K - * @callback IssuerGetAmountOf - * - * Get the amount of digital assets in the payment. Because the - * payment is not trusted, we cannot call a method on it directly, and - * must use the issuer instead. - * - * If the payment is a promise, the operation will proceed upon - * resolution. + * @callback IssuerGetAmountOf Get the amount of digital assets in the payment. + * Because the payment is not trusted, we cannot call a method on it directly, + * and must use the issuer instead. * + * If the payment is a promise, the operation will proceed upon resolution. * @param {ERef} payment * @returns {Promise>} */ /** - * @callback IssuerBurn - * - * Burn all of the digital assets in the - * payment. `optAmount` is optional. If `optAmount` is present, the - * code will insist that the amount of the digital assets in the - * payment is equal to `optAmount`, to prevent sending the wrong - * payment and other confusion. - * - * If the payment is a promise, the operation will proceed upon - * resolution. + * @callback IssuerBurn Burn all of the digital assets in the payment. + * `optAmount` is optional. If `optAmount` is present, the code will insist + * that the amount of the digital assets in the payment is equal to + * `optAmount`, to prevent sending the wrong payment and other confusion. * + * If the payment is a promise, the operation will proceed upon resolution. * @param {ERef} payment * @param {Pattern} [optAmountShape] * @returns {Promise} @@ -153,17 +139,13 @@ /** * @template {AssetKind} K - * @callback IssuerClaim - * - * Transfer all digital assets from the payment to a new payment and - * delete the original. `optAmount` is optional. If `optAmount` is - * present, the code will insist that the amount of digital assets in - * the payment is equal to `optAmount`, to prevent sending the wrong - * payment and other confusion. - * - * If the payment is a promise, the operation will proceed upon - * resolution. + * @callback IssuerClaim Transfer all digital assets from the payment to a new + * payment and delete the original. `optAmount` is optional. If `optAmount` is + * present, the code will insist that the amount of digital assets in the + * payment is equal to `optAmount`, to prevent sending the wrong payment and + * other confusion. * + * If the payment is a promise, the operation will proceed upon resolution. * @param {ERef>} payment * @param {Pattern} [optAmountShape] * @returns {Promise>} @@ -171,13 +153,10 @@ /** * @template {AssetKind} K - * @callback IssuerCombine - * - * Combine multiple payments into one payment. - * - * If any of the payments is a promise, the operation will proceed - * upon resolution. + * @callback IssuerCombine Combine multiple payments into one payment. * + * If any of the payments is a promise, the operation will proceed upon + * resolution. * @param {ERef>[]} paymentsArray * @param {Amount} [optTotalAmount] * @returns {Promise>} @@ -185,28 +164,20 @@ /** * @template {AssetKind} K - * @callback IssuerSplit - * - * Split a single payment into two payments, - * A and B, according to the paymentAmountA passed in. - * - * If the payment is a promise, the operation will proceed upon - * resolution. + * @callback IssuerSplit Split a single payment into two payments, A and B, + * according to the paymentAmountA passed in. * + * If the payment is a promise, the operation will proceed upon resolution. * @param {ERef>} payment * @param {Amount} paymentAmountA * @returns {Promise[]>} */ /** - * @callback IssuerSplitMany - * - * Split a single payment into many payments, according to the amounts - * passed in. - * - * If the payment is a promise, the operation will proceed upon - * resolution. + * @callback IssuerSplitMany Split a single payment into many payments, + * according to the amounts passed in. * + * If the payment is a promise, the operation will proceed upon resolution. * @param {ERef} payment * @param {Amount[]} amounts * @returns {Promise} @@ -214,30 +185,24 @@ /** * @template {AssetKind} [K=AssetKind] - * @typedef {object} Issuer - * - * The issuer cannot mint a new amount, but it can create empty purses - * and payments. The issuer can also transform payments (splitting - * payments, combining payments, burning payments, and claiming - * payments exclusively). The issuer should be gotten from a trusted - * source and then relied upon as the decider of whether an untrusted - * payment is valid. - * - * @property {() => Brand} getBrand Get the Brand for this Issuer. The - * Brand indicates the type of digital asset and is shared by the - * mint, the issuer, and any purses and payments of this particular - * kind. The brand is not closely held, so this function should not be - * trusted to identify an issuer alone. Fake digital assets and amount - * can use another issuer's brand. - * - * @property {() => string} getAllegedName Get the allegedName for - * this mint/issuer - * @property {() => AssetKind} getAssetKind Get the kind of - * MathHelpers used by this Issuer. - * @property {() => DisplayInfo} getDisplayInfo Give information to UI - * on how to display amounts for this issuer. - * @property {() => Purse} makeEmptyPurse Make an empty purse of this - * brand. + * @typedef {object} Issuer The issuer cannot mint a new amount, but it can + * create empty purses and payments. The issuer can also transform payments + * (splitting payments, combining payments, burning payments, and claiming + * payments exclusively). The issuer should be gotten from a trusted source + * and then relied upon as the decider of whether an untrusted payment is + * valid. + * @property {() => Brand} getBrand Get the Brand for this Issuer. The Brand + * indicates the type of digital asset and is shared by the mint, the issuer, + * and any purses and payments of this particular kind. The brand is not + * closely held, so this function should not be trusted to identify an issuer + * alone. Fake digital assets and amount can use another issuer's brand. + * @property {() => string} getAllegedName Get the allegedName for this + * mint/issuer + * @property {() => AssetKind} getAssetKind Get the kind of MathHelpers used by + * this Issuer. + * @property {() => DisplayInfo} getDisplayInfo Give information to UI on how + * to display amounts for this issuer. + * @property {() => Purse} makeEmptyPurse Make an empty purse of this brand. * @property {IssuerIsLive} isLive * @property {IssuerGetAmountOf} getAmountOf * @property {IssuerBurn} burn @@ -264,33 +229,27 @@ /** * @typedef {object} AdditionalDisplayInfo - * - * @property {number} [decimalPlaces] Tells the display software how - * many decimal places to move the decimal over to the left, or in - * other words, which position corresponds to whole numbers. We - * require fungible digital assets to be represented in integers, in - * the smallest unit (i.e. USD might be represented in mill, a - * thousandth of a dollar. In that case, `decimalPlaces` would be - * 3.) This property is optional, and for non-fungible digital - * assets, should not be specified. The decimalPlaces property - * should be used for *display purposes only*. Any other use is an + * @property {number} [decimalPlaces] Tells the display software how many + * decimal places to move the decimal over to the left, or in other words, + * which position corresponds to whole numbers. We require fungible digital + * assets to be represented in integers, in the smallest unit (i.e. USD might + * be represented in mill, a thousandth of a dollar. In that case, + * `decimalPlaces` would be 3.) This property is optional, and for + * non-fungible digital assets, should not be specified. The decimalPlaces + * property should be used for _display purposes only_. Any other use is an * anti-pattern. * @property {AssetKind} [assetKind] */ -/** - * @typedef {import('@agoric/swingset-vat').ShutdownWithFailure} ShutdownWithFailure - */ +/** @typedef {import('@agoric/swingset-vat').ShutdownWithFailure} ShutdownWithFailure */ /** * @template {AssetKind} [K=AssetKind] - * @typedef {object} Mint - * Holding a Mint carries the right to issue new digital assets. These - * assets all have the same kind, which is called a Brand. - * + * @typedef {object} Mint Holding a Mint carries the right to issue new digital + * assets. These assets all have the same kind, which is called a Brand. * @property {() => Issuer} getIssuer Gets the Issuer for this mint. - * @property {(newAmount: Amount) => Payment} mintPayment - * Creates a new Payment containing newly minted amount. + * @property {(newAmount: Amount) => Payment} mintPayment Creates a new + * Payment containing newly minted amount. */ /** @@ -302,12 +261,12 @@ /** * @typedef {object} DepositFacet - * @property {DepositFacetReceive} receive - * Deposit all the contents of payment into the purse that made this facet, - * returning the amount. If the optional argument `optAmount` does not equal the - * amount of digital assets in the payment, throw an error. + * @property {DepositFacetReceive} receive Deposit all the contents of payment + * into the purse that made this facet, returning the amount. If the optional + * argument `optAmount` does not equal the amount of digital assets in the + * payment, throw an error. * - * If payment is a promise, throw an error. + * If payment is a promise, throw an error. */ /** @@ -320,121 +279,94 @@ /** * @template {AssetKind} [K=AssetKind] - * @typedef {object} Purse - * Purses hold amount of digital assets of the same brand, but unlike Payments, - * they are not meant to be sent to others. To transfer digital assets, a - * Payment should be withdrawn from a Purse. The amount of digital - * assets in a purse can change through the action of deposit() and withdraw(). - * - * The primary use for Purses and Payments is for currency-like and goods-like - * digital assets, but they can also be used to represent other kinds of rights, - * such as the right to participate in a particular contract. - * - * @property {() => Brand} getAllegedBrand Get the alleged Brand for this Purse - * - * @property {() => Amount} getCurrentAmount - * Get the amount contained in this purse. - * - * @property {() => LatestTopic>} getCurrentAmountNotifier - * Get a lossy notifier for changes to this purse's balance. - * - * @property {PurseDeposit} deposit - * Deposit all the contents of payment into this purse, returning the - * amount. If the optional argument `optAmount` does not equal the - * amount of digital assets in the payment, throw an error. - * - * If payment is a promise, throw an error. - * - * @property {() => DepositFacet} getDepositFacet - * Return an object whose `receive` method deposits to the current Purse. - * - * @property {(amount: Amount) => Payment} withdraw - * Withdraw amount from this purse into a new Payment. - * - * @property {() => CopySet>} getRecoverySet - * The set of payments withdrawn from this purse that are still live. These - * are the payments that can still be recovered in emergencies by, for example, - * depositing into this purse. Such a deposit action is like canceling an - * outstanding check because you're tired of waiting for it. Once your - * cancellation is acknowledged, you can spend the assets at stake on other - * things. Afterwards, if the recipient of the original check finally gets - * around to depositing it, their deposit fails. - * - * @property {() => Amount} recoverAll - * For use in emergencies, such as coming back from a traumatic crash and - * upgrade. This deposits all the payments in this purse's recovery set - * into the purse itself, returning the total amount of assets recovered. + * @typedef {object} Purse Purses hold amount of digital assets of the same + * brand, but unlike Payments, they are not meant to be sent to others. To + * transfer digital assets, a Payment should be withdrawn from a Purse. The + * amount of digital assets in a purse can change through the action of + * deposit() and withdraw(). + * + * The primary use for Purses and Payments is for currency-like and goods-like + * digital assets, but they can also be used to represent other kinds of + * rights, such as the right to participate in a particular contract. + * @property {() => Brand} getAllegedBrand Get the alleged Brand for this + * Purse + * @property {() => Amount} getCurrentAmount Get the amount contained in this + * purse. + * @property {() => LatestTopic>} getCurrentAmountNotifier Get a lossy + * notifier for changes to this purse's balance. + * @property {PurseDeposit} deposit Deposit all the contents of payment into + * this purse, returning the amount. If the optional argument `optAmount` does + * not equal the amount of digital assets in the payment, throw an error. + * + * If payment is a promise, throw an error. + * @property {() => DepositFacet} getDepositFacet Return an object whose + * `receive` method deposits to the current Purse. + * @property {(amount: Amount) => Payment} withdraw Withdraw amount from + * this purse into a new Payment. + * @property {() => CopySet>} getRecoverySet The set of payments + * withdrawn from this purse that are still live. These are the payments that + * can still be recovered in emergencies by, for example, depositing into this + * purse. Such a deposit action is like canceling an outstanding check because + * you're tired of waiting for it. Once your cancellation is acknowledged, you + * can spend the assets at stake on other things. Afterwards, if the recipient + * of the original check finally gets around to depositing it, their deposit + * fails. + * @property {() => Amount} recoverAll For use in emergencies, such as coming + * back from a traumatic crash and upgrade. This deposits all the payments in + * this purse's recovery set into the purse itself, returning the total amount + * of assets recovered. */ /** * @template {AssetKind} [K=AssetKind] - * @typedef {object} Payment - * Payments hold amount of digital assets of the same brand in transit. Payments - * can be deposited in purses, split into multiple payments, combined, and - * claimed (getting an exclusive payment). Payments are linear, meaning - * that either a payment has the same amount of digital assets it - * started with, or it is used up entirely. It is impossible to partially use a - * payment. - * - * Payments are often received from other actors and therefore should - * not be trusted themselves. To get the amount of digital assets in a payment, - * use the trusted issuer: issuer.getAmountOf(payment), - * - * Payments can be converted to Purses by getting a trusted issuer and - * calling `issuer.makeEmptyPurse()` to create a purse, then - * `purse.deposit(payment)`. - * - * @property {() => Brand} getAllegedBrand - * Get the allegedBrand, indicating the type of digital asset this - * payment purports to be, and which issuer to use. Because payments - * are not trusted, any method calls on payments should be treated - * with suspicion and verified elsewhere. + * @typedef {object} Payment Payments hold amount of digital assets of the same + * brand in transit. Payments can be deposited in purses, split into multiple + * payments, combined, and claimed (getting an exclusive payment). Payments + * are linear, meaning that either a payment has the same amount of digital + * assets it started with, or it is used up entirely. It is impossible to + * partially use a payment. + * + * Payments are often received from other actors and therefore should not be + * trusted themselves. To get the amount of digital assets in a payment, use + * the trusted issuer: issuer.getAmountOf(payment), + * + * Payments can be converted to Purses by getting a trusted issuer and calling + * `issuer.makeEmptyPurse()` to create a purse, then + * `purse.deposit(payment)`. + * @property {() => Brand} getAllegedBrand Get the allegedBrand, indicating + * the type of digital asset this payment purports to be, and which issuer to + * use. Because payments are not trusted, any method calls on payments should + * be treated with suspicion and verified elsewhere. */ /** * @template {AmountValue} V - * @typedef {object} MathHelpers - * All of the difference in how digital asset amount are manipulated can be - * reduced to the behavior of the math on values. We extract this - * custom logic into mathHelpers. MathHelpers are about value - * arithmetic, whereas AmountMath is about amounts, which are the - * values labeled with a brand. AmountMath use mathHelpers to do their value - * arithmetic, and then brand the results, making a new amount. - * - * The MathHelpers are designed to be called only from AmountMath, and so - * all methods but coerce can assume their inputs are valid. They only - * need to do output validation, and only when there is a possibility of - * invalid output. - * - * @property {(allegedValue: V) => V} doCoerce - * Check the kind of this value and throw if it is not the - * expected kind. - * - * @property {() => V} doMakeEmpty - * Get the representation for the identity element (often 0 or an - * empty array) - * - * @property {(value: V) => boolean} doIsEmpty - * Is the value the identity element? - * - * @property {(left: V, right: V) => boolean} doIsGTE - * Is the left greater than or equal to the right? - * - * @property {(left: V, right: V) => boolean} doIsEqual - * Does left equal right? - * - * @property {(left: V, right: V) => V} doAdd - * Return the left combined with the right. - * - * @property {(left: V, right: V) => V} doSubtract - * Return what remains after removing the right from the left. If - * something in the right was not in the left, we throw an error. + * @typedef {object} MathHelpers All of the difference in how digital asset + * amount are manipulated can be reduced to the behavior of the math on + * values. We extract this custom logic into mathHelpers. MathHelpers are + * about value arithmetic, whereas AmountMath is about amounts, which are the + * values labeled with a brand. AmountMath use mathHelpers to do their value + * arithmetic, and then brand the results, making a new amount. + * + * The MathHelpers are designed to be called only from AmountMath, and so all + * methods but coerce can assume their inputs are valid. They only need to do + * output validation, and only when there is a possibility of invalid output. + * @property {(allegedValue: V) => V} doCoerce Check the kind of this value and + * throw if it is not the expected kind. + * @property {() => V} doMakeEmpty Get the representation for the identity + * element (often 0 or an empty array) + * @property {(value: V) => boolean} doIsEmpty Is the value the identity + * element? + * @property {(left: V, right: V) => boolean} doIsGTE Is the left greater than + * or equal to the right? + * @property {(left: V, right: V) => boolean} doIsEqual Does left equal right? + * @property {(left: V, right: V) => V} doAdd Return the left combined with the + * right. + * @property {(left: V, right: V) => V} doSubtract Return what remains after + * removing the right from the left. If something in the right was not in the + * left, we throw an error. */ -/** - * @typedef {bigint} NatValue - */ +/** @typedef {bigint} NatValue */ -/** - * @typedef {Array} SetValue - */ +/** @typedef {Key[]} SetValue */ diff --git a/packages/SwingSet/docs/vat-upgrade.md b/packages/SwingSet/docs/vat-upgrade.md index cc4c659e6c5..eb0a1576ff6 100644 --- a/packages/SwingSet/docs/vat-upgrade.md +++ b/packages/SwingSet/docs/vat-upgrade.md @@ -75,9 +75,9 @@ The [zone API](https://github.com/Agoric/agoric-sdk/tree/master/packages/zone#re You can obtain individual zones implementing this API as follows: * Heap objects in vat RAM - - `import { heapZone } from '@agoric/zone';` + - `import { makeHeapZone } from '@agoric/zone';` * Virtual objects in disk-based storage - - `import { virtualZone } from '@agoric/zone/virtual.js';` + - `import { makeVirtualZone } from '@agoric/zone/virtual.js';` * Durable objects in disk-based storage - zone API maker found at `import { makeDurableZone } from '@agoric/zone/durable.js';` and - zone API backed by a durable map and created by `makeDurableZone(durableMap)` @@ -136,7 +136,8 @@ const makeFoo = prepareExoClass(someDurableMap, 'foo', fooI, initFoo, fooMethods or with the zone API: ```js -import { M, makeDurableZone } from '@agoric/zone'; +import { M } from '@endo/patterns'; +import { makeDurableZone } from '@agoric/zone'; const FooI = M.interface('foo', fooMethodGuards); // someDurableMap should generally be reachable from baggage. const zone = makeDurableZone(someDurableMap); diff --git a/packages/SwingSet/jsconfig.json b/packages/SwingSet/jsconfig.json index d8e99876334..f8066c44f00 100644 --- a/packages/SwingSet/jsconfig.json +++ b/packages/SwingSet/jsconfig.json @@ -2,10 +2,13 @@ { "extends": "../../tsconfig.json", "include": [ + "exported.js", + "demo/**/*.js", "lib/**/*.js", + "misc-tools/**/*.js", "src/**/*.js", "src/**/*.ts", - // "test", + "test", "tools", - ], + ] } diff --git a/packages/SwingSet/misc-tools/db-delete.js b/packages/SwingSet/misc-tools/db-delete.js index be36f8188ff..599f6754a5f 100755 --- a/packages/SwingSet/misc-tools/db-delete.js +++ b/packages/SwingSet/misc-tools/db-delete.js @@ -1,4 +1,5 @@ #!/usr/bin/env node +// @ts-nocheck import '@endo/init'; import process from 'process'; import { openSwingStore } from '@agoric/swing-store'; diff --git a/packages/SwingSet/misc-tools/db-dump.js b/packages/SwingSet/misc-tools/db-dump.js index 05c72a3666e..5b9bd88a584 100644 --- a/packages/SwingSet/misc-tools/db-dump.js +++ b/packages/SwingSet/misc-tools/db-dump.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* eslint-disable */ import '@endo/init'; import process from 'process'; diff --git a/packages/SwingSet/misc-tools/db-get.js b/packages/SwingSet/misc-tools/db-get.js index d5524eb9c30..7964b2c5304 100755 --- a/packages/SwingSet/misc-tools/db-get.js +++ b/packages/SwingSet/misc-tools/db-get.js @@ -1,4 +1,5 @@ #!/usr/bin/env node +// @ts-nocheck import '@endo/init'; import process from 'process'; import { openSwingStore } from '@agoric/swing-store'; diff --git a/packages/SwingSet/misc-tools/db-set.js b/packages/SwingSet/misc-tools/db-set.js index db4971fe10f..0bd69dbce62 100755 --- a/packages/SwingSet/misc-tools/db-set.js +++ b/packages/SwingSet/misc-tools/db-set.js @@ -1,4 +1,5 @@ #!/usr/bin/env node +// @ts-nocheck import '@endo/init'; import process from 'process'; import { openSwingStore } from '@agoric/swing-store'; diff --git a/packages/SwingSet/misc-tools/extract-contract-from-transcript.js b/packages/SwingSet/misc-tools/extract-contract-from-transcript.js index 23237a027ee..5f9eb928c96 100644 --- a/packages/SwingSet/misc-tools/extract-contract-from-transcript.js +++ b/packages/SwingSet/misc-tools/extract-contract-from-transcript.js @@ -1,3 +1,4 @@ +// @ts-nocheck import fs from 'fs'; import zlib from 'zlib'; import readline from 'readline'; diff --git a/packages/SwingSet/misc-tools/extract-transcript-from-kerneldb.js b/packages/SwingSet/misc-tools/extract-transcript-from-kerneldb.js index d3024407b5b..aa2c5638cd9 100644 --- a/packages/SwingSet/misc-tools/extract-transcript-from-kerneldb.js +++ b/packages/SwingSet/misc-tools/extract-transcript-from-kerneldb.js @@ -1,4 +1,4 @@ -// @ts-check +// @ts-nocheck import '@endo/init'; import process from 'process'; diff --git a/packages/SwingSet/misc-tools/extract-transcript-from-slogfile.js b/packages/SwingSet/misc-tools/extract-transcript-from-slogfile.js index a3c9b456466..f3ff7a35687 100644 --- a/packages/SwingSet/misc-tools/extract-transcript-from-slogfile.js +++ b/packages/SwingSet/misc-tools/extract-transcript-from-slogfile.js @@ -1,3 +1,4 @@ +// @ts-nocheck import fs from 'fs'; import zlib from 'zlib'; import readline from 'readline'; diff --git a/packages/SwingSet/misc-tools/extract-vat-from-transcript.js b/packages/SwingSet/misc-tools/extract-vat-from-transcript.js index 2f3b26dd984..987b24b8b22 100644 --- a/packages/SwingSet/misc-tools/extract-vat-from-transcript.js +++ b/packages/SwingSet/misc-tools/extract-vat-from-transcript.js @@ -1,3 +1,4 @@ +// @ts-nocheck import fs from 'fs'; import zlib from 'zlib'; import readline from 'readline'; diff --git a/packages/SwingSet/misc-tools/extract-xs-snapshot.js b/packages/SwingSet/misc-tools/extract-xs-snapshot.js index f120e436b34..d9a429ef008 100644 --- a/packages/SwingSet/misc-tools/extract-xs-snapshot.js +++ b/packages/SwingSet/misc-tools/extract-xs-snapshot.js @@ -1,4 +1,4 @@ -// @ts-check +// @ts-nocheck import '@endo/init'; import process from 'process'; diff --git a/packages/SwingSet/misc-tools/ingest-xs-snapshot.js b/packages/SwingSet/misc-tools/ingest-xs-snapshot.js index 7965f991c18..a1a52d00466 100644 --- a/packages/SwingSet/misc-tools/ingest-xs-snapshot.js +++ b/packages/SwingSet/misc-tools/ingest-xs-snapshot.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* eslint-disable */ // import '@endo/init'; // import { E } from '@endo/far'; diff --git a/packages/SwingSet/misc-tools/measure-metering/measure.js b/packages/SwingSet/misc-tools/measure-metering/measure.js index 51ea42f8057..ef7979a9964 100644 --- a/packages/SwingSet/misc-tools/measure-metering/measure.js +++ b/packages/SwingSet/misc-tools/measure-metering/measure.js @@ -1,3 +1,4 @@ +// @ts-nocheck // run as `node tools/measure-metering/measure.js` // eslint-disable-next-line import/order diff --git a/packages/SwingSet/misc-tools/measure-metering/measurement-bootstrap.js b/packages/SwingSet/misc-tools/measure-metering/measurement-bootstrap.js index 3623b928463..46e65df63b3 100644 --- a/packages/SwingSet/misc-tools/measure-metering/measurement-bootstrap.js +++ b/packages/SwingSet/misc-tools/measure-metering/measurement-bootstrap.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* eslint-disable import/no-extraneous-dependencies,no-unused-vars,no-empty-function */ import { Far, E } from '@endo/far'; import vaultFactoryBundle from '@agoric/inter-protocol/bundles/bundle-vaultFactory.js'; diff --git a/packages/SwingSet/misc-tools/measure-metering/measurement-target.js b/packages/SwingSet/misc-tools/measure-metering/measurement-target.js index 9d3d47d975c..6ef6b835ebb 100644 --- a/packages/SwingSet/misc-tools/measure-metering/measurement-target.js +++ b/packages/SwingSet/misc-tools/measure-metering/measurement-target.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* eslint-disable import/no-extraneous-dependencies,no-unused-vars,no-empty-function */ import { Far } from '@endo/far'; // XXX cyclic dependency; TODO move this tool out of swingset-vat diff --git a/packages/SwingSet/misc-tools/replace-bundle.js b/packages/SwingSet/misc-tools/replace-bundle.js index bd4217a0c0a..6d444f72f7e 100755 --- a/packages/SwingSet/misc-tools/replace-bundle.js +++ b/packages/SwingSet/misc-tools/replace-bundle.js @@ -1,4 +1,5 @@ #!/usr/bin/env node +// @ts-nocheck import '@endo/init'; import process from 'process'; diff --git a/packages/SwingSet/misc-tools/replay-transcript.js b/packages/SwingSet/misc-tools/replay-transcript.js index 9eee35ff9f8..6db20eea482 100644 --- a/packages/SwingSet/misc-tools/replay-transcript.js +++ b/packages/SwingSet/misc-tools/replay-transcript.js @@ -332,6 +332,7 @@ async function replay(transcriptFile) { throw Error(`unhandled worker type ${worker}`); } + // @ts-expect-error missing symbol /** @type {Partial, Map>>} */ let syscallResults = {}; @@ -339,6 +340,7 @@ async function replay(transcriptFile) { const numWorkers = workers.length; let divergent = false; for (const [kind, kindSummary] of Object.entries(syscallResults)) { + // @ts-expect-error due to missing symbol above, but also `syscallResults` is never populated for (const [syscallKey, workerList] of kindSummary.entries()) { if (workerList.length !== numWorkers) { console.error( diff --git a/packages/SwingSet/misc-tools/vat-stats.js b/packages/SwingSet/misc-tools/vat-stats.js index 1cd883a4f71..45222817841 100644 --- a/packages/SwingSet/misc-tools/vat-stats.js +++ b/packages/SwingSet/misc-tools/vat-stats.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* eslint-disable */ import '@endo/init'; import process from 'process'; diff --git a/packages/SwingSet/package.json b/packages/SwingSet/package.json index e4347e1cd23..2d8b7edb953 100644 --- a/packages/SwingSet/package.json +++ b/packages/SwingSet/package.json @@ -23,7 +23,8 @@ "devDependencies": { "@types/better-sqlite3": "^7.5.0", "@types/microtime": "^2.1.0", - "@types/tmp": "^0.2.0" + "@types/tmp": "^0.2.0", + "@types/yargs-parser": "^21.0.0" }, "dependencies": { "@agoric/assert": "^0.6.0", @@ -36,20 +37,20 @@ "@agoric/vat-data": "^0.5.2", "@agoric/xsnap": "^0.14.2", "@agoric/xsnap-lockdown": "^0.14.0", - "@endo/base64": "^0.2.31", - "@endo/bundle-source": "^2.5.1", - "@endo/captp": "^3.1.1", - "@endo/check-bundle": "^0.2.18", - "@endo/compartment-mapper": "^0.8.4", - "@endo/eventual-send": "^0.17.2", - "@endo/far": "^0.2.18", - "@endo/import-bundle": "^0.3.4", - "@endo/init": "^0.5.56", - "@endo/marshal": "^0.8.5", - "@endo/nat": "^4.1.27", - "@endo/promise-kit": "^0.2.56", - "@endo/ses-ava": "^0.2.40", - "@endo/zip": "^0.2.31", + "@endo/base64": "^0.2.32", + "@endo/bundle-source": "^2.5.2", + "@endo/captp": "^3.1.2", + "@endo/check-bundle": "^0.2.19", + "@endo/compartment-mapper": "^0.8.5", + "@endo/eventual-send": "^0.17.3", + "@endo/far": "^0.2.19", + "@endo/import-bundle": "^0.3.5", + "@endo/init": "^0.5.57", + "@endo/marshal": "^0.8.6", + "@endo/nat": "^4.1.28", + "@endo/promise-kit": "^0.2.57", + "@endo/ses-ava": "^0.2.41", + "@endo/zip": "^0.2.32", "ansi-styles": "^6.2.1", "anylogger": "^0.21.0", "better-sqlite3": "^8.2.0", diff --git a/packages/SwingSet/test/bundling/nonvat-importable.js b/packages/SwingSet/test/bundling/nonvat-importable.js index fe0a19b0e26..bc2c8964b8d 100644 --- a/packages/SwingSet/test/bundling/nonvat-importable.js +++ b/packages/SwingSet/test/bundling/nonvat-importable.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* global big globalThis */ export function runTheCheck(world) { diff --git a/packages/SwingSet/test/bundling/nonvat-install.js b/packages/SwingSet/test/bundling/nonvat-install.js index 584aa5c50aa..ae8731bfdf2 100644 --- a/packages/SwingSet/test/bundling/nonvat-install.js +++ b/packages/SwingSet/test/bundling/nonvat-install.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* global big globalThis */ export function runTheCheck(world) { diff --git a/packages/SwingSet/test/bundling/test-bundles-controller.js b/packages/SwingSet/test/bundling/test-bundles-controller.js index 32f98b379d6..f172daa17fc 100644 --- a/packages/SwingSet/test/bundling/test-bundles-controller.js +++ b/packages/SwingSet/test/bundling/test-bundles-controller.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/bundling/test-bundles.js b/packages/SwingSet/test/bundling/test-bundles.js index 5e8437b3ee5..137ce9b8a0d 100644 --- a/packages/SwingSet/test/bundling/test-bundles.js +++ b/packages/SwingSet/test/bundling/test-bundles.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/change-parameters/test-change-parameters.js b/packages/SwingSet/test/change-parameters/test-change-parameters.js index 251dcd6f8ae..48e22fc24ff 100644 --- a/packages/SwingSet/test/change-parameters/test-change-parameters.js +++ b/packages/SwingSet/test/change-parameters/test-change-parameters.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/commsVatDriver.js b/packages/SwingSet/test/commsVatDriver.js index 6cc3bc3df59..9eb9a7d4e7f 100644 --- a/packages/SwingSet/test/commsVatDriver.js +++ b/packages/SwingSet/test/commsVatDriver.js @@ -1,3 +1,4 @@ +// @ts-nocheck import { assert, Fail } from '@agoric/assert'; import buildCommsDispatch from '../src/vats/comms/index.js'; import { debugState } from '../src/vats/comms/dispatch.js'; diff --git a/packages/SwingSet/test/device-hooks/test-device-hooks.js b/packages/SwingSet/test/device-hooks/test-device-hooks.js index 0329fed45a4..fc492a4ea54 100644 --- a/packages/SwingSet/test/device-hooks/test-device-hooks.js +++ b/packages/SwingSet/test/device-hooks/test-device-hooks.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* eslint-disable no-lone-blocks */ // eslint-disable-next-line import/order import { test } from '../../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/device-mailbox/test-device-mailbox.js b/packages/SwingSet/test/device-mailbox/test-device-mailbox.js index 5af898eab98..a15f569724a 100644 --- a/packages/SwingSet/test/device-mailbox/test-device-mailbox.js +++ b/packages/SwingSet/test/device-mailbox/test-device-mailbox.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../../tools/prepare-test-env-ava.js'; // eslint-disable-next-line import/order diff --git a/packages/SwingSet/test/device-plugin/test-device.js b/packages/SwingSet/test/device-plugin/test-device.js index a538a12f566..776685dfeea 100644 --- a/packages/SwingSet/test/device-plugin/test-device.js +++ b/packages/SwingSet/test/device-plugin/test-device.js @@ -1,3 +1,4 @@ +// @ts-nocheck import { test } from '../../tools/prepare-test-env-ava.js'; // eslint-disable-next-line import/order diff --git a/packages/SwingSet/test/devices/bootstrap-raw.js b/packages/SwingSet/test/devices/bootstrap-raw.js index b24109f2e8f..7772d4727e7 100644 --- a/packages/SwingSet/test/devices/bootstrap-raw.js +++ b/packages/SwingSet/test/devices/bootstrap-raw.js @@ -1,3 +1,4 @@ +// @ts-nocheck import { Far } from '@endo/far'; import { makePromiseKit } from '@endo/promise-kit'; diff --git a/packages/SwingSet/test/devices/test-devices.js b/packages/SwingSet/test/devices/test-devices.js index 528fb0333ab..02bbc3ec2d9 100644 --- a/packages/SwingSet/test/devices/test-devices.js +++ b/packages/SwingSet/test/devices/test-devices.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/devices/test-raw-device.js b/packages/SwingSet/test/devices/test-raw-device.js index f3d6daf8fc5..9e79e4c3e3e 100644 --- a/packages/SwingSet/test/devices/test-raw-device.js +++ b/packages/SwingSet/test/devices/test-raw-device.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/gc/bootstrap.js b/packages/SwingSet/test/gc/bootstrap.js index 6a6a1f9f347..3c08bb01b4e 100644 --- a/packages/SwingSet/test/gc/bootstrap.js +++ b/packages/SwingSet/test/gc/bootstrap.js @@ -1,3 +1,4 @@ +// @ts-nocheck import { Far, E } from '@endo/far'; export function buildRootObject() { diff --git a/packages/SwingSet/test/metering/test-dynamic-vat-metered.js b/packages/SwingSet/test/metering/test-dynamic-vat-metered.js index b1ed98198f5..3839c5f94c1 100644 --- a/packages/SwingSet/test/metering/test-dynamic-vat-metered.js +++ b/packages/SwingSet/test/metering/test-dynamic-vat-metered.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/promise-watcher/vat-upton.js b/packages/SwingSet/test/promise-watcher/vat-upton.js index 65096fd5a66..2f3d894dd05 100644 --- a/packages/SwingSet/test/promise-watcher/vat-upton.js +++ b/packages/SwingSet/test/promise-watcher/vat-upton.js @@ -1,3 +1,4 @@ +// @ts-nocheck import { Far, E } from '@endo/far'; import { initEmpty } from '@agoric/store'; import { makePromiseKit } from '@endo/promise-kit'; diff --git a/packages/SwingSet/test/run-policy/test-run-policy.js b/packages/SwingSet/test/run-policy/test-run-policy.js index 979f61e3bb8..2a7838ae432 100644 --- a/packages/SwingSet/test/run-policy/test-run-policy.js +++ b/packages/SwingSet/test/run-policy/test-run-policy.js @@ -1,3 +1,4 @@ +// @ts-nocheck import { test } from '../../tools/prepare-test-env-ava.js'; // eslint-disable-next-line import/order diff --git a/packages/SwingSet/test/snapshots/test-xsnap-store.js.md b/packages/SwingSet/test/snapshots/test-xsnap-store.js.md index 39a7b873085..e24af0f97f7 100644 --- a/packages/SwingSet/test/snapshots/test-xsnap-store.js.md +++ b/packages/SwingSet/test/snapshots/test-xsnap-store.js.md @@ -20,8 +20,8 @@ Generated by [AVA](https://avajs.dev). { compressSeconds: 0, dbSaveSeconds: 0, - hash: '49658a6d771258ceebed044629865b8e16b898a5c242b14449810fe552495d4a', - uncompressedSize: 725739, + hash: '8d1777eafd880a37e448c747194a8a7ca591b1656633faa0ec6c0a8a63fdbe97', + uncompressedSize: 776235, } > after use of harden() - sensitive to SES-shim, XS, and supervisor @@ -29,6 +29,6 @@ Generated by [AVA](https://avajs.dev). { compressSeconds: 0, dbSaveSeconds: 0, - hash: '95151df3313ef37578364add6dbdf2561c26b5328f511700613c2a4f93bb51f0', - uncompressedSize: 725899, + hash: '5b91a0d748154abb420378afb40f4593cf84cb9f6dac0836106aa154fd0db93e', + uncompressedSize: 776395, } diff --git a/packages/SwingSet/test/snapshots/test-xsnap-store.js.snap b/packages/SwingSet/test/snapshots/test-xsnap-store.js.snap index 8b1eeeacdcb..165f768e070 100644 Binary files a/packages/SwingSet/test/snapshots/test-xsnap-store.js.snap and b/packages/SwingSet/test/snapshots/test-xsnap-store.js.snap differ diff --git a/packages/SwingSet/test/test-abandon-export.js b/packages/SwingSet/test/test-abandon-export.js index 84b9a47172d..df9d76eb771 100644 --- a/packages/SwingSet/test/test-abandon-export.js +++ b/packages/SwingSet/test/test-abandon-export.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* eslint-disable import/order */ import { test } from '../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/test-activityhash-vs-start.js b/packages/SwingSet/test/test-activityhash-vs-start.js index fcfbbef2801..57be8dfdc45 100644 --- a/packages/SwingSet/test/test-activityhash-vs-start.js +++ b/packages/SwingSet/test/test-activityhash-vs-start.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/test-clist.js b/packages/SwingSet/test/test-clist.js index 936bd378495..2b3831da74c 100644 --- a/packages/SwingSet/test/test-clist.js +++ b/packages/SwingSet/test/test-clist.js @@ -1,3 +1,4 @@ +// @ts-nocheck import { test } from '../tools/prepare-test-env-ava.js'; // eslint-disable-next-line import/order diff --git a/packages/SwingSet/test/test-comms.js b/packages/SwingSet/test/test-comms.js index 1dad14ec545..fc84afcbd17 100644 --- a/packages/SwingSet/test/test-comms.js +++ b/packages/SwingSet/test/test-comms.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/test-controller.js b/packages/SwingSet/test/test-controller.js index 993a92dc3cf..818bbceabbd 100644 --- a/packages/SwingSet/test/test-controller.js +++ b/packages/SwingSet/test/test-controller.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/test-device-bridge.js b/packages/SwingSet/test/test-device-bridge.js index 287efab4b47..c7242646f5d 100644 --- a/packages/SwingSet/test/test-device-bridge.js +++ b/packages/SwingSet/test/test-device-bridge.js @@ -1,3 +1,4 @@ +// @ts-nocheck import { test } from '../tools/prepare-test-env-ava.js'; // eslint-disable-next-line import/order diff --git a/packages/SwingSet/test/test-gc-and-finalize.js b/packages/SwingSet/test/test-gc-and-finalize.js index 94ae280e2ba..915cd75e981 100644 --- a/packages/SwingSet/test/test-gc-and-finalize.js +++ b/packages/SwingSet/test/test-gc-and-finalize.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* global FinalizationRegistry WeakRef */ // eslint-disable-next-line import/order import { test } from '../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/test-gc-kernel.js b/packages/SwingSet/test/test-gc-kernel.js index 49ffb5a28e0..a901d00eada 100644 --- a/packages/SwingSet/test/test-gc-kernel.js +++ b/packages/SwingSet/test/test-gc-kernel.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* global WeakRef, FinalizationRegistry */ // eslint-disable-next-line import/order import anylogger from 'anylogger'; diff --git a/packages/SwingSet/test/test-kernel.js b/packages/SwingSet/test/test-kernel.js index 92cfbc601a3..5eb45924d94 100644 --- a/packages/SwingSet/test/test-kernel.js +++ b/packages/SwingSet/test/test-kernel.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/test-message-patterns-comms.js b/packages/SwingSet/test/test-message-patterns-comms.js index 75a3c32b225..a4fe9b3b7f3 100644 --- a/packages/SwingSet/test/test-message-patterns-comms.js +++ b/packages/SwingSet/test/test-message-patterns-comms.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* eslint no-await-in-loop: "off" */ /* eslint dot-notation: "off" */ /* eslint object-shorthand: "off" */ diff --git a/packages/SwingSet/test/test-message-patterns-local.js b/packages/SwingSet/test/test-message-patterns-local.js index 5c4895bdc31..6c51b0bbc90 100644 --- a/packages/SwingSet/test/test-message-patterns-local.js +++ b/packages/SwingSet/test/test-message-patterns-local.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* eslint no-await-in-loop: "off" */ /* eslint dot-notation: "off" */ /* eslint object-shorthand: "off" */ diff --git a/packages/SwingSet/test/test-network.js b/packages/SwingSet/test/test-network.js index c383e68a5a5..c99d7b94958 100644 --- a/packages/SwingSet/test/test-network.js +++ b/packages/SwingSet/test/test-network.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/test-promises.js b/packages/SwingSet/test/test-promises.js index a90e309883a..6762e20cedf 100644 --- a/packages/SwingSet/test/test-promises.js +++ b/packages/SwingSet/test/test-promises.js @@ -1,3 +1,4 @@ +// @ts-nocheck import { test } from '../tools/prepare-test-env-ava.js'; // eslint-disable-next-line import/order diff --git a/packages/SwingSet/test/test-state.js b/packages/SwingSet/test/test-state.js index fdad91485dd..40ea95f0749 100644 --- a/packages/SwingSet/test/test-state.js +++ b/packages/SwingSet/test/test-state.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* eslint-disable no-useless-concat */ // eslint-disable-next-line import/order import { test } from '../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/test-syscall-failure.js b/packages/SwingSet/test/test-syscall-failure.js index 9a0eefffff5..4e1a0f798e0 100644 --- a/packages/SwingSet/test/test-syscall-failure.js +++ b/packages/SwingSet/test/test-syscall-failure.js @@ -1,3 +1,4 @@ +// @ts-nocheck import { test } from '../tools/prepare-test-env-ava.js'; // eslint-disable-next-line import/order diff --git a/packages/SwingSet/test/test-timer-device.js b/packages/SwingSet/test/test-timer-device.js index 41e8dd3ae6a..b4ae7a07011 100644 --- a/packages/SwingSet/test/test-timer-device.js +++ b/packages/SwingSet/test/test-timer-device.js @@ -1,3 +1,4 @@ +// @ts-nocheck import { test } from '../tools/prepare-test-env-ava.js'; // eslint-disable-next-line import/order diff --git a/packages/SwingSet/test/test-transcript-light.js b/packages/SwingSet/test/test-transcript-light.js index c595d7d41e6..51bdd714d72 100644 --- a/packages/SwingSet/test/test-transcript-light.js +++ b/packages/SwingSet/test/test-transcript-light.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../tools/prepare-test-env-ava.js'; // eslint-disable-next-line import/order diff --git a/packages/SwingSet/test/test-vat-env.js b/packages/SwingSet/test/test-vat-env.js index 0c38d6140c1..0f1f29c9298 100644 --- a/packages/SwingSet/test/test-vat-env.js +++ b/packages/SwingSet/test/test-vat-env.js @@ -1,3 +1,4 @@ +// @ts-nocheck import { test, VatData } from '../tools/prepare-test-env-ava.js'; // eslint-disable-next-line import/order diff --git a/packages/SwingSet/test/test-vat-timer.js b/packages/SwingSet/test/test-vat-timer.js index 8ba0a8b14fa..75eb2c215b0 100644 --- a/packages/SwingSet/test/test-vat-timer.js +++ b/packages/SwingSet/test/test-vat-timer.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/test-vpid-kernel.js b/packages/SwingSet/test/test-vpid-kernel.js index 38508a2f368..75a2ee268cb 100644 --- a/packages/SwingSet/test/test-vpid-kernel.js +++ b/packages/SwingSet/test/test-vpid-kernel.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* global WeakRef, FinalizationRegistry */ // eslint-disable-next-line import/order import { test } from '../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/test-xsnap-metering.js b/packages/SwingSet/test/test-xsnap-metering.js index 33dd057903f..5dad4d627c4 100644 --- a/packages/SwingSet/test/test-xsnap-metering.js +++ b/packages/SwingSet/test/test-xsnap-metering.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/test-xsnap-store.js b/packages/SwingSet/test/test-xsnap-store.js index 3c015ab89d4..26d1ceb550e 100644 --- a/packages/SwingSet/test/test-xsnap-store.js +++ b/packages/SwingSet/test/test-xsnap-store.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* global globalThis */ import '@endo/init/debug.js'; diff --git a/packages/SwingSet/test/timer-device/device-timer.js b/packages/SwingSet/test/timer-device/device-timer.js index 164c0763179..9fba6bac28c 100644 --- a/packages/SwingSet/test/timer-device/device-timer.js +++ b/packages/SwingSet/test/timer-device/device-timer.js @@ -1,3 +1,4 @@ +// @ts-nocheck import setup from '../../src/devices/timer/device-timer.js'; export { setup }; diff --git a/packages/SwingSet/test/transcript/test-state-sync-reload.js b/packages/SwingSet/test/transcript/test-state-sync-reload.js index a432a22d051..bda9a9b233b 100644 --- a/packages/SwingSet/test/transcript/test-state-sync-reload.js +++ b/packages/SwingSet/test/transcript/test-state-sync-reload.js @@ -1,3 +1,4 @@ +// @ts-nocheck import test from 'ava'; import '@endo/init/debug.js'; import tmp from 'tmp'; diff --git a/packages/SwingSet/test/transcript/test-transcript-entries.js b/packages/SwingSet/test/transcript/test-transcript-entries.js index 832ff4aff2a..e06ccf141ce 100644 --- a/packages/SwingSet/test/transcript/test-transcript-entries.js +++ b/packages/SwingSet/test/transcript/test-transcript-entries.js @@ -1,3 +1,4 @@ +// @ts-nocheck import test from 'ava'; import '@endo/init/debug.js'; import { initSwingStore } from '@agoric/swing-store'; diff --git a/packages/SwingSet/test/upgrade/test-upgrade-replay.js b/packages/SwingSet/test/upgrade/test-upgrade-replay.js index 48047c70290..b8ec534896c 100644 --- a/packages/SwingSet/test/upgrade/test-upgrade-replay.js +++ b/packages/SwingSet/test/upgrade/test-upgrade-replay.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/upgrade/test-upgrade.js b/packages/SwingSet/test/upgrade/test-upgrade.js index d4ab354844e..d4ad17f5aa7 100644 --- a/packages/SwingSet/test/upgrade/test-upgrade.js +++ b/packages/SwingSet/test/upgrade/test-upgrade.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/vat-admin/broken-module-vat.js b/packages/SwingSet/test/vat-admin/broken-module-vat.js index 30eff12e68b..47d3f80ac1c 100644 --- a/packages/SwingSet/test/vat-admin/broken-module-vat.js +++ b/packages/SwingSet/test/vat-admin/broken-module-vat.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line no-undef missing({}); diff --git a/packages/SwingSet/test/vat-admin/broken-root-vat.js b/packages/SwingSet/test/vat-admin/broken-root-vat.js index 26a3820ef01..5da40944bb3 100644 --- a/packages/SwingSet/test/vat-admin/broken-root-vat.js +++ b/packages/SwingSet/test/vat-admin/broken-root-vat.js @@ -1,3 +1,4 @@ +// @ts-nocheck export function buildRootObject() { // eslint-disable-next-line no-undef return missing({}); diff --git a/packages/SwingSet/test/vat-admin/terminate/test-terminate-replay.js b/packages/SwingSet/test/vat-admin/terminate/test-terminate-replay.js index 42f1815a7d9..45e4c17c374 100644 --- a/packages/SwingSet/test/vat-admin/terminate/test-terminate-replay.js +++ b/packages/SwingSet/test/vat-admin/terminate/test-terminate-replay.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../../../tools/prepare-test-env-ava.js'; // eslint-disable-next-line import/order diff --git a/packages/SwingSet/test/vat-admin/terminate/test-terminate.js b/packages/SwingSet/test/vat-admin/terminate/test-terminate.js index 61963431353..c4e194a0c97 100644 --- a/packages/SwingSet/test/vat-admin/terminate/test-terminate.js +++ b/packages/SwingSet/test/vat-admin/terminate/test-terminate.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../../../tools/prepare-test-env-ava.js'; // eslint-disable-next-line import/order diff --git a/packages/SwingSet/test/vat-admin/test-create-vat.js b/packages/SwingSet/test/vat-admin/test-create-vat.js index 0a128bff73a..c853bd85c92 100644 --- a/packages/SwingSet/test/vat-admin/test-create-vat.js +++ b/packages/SwingSet/test/vat-admin/test-create-vat.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../../tools/prepare-test-env-ava.js'; // eslint-disable-next-line import/order diff --git a/packages/SwingSet/test/vat-admin/test-replay.js b/packages/SwingSet/test/vat-admin/test-replay.js index f380bd0a166..6011f7a9363 100644 --- a/packages/SwingSet/test/vat-admin/test-replay.js +++ b/packages/SwingSet/test/vat-admin/test-replay.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../../tools/prepare-test-env-ava.js'; // eslint-disable-next-line import/order diff --git a/packages/SwingSet/test/vat-direct.js b/packages/SwingSet/test/vat-direct.js index 0693401df01..52bfd3c2d4a 100644 --- a/packages/SwingSet/test/vat-direct.js +++ b/packages/SwingSet/test/vat-direct.js @@ -1,3 +1,4 @@ +// @ts-nocheck import { extractMessage } from './vat-util.js'; import { krefOf, kser, kslot, kunser } from '../src/lib/kmarshal.js'; diff --git a/packages/SwingSet/test/vat-durable-promise-watcher.js b/packages/SwingSet/test/vat-durable-promise-watcher.js index 6cbb48f5cf6..ef4287b2699 100644 --- a/packages/SwingSet/test/vat-durable-promise-watcher.js +++ b/packages/SwingSet/test/vat-durable-promise-watcher.js @@ -1,3 +1,4 @@ +// @ts-nocheck import { Far } from '@endo/far'; import { getCopyMapEntries, M } from '@agoric/store'; import { makePromiseKit } from '@endo/promise-kit'; diff --git a/packages/SwingSet/test/vat-envtest.js b/packages/SwingSet/test/vat-envtest.js index 97496bd2475..e66efd4f9c0 100644 --- a/packages/SwingSet/test/vat-envtest.js +++ b/packages/SwingSet/test/vat-envtest.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* global VatData */ import { Far } from '@endo/far'; diff --git a/packages/SwingSet/test/vat-warehouse/test-preload.js b/packages/SwingSet/test/vat-warehouse/test-preload.js index 65b4f1fcde7..275f8e1ef14 100644 --- a/packages/SwingSet/test/vat-warehouse/test-preload.js +++ b/packages/SwingSet/test/vat-warehouse/test-preload.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/vat-warehouse/test-reload-snapshot.js b/packages/SwingSet/test/vat-warehouse/test-reload-snapshot.js index 0baf741f2d1..e83f016549f 100644 --- a/packages/SwingSet/test/vat-warehouse/test-reload-snapshot.js +++ b/packages/SwingSet/test/vat-warehouse/test-reload-snapshot.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/virtualObjects/collection-slots/test-collection-slots.js b/packages/SwingSet/test/virtualObjects/collection-slots/test-collection-slots.js index 5cf9149af44..d69a960a079 100644 --- a/packages/SwingSet/test/virtualObjects/collection-slots/test-collection-slots.js +++ b/packages/SwingSet/test/virtualObjects/collection-slots/test-collection-slots.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../../../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/virtualObjects/delete-stored-vo/test-delete-stored-vo.js b/packages/SwingSet/test/virtualObjects/delete-stored-vo/test-delete-stored-vo.js index 5484513e0ed..12025568f13 100644 --- a/packages/SwingSet/test/virtualObjects/delete-stored-vo/test-delete-stored-vo.js +++ b/packages/SwingSet/test/virtualObjects/delete-stored-vo/test-delete-stored-vo.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../../../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/virtualObjects/test-facet-retention.js b/packages/SwingSet/test/virtualObjects/test-facet-retention.js index 4d0d28d1f66..82bfcdf3e97 100644 --- a/packages/SwingSet/test/virtualObjects/test-facet-retention.js +++ b/packages/SwingSet/test/virtualObjects/test-facet-retention.js @@ -1,3 +1,4 @@ +// @ts-nocheck import '@endo/init/debug.js'; import test from 'ava'; import { initSwingStore } from '@agoric/swing-store'; diff --git a/packages/SwingSet/test/virtualObjects/test-representatives.js b/packages/SwingSet/test/virtualObjects/test-representatives.js index 0e0fb1432f8..12e2395fdd3 100644 --- a/packages/SwingSet/test/virtualObjects/test-representatives.js +++ b/packages/SwingSet/test/virtualObjects/test-representatives.js @@ -1,3 +1,4 @@ +// @ts-nocheck // eslint-disable-next-line import/order import { test } from '../../tools/prepare-test-env-ava.js'; diff --git a/packages/SwingSet/test/xsnap-stable-bundles/test-stable-bundles.js b/packages/SwingSet/test/xsnap-stable-bundles/test-stable-bundles.js index 11298438718..70c4ced80b3 100644 --- a/packages/SwingSet/test/xsnap-stable-bundles/test-stable-bundles.js +++ b/packages/SwingSet/test/xsnap-stable-bundles/test-stable-bundles.js @@ -1,3 +1,4 @@ +// @ts-nocheck import '@endo/init/debug.js'; import test from 'ava'; import { createHash } from 'crypto'; diff --git a/packages/SwingSet/test/zcf-ish-upgrade/pseudo-contract-v1.js b/packages/SwingSet/test/zcf-ish-upgrade/pseudo-contract-v1.js index 0f4ade02d91..252a8ed3ec0 100644 --- a/packages/SwingSet/test/zcf-ish-upgrade/pseudo-contract-v1.js +++ b/packages/SwingSet/test/zcf-ish-upgrade/pseudo-contract-v1.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* eslint-disable no-unused-vars */ import { defineDurableKind, defineDurableKindMulti } from '@agoric/vat-data'; import { provideHandle, provideBaggageSubset } from './util.js'; diff --git a/packages/SwingSet/test/zcf-ish-upgrade/pseudo-contract-v2.js b/packages/SwingSet/test/zcf-ish-upgrade/pseudo-contract-v2.js index 441226b3a8e..7029dbc9bbb 100644 --- a/packages/SwingSet/test/zcf-ish-upgrade/pseudo-contract-v2.js +++ b/packages/SwingSet/test/zcf-ish-upgrade/pseudo-contract-v2.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* eslint-disable no-unused-vars */ import { defineDurableKind, defineDurableKindMulti } from '@agoric/vat-data'; import { provideHandle, provideBaggageSubset } from './util.js'; diff --git a/packages/SwingSet/test/zcf-ish-upgrade/pseudo-zcf.js b/packages/SwingSet/test/zcf-ish-upgrade/pseudo-zcf.js index 6fc35a3fce1..b2aac733211 100644 --- a/packages/SwingSet/test/zcf-ish-upgrade/pseudo-zcf.js +++ b/packages/SwingSet/test/zcf-ish-upgrade/pseudo-zcf.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* global VatData */ /* eslint-disable no-unused-vars */ diff --git a/packages/SwingSet/tools/prepare-test-env.js b/packages/SwingSet/tools/prepare-test-env.js index 1911f131bd5..66538e2ce07 100644 --- a/packages/SwingSet/tools/prepare-test-env.js +++ b/packages/SwingSet/tools/prepare-test-env.js @@ -1,4 +1,3 @@ -/* global globalThis */ /** * Prepare Agoric SwingSet vat global environment for testing. * @@ -6,44 +5,10 @@ * and stores. */ -import '@endo/init/pre-bundle-source.js'; +import '@endo/init/pre.js'; import './install-ses-debug.js'; -import { makeFakeVirtualStuff } from '@agoric/swingset-liveslots/tools/fakeVirtualSupport.js'; +import { reincarnate } from './setup-vat-data.js'; -const { vom, cm, wpm } = makeFakeVirtualStuff(); - -const { - defineKind, - defineKindMulti, - defineDurableKind, - defineDurableKindMulti, - makeKindHandle, - canBeDurable, -} = vom; - -const { - makeScalarBigMapStore, - makeScalarBigWeakMapStore, - makeScalarBigSetStore, - makeScalarBigWeakSetStore, -} = cm; - -const { watchPromise, providePromiseWatcher } = wpm; - -const VatData = harden({ - defineKind, - defineKindMulti, - defineDurableKind, - defineDurableKindMulti, - makeKindHandle, - providePromiseWatcher, - watchPromise, - makeScalarBigMapStore, - makeScalarBigWeakMapStore, - makeScalarBigSetStore, - makeScalarBigWeakSetStore, - canBeDurable, -}); - -globalThis.VatData = VatData; +// Install the VatData globals. +reincarnate(); diff --git a/packages/SwingSet/tools/setup-vat-data.js b/packages/SwingSet/tools/setup-vat-data.js new file mode 100644 index 00000000000..d55f08d585b --- /dev/null +++ b/packages/SwingSet/tools/setup-vat-data.js @@ -0,0 +1,54 @@ +// @ts-check +/* global globalThis */ +// This file produces the globalThis.VatData property outside of a running +// SwingSet so that it can be used by '@agoric/vat-data' (which only *consumes* +// `globalThis.VatData`) in code under test. +import { makeFakeVirtualStuff } from '@agoric/swingset-liveslots/tools/fakeVirtualSupport.js'; + +const { WeakMap, WeakSet } = globalThis; + +/** @type {ReturnType} */ +let fakeVomKit; + +globalThis.VatData = harden({ + defineKind: (...args) => fakeVomKit.vom.defineKind(...args), + defineKindMulti: (...args) => fakeVomKit.vom.defineKindMulti(...args), + defineDurableKind: (...args) => fakeVomKit.vom.defineDurableKind(...args), + defineDurableKindMulti: (...args) => + fakeVomKit.vom.defineDurableKindMulti(...args), + makeKindHandle: (...args) => fakeVomKit.vom.makeKindHandle(...args), + canBeDurable: (...args) => fakeVomKit.vom.canBeDurable(...args), + providePromiseWatcher: (...args) => + fakeVomKit.wpm.providePromiseWatcher(...args), + watchPromise: (...args) => fakeVomKit.wpm.watchPromise(...args), + makeScalarBigMapStore: (...args) => + fakeVomKit.cm.makeScalarBigMapStore(...args), + makeScalarBigWeakMapStore: (...args) => + fakeVomKit.cm.makeScalarBigWeakMapStore(...args), + makeScalarBigSetStore: (...args) => + fakeVomKit.cm.makeScalarBigSetStore(...args), + makeScalarBigWeakSetStore: (...args) => + fakeVomKit.cm.makeScalarBigWeakSetStore(...args), +}); + +export const reincarnate = (options = {}) => { + const { fakeStore = new Map(), fakeVomKit: fvk } = options; + + if (options.fakeVomKit) { + fvk.vom.flushStateCache(); + fvk.cm.flushSchemaCache(); + fvk.vrm.flushIDCounters(); + } + + fakeVomKit = makeFakeVirtualStuff({ + ...options, + fakeStore, + WeakMap, + WeakSet, + }); + + globalThis.WeakMap = fakeVomKit.vom.VirtualObjectAwareWeakMap; + globalThis.WeakSet = fakeVomKit.vom.VirtualObjectAwareWeakSet; + + return { ...options, fakeStore, fakeVomKit }; +}; diff --git a/packages/agoric-cli/package.json b/packages/agoric-cli/package.json index 96f0ed4b37a..ca718f835e1 100644 --- a/packages/agoric-cli/package.json +++ b/packages/agoric-cli/package.json @@ -54,14 +54,14 @@ "@cosmjs/proto-signing": "^0.30.1", "@cosmjs/stargate": "^0.30.1", "@cosmjs/tendermint-rpc": "^0.30.1", - "@endo/bundle-source": "^2.5.1", - "@endo/captp": "^3.1.1", - "@endo/compartment-mapper": "^0.8.4", - "@endo/far": "^0.2.18", - "@endo/init": "^0.5.56", - "@endo/marshal": "^0.8.5", - "@endo/nat": "^4.1.27", - "@endo/promise-kit": "^0.2.56", + "@endo/bundle-source": "^2.5.2", + "@endo/captp": "^3.1.2", + "@endo/compartment-mapper": "^0.8.5", + "@endo/far": "^0.2.19", + "@endo/init": "^0.5.57", + "@endo/marshal": "^0.8.6", + "@endo/nat": "^4.1.28", + "@endo/promise-kit": "^0.2.57", "@iarna/toml": "^2.2.3", "anylogger": "^0.21.0", "chalk": "^5.2.0", diff --git a/packages/agoric-cli/test/upgrade-contract/fixed-contract.js b/packages/agoric-cli/test/upgrade-contract/fixed-contract.js index 8b247fb1623..9140419297e 100644 --- a/packages/agoric-cli/test/upgrade-contract/fixed-contract.js +++ b/packages/agoric-cli/test/upgrade-contract/fixed-contract.js @@ -1,12 +1,18 @@ import { AmountMath } from '@agoric/ertp'; import { makeDurableZone } from '@agoric/zone/durable.js'; +/** @type {ContractMeta} */ +export const meta = { + upgradability: 'canUpgrade', +}; +harden(meta); + /** * @param {ZCF} zcf * @param {*} _privateArgs * @param {MapStore} baggage */ -export const prepare = async (zcf, _privateArgs, baggage) => { +export const start = async (zcf, _privateArgs, baggage) => { const zone = makeDurableZone(baggage); /** @type {ZCFMint} */ diff --git a/packages/assert/jsconfig.json b/packages/assert/jsconfig.json index e9c3e53b5d9..f2b29dfa6ae 100644 --- a/packages/assert/jsconfig.json +++ b/packages/assert/jsconfig.json @@ -2,6 +2,8 @@ { "extends": "../../tsconfig.json", "include": [ + "exported.js", "src/**/*.js", + "test/**/*.js", ], } diff --git a/packages/assert/package.json b/packages/assert/package.json index b6806dc61a6..69511fbb89c 100755 --- a/packages/assert/package.json +++ b/packages/assert/package.json @@ -18,7 +18,7 @@ "lint:types": "tsc -p jsconfig.json" }, "devDependencies": { - "@endo/init": "^0.5.56", + "@endo/init": "^0.5.57", "ava": "^5.3.0" }, "repository": { diff --git a/packages/cache/package.json b/packages/cache/package.json index 434de68c91a..8b7146d28c0 100644 --- a/packages/cache/package.json +++ b/packages/cache/package.json @@ -24,8 +24,8 @@ "@agoric/store": "^0.9.2", "@agoric/swingset-vat": "^0.32.2", "@agoric/vat-data": "^0.5.2", - "@endo/far": "^0.2.18", - "@endo/marshal": "^0.8.5" + "@endo/far": "^0.2.19", + "@endo/marshal": "^0.8.6" }, "devDependencies": { "@agoric/zoe": "^0.26.2", diff --git a/packages/casting/package.json b/packages/casting/package.json index ec982f7f5fd..fdf84f932ae 100644 --- a/packages/casting/package.json +++ b/packages/casting/package.json @@ -30,16 +30,16 @@ "@cosmjs/proto-signing": "^0.30.1", "@cosmjs/stargate": "^0.30.1", "@cosmjs/tendermint-rpc": "^0.30.1", - "@endo/far": "^0.2.18", - "@endo/init": "^0.5.56", - "@endo/lockdown": "^0.1.28", - "@endo/marshal": "^0.8.5", - "@endo/promise-kit": "^0.2.56", + "@endo/far": "^0.2.19", + "@endo/init": "^0.5.57", + "@endo/lockdown": "^0.1.29", + "@endo/marshal": "^0.8.6", + "@endo/promise-kit": "^0.2.57", "node-fetch": "^2.6.0" }, "devDependencies": { "@agoric/cosmic-proto": "^0.3.0", - "@endo/ses-ava": "^0.2.40", + "@endo/ses-ava": "^0.2.41", "@types/node-fetch": "^2.6.2", "ava": "^5.3.0", "c8": "^7.13.0", diff --git a/packages/cosmic-swingset/package.json b/packages/cosmic-swingset/package.json index c6677b56314..0e9e11d271b 100644 --- a/packages/cosmic-swingset/package.json +++ b/packages/cosmic-swingset/package.json @@ -30,12 +30,12 @@ "@agoric/swing-store": "^0.9.1", "@agoric/swingset-vat": "^0.32.2", "@agoric/telemetry": "^0.6.2", - "@endo/far": "^0.2.18", - "@endo/import-bundle": "^0.3.4", - "@endo/init": "^0.5.56", - "@endo/marshal": "^0.8.5", - "@endo/nat": "^4.1.27", - "@endo/promise-kit": "^0.2.56", + "@endo/far": "^0.2.19", + "@endo/import-bundle": "^0.3.5", + "@endo/init": "^0.5.57", + "@endo/marshal": "^0.8.6", + "@endo/nat": "^4.1.28", + "@endo/promise-kit": "^0.2.57", "@iarna/toml": "^2.2.3", "@opentelemetry/sdk-metrics": "~1.9.0", "@opentelemetry/api": "~1.3.0", diff --git a/packages/cosmic-swingset/src/chain-main.js b/packages/cosmic-swingset/src/chain-main.js index 3aa6c4beff1..000ccfd349e 100644 --- a/packages/cosmic-swingset/src/chain-main.js +++ b/packages/cosmic-swingset/src/chain-main.js @@ -240,11 +240,11 @@ export default async function main(progname, args, { env, homedir, agcc }) { /** @type {((obj: object) => void) | undefined} */ let writeSlogObject; - // this storagePort changes for every single message. We define it out here - // so the 'externalStorage' object can close over the single mutable - // instance, and we update the 'portNums.storage' value each time toSwingSet is called + // the storagePort used to change for every single message. It's defined out + // here so 'sendToChainStorage' can close over the single mutable instance, + // when we updated the 'portNums.storage' value each time toSwingSet was called. async function launchAndInitializeSwingSet(bootMsg) { - const sendToChain = msg => chainSend(portNums.storage, msg); + const sendToChainStorage = msg => chainSend(portNums.storage, msg); // this object is used to store the mailbox state. const fromBridgeMailbox = data => { const ack = toNumber(data.ack); @@ -253,7 +253,7 @@ export default async function main(progname, args, { env, homedir, agcc }) { }; const mailboxStorage = makeReadCachingStorage( makePrefixedBridgeStorage( - sendToChain, + sendToChainStorage, `${STORAGE_PATH.MAILBOX}.`, 'legacySet', val => fromBridgeMailbox(JSON.parse(val)), @@ -263,7 +263,7 @@ export default async function main(progname, args, { env, homedir, agcc }) { const makeQueueStorage = queuePath => { const { kvStore, commit, abort } = makeBufferedStorage( makePrefixedBridgeStorage( - sendToChain, + sendToChainStorage, `${queuePath}.`, 'setWithoutNotify', x => x, @@ -305,7 +305,7 @@ export default async function main(progname, args, { env, homedir, agcc }) { } return [path, value]; }); - sendToChain( + sendToChainStorage( stringify({ method: 'setWithoutNotify', args: entries, @@ -493,6 +493,9 @@ export default async function main(progname, args, { env, homedir, agcc }) { }; } + /** @type {Awaited>['blockingSend'] | undefined} */ + let blockingSend; + async function handleCosmosSnapshot(blockHeight, request, requestArgs) { await null; switch (request) { @@ -501,6 +504,9 @@ export default async function main(progname, args, { env, homedir, agcc }) { if (typeof exportDir !== 'string') { throw Fail`Invalid exportDir argument ${q(exportDir)}`; } + !stateSyncExport || + Fail`Snapshot already in progress for ${stateSyncExport.blockHeight}`; + !blockingSend || Fail`Cannot restore snapshot after init`; console.info( 'Restoring SwingSet state from snapshot at block height', blockHeight, @@ -607,74 +613,82 @@ export default async function main(progname, args, { env, homedir, agcc }) { } } - /** @type {Awaited>['blockingSend'] | undefined} */ - let blockingSend; - async function toSwingSet(action, _replier) { // console.log(`toSwingSet`, action); - if (action.vibcPort) { - portNums.dibc = action.vibcPort; - } - if (action.storagePort) { - // Initialize the storage for this particular transaction. - // console.log(` setting portNums.storage to`, action.storagePort); - portNums.storage = action.storagePort; - } + await null; - if (action.vbankPort) { - portNums.bank = action.vbankPort; - } + switch (action.type) { + case AG_COSMOS_INIT: { + // console.error('got AG_COSMOS_INIT', action); - if (action.lienPort) { - portNums.lien = action.lienPort; - } + !blockingSend || Fail`Swingset already initialized`; - // Snapshot actions are specific to cosmos chains and handled here - if (action.type === ActionType.COSMOS_SNAPSHOT) { - const { blockHeight, request, args: requestArgs } = action; - writeSlogObject?.({ - type: 'cosmic-swingset-snapshot-start', - blockHeight, - request, - args: requestArgs, - }); + if (action.vibcPort) { + portNums.dibc = action.vibcPort; + } - const resultP = handleCosmosSnapshot(blockHeight, request, requestArgs); + if (action.storagePort) { + portNums.storage = action.storagePort; + } - resultP.then( - result => { - writeSlogObject?.({ - type: 'cosmic-swingset-snapshot-finish', - blockHeight, - request, - args: requestArgs, - result, - }); - }, - error => { - writeSlogObject?.({ - type: 'cosmic-swingset-snapshot-finish', - blockHeight, - request, - args: requestArgs, - error, - }); - }, - ); + if (action.vbankPort) { + portNums.bank = action.vbankPort; + } - return resultP; - } + if (action.lienPort) { + portNums.lien = action.lienPort; + } + harden(portNums); - // Ensure that initialization has completed. - blockingSend = await (blockingSend || launchAndInitializeSwingSet(action)); + // Ensure that initialization has completed. + blockingSend = await launchAndInitializeSwingSet(action); - if (action.type === AG_COSMOS_INIT) { - // console.error('got AG_COSMOS_INIT', action); - return true; - } + return true; + } + + // Snapshot actions are specific to cosmos chains and handled here + case ActionType.COSMOS_SNAPSHOT: { + const { blockHeight, request, args: requestArgs } = action; + writeSlogObject?.({ + type: 'cosmic-swingset-snapshot-start', + blockHeight, + request, + args: requestArgs, + }); - // Block related actions are processed by `blockingSend` - return blockingSend(action); + const resultP = handleCosmosSnapshot(blockHeight, request, requestArgs); + + resultP.then( + result => { + writeSlogObject?.({ + type: 'cosmic-swingset-snapshot-finish', + blockHeight, + request, + args: requestArgs, + result, + }); + }, + error => { + writeSlogObject?.({ + type: 'cosmic-swingset-snapshot-finish', + blockHeight, + request, + args: requestArgs, + error, + }); + }, + ); + + return resultP; + } + + default: { + if (!blockingSend) throw Fail`Swingset not initialized`; + + // Block related actions are processed by `blockingSend` + return blockingSend(action); + } + } } } diff --git a/packages/deploy-script-support/package.json b/packages/deploy-script-support/package.json index 1bf17d44d1b..86b05c07815 100644 --- a/packages/deploy-script-support/package.json +++ b/packages/deploy-script-support/package.json @@ -41,17 +41,17 @@ "@agoric/notifier": "^0.6.2", "@agoric/store": "^0.9.2", "@agoric/zoe": "^0.26.2", - "@endo/base64": "^0.2.31", - "@endo/bundle-source": "^2.5.1", - "@endo/far": "^0.2.18", - "@endo/marshal": "^0.8.5", - "@endo/nat": "^4.1.27", - "@endo/promise-kit": "^0.2.56", - "@endo/zip": "^0.2.31" + "@endo/base64": "^0.2.32", + "@endo/bundle-source": "^2.5.2", + "@endo/far": "^0.2.19", + "@endo/marshal": "^0.8.6", + "@endo/nat": "^4.1.28", + "@endo/promise-kit": "^0.2.57", + "@endo/zip": "^0.2.32" }, "devDependencies": { "@agoric/vats": "^0.15.1", - "@endo/init": "^0.5.56", + "@endo/init": "^0.5.57", "ava": "^5.3.0", "import-meta-resolve": "^2.2.1" }, diff --git a/packages/deployment/Dockerfile b/packages/deployment/Dockerfile index f490a11c58c..88bbde7a0c2 100644 --- a/packages/deployment/Dockerfile +++ b/packages/deployment/Dockerfile @@ -2,22 +2,13 @@ ARG TAG=latest ARG REPO=agoric/agoric-sdk ARG REGISTRY=ghcr.io -# FIXME: Journalbeat compilation is currently broken, but non-essential. -# Removed from the build. -# FROM golang:1.20-bullseye AS go-build - -# WORKDIR /usr/src/journalbeat -# RUN apt-get update -y && apt-get install -y libsystemd-dev -# RUN go get github.com/mheese/journalbeat - FROM $REGISTRY/$REPO:$TAG +COPY ./scripts/install-deps.sh /usr/src/agoric-sdk/packages/deployment/scripts/ RUN /usr/src/agoric-sdk/packages/deployment/scripts/install-deps.sh -# # Copy journalbeat for logging support -# COPY --from=go-build /go/bin/journalbeat /usr/local/bin/ - WORKDIR /usr/src/agoric-sdk/packages/deployment +COPY . . RUN ln -sf $PWD/bin/ag-setup-cosmos /usr/local/bin/ag-setup-cosmos WORKDIR /data/chains diff --git a/packages/deployment/Dockerfile.sdk b/packages/deployment/Dockerfile.sdk index f01063de889..71b0ad65307 100644 --- a/packages/deployment/Dockerfile.sdk +++ b/packages/deployment/Dockerfile.sdk @@ -62,7 +62,7 @@ RUN \ yarn build # Remove dev dependencies. -RUN rm -rf packages/xsnap/moddable +RUN rm -rf packages/xsnap/moddable packages/xsnap/xsnap-native/build/tmp # FIXME: This causes bundling differences. https://github.com/endojs/endo/issues/919 # RUN yarn install --frozen-lockfile --production --network-timeout 100000 @@ -86,11 +86,11 @@ ARG GIT_REVISION=unknown RUN echo "$GIT_REVISION" > /usr/src/agoric-sdk/packages/solo/public/git-revision.txt # Compatibility links for older containers. -RUN ln -s /data /agoric -RUN ln -s /data/solo /usr/src/agoric-sdk/packages/cosmic-swingset/solo -RUN ln -s /data/chains /usr/src/agoric-sdk/packages/cosmic-swingset/chains +RUN ln -sf /data /agoric +RUN ln -sf /data/solo /usr/src/agoric-sdk/packages/cosmic-swingset/solo +RUN ln -sf /data/chains /usr/src/agoric-sdk/packages/cosmic-swingset/chains -RUN /usr/src/agoric-sdk/packages/deployment/scripts/smoketest-binaries.sh +RUN /usr/src/agoric-sdk/scripts/smoketest-binaries.sh # By default, run the daemon with specified arguments. WORKDIR /root diff --git a/packages/deployment/Makefile b/packages/deployment/Makefile index d718079ea6b..0f9316a9929 100644 --- a/packages/deployment/Makefile +++ b/packages/deployment/Makefile @@ -5,7 +5,7 @@ VERSION := $(shell node -e 'console.log(require("../../package.json").version??" TAG := $(if $(VERSION),$(VERSION),latest) GIT_REVISION := $(shell hash=$$(git rev-parse --short HEAD); \ - dirty=`git diff --quiet || echo -dirty`; \ + dirty=`git diff --quiet 2>/dev/null || echo -dirty`; \ echo "$$hash$$dirty") # Don't push alpha tags as ":$(TAG)". diff --git a/packages/deployment/ansible/roles/copy/tasks/main.yml b/packages/deployment/ansible/roles/copy/tasks/main.yml index 217bc184635..75ab448daab 100644 --- a/packages/deployment/ansible/roles/copy/tasks/main.yml +++ b/packages/deployment/ansible/roles/copy/tasks/main.yml @@ -7,15 +7,14 @@ use_ssh_args: true when: HELPER_BINARY is defined -- name: Synchronize Agoric SDK +- name: 'Synchronize Agoric SDK {{ AGORIC_SDK }}' synchronize: src: '{{ AGORIC_SDK }}/' dest: '/usr/src/agoric-sdk/' - # dirs: yes delete: yes - rsync_opts: - - "--partial-dir=/usr/src/agoric-sdk/.rsync-partial/{{ hostvars[inventory_hostname]['ansible_host'] | default(inventory_hostname) }}" - - '--exclude=.rsync-partial' + #rsync_opts: + # - "--partial-dir=/usr/src/agoric-sdk/.rsync-partial/{{ hostvars[inventory_hostname]['ansible_host'] | default(inventory_hostname) }}" + # - '--exclude=.rsync-partial' # checksum: yes mode: push use_ssh_args: true diff --git a/packages/deployment/docker/ag-setup-cosmos b/packages/deployment/docker/ag-setup-cosmos index 0f2466ed778..7404290420e 100755 --- a/packages/deployment/docker/ag-setup-cosmos +++ b/packages/deployment/docker/ag-setup-cosmos @@ -1,5 +1,4 @@ #! /bin/sh -PORT=26657 NETWORK_NAME=${NETWORK_NAME-agoric} SETUP_HOME=${SETUP_HOME-$NETWORK_NAME} IMAGE=ghcr.io/agoric/cosmic-swingset-setup:${TAG-latest} @@ -21,10 +20,17 @@ show-*) TTY=-i ;; esac +setup_volume= +if test -f "$PWD/$SETUP_HOME/setup/deployment.json"; then + setup_volume=--volume="$PWD/$SETUP_HOME/setup:/data/chains/$SETUP_HOME" +elif test -f deployment.json; then + setup_volume=--volume="$PWD:/data/chains/$SETUP_HOME" +fi exec docker run --rm $TTY $FLAGS \ --volume=ag-setup-cosmos-chains:/data/chains \ --volume=ag-chain-cosmos-state:/root/.ag-chain-cosmos \ --volume=/var/run/docker.sock:/var/run/docker.sock \ + $setup_volume \ --env AGD_HOME=/root/.ag-chain-cosmos \ --env AG_SETUP_COSMOS_NAME=$NETWORK_NAME \ --env AG_SETUP_COSMOS_HOME=$SETUP_HOME \ diff --git a/packages/deployment/docker/integration-test.sh b/packages/deployment/docker/integration-test.sh new file mode 100755 index 00000000000..663eb9a4972 --- /dev/null +++ b/packages/deployment/docker/integration-test.sh @@ -0,0 +1,38 @@ +#! /bin/sh +NETWORK_NAME=${NETWORK_NAME-localtest} +SETUP_HOME=${SETUP_HOME-$NETWORK_NAME} +IMAGE=ghcr.io/agoric/cosmic-swingset-setup:${TAG-latest} +TTY=-i +test -t 0 && test -t 1 && TTY=-it +FLAGS=--entrypoint=/bin/bash +case "$1" in +--pull) + shift + docker pull "$IMAGE" + ;; +esac +case "$1" in +shell) shift ;; +*) + set /usr/src/agoric-sdk/packages/deployment/scripts/integration-test.sh ${1+"$@"} + ;; +esac + +setup_volume= +if test -f "$PWD/$SETUP_HOME/setup/deployment.json"; then + setup_volume=--volume="$PWD/$SETUP_HOME/setup:/data/chains/$SETUP_HOME" +elif test -f deployment.json; then + setup_volume=--volume="$PWD:/data/chains/$SETUP_HOME" +fi +if test -n "$LOADGEN"; then + setup_volume="$setup_volume --volume=$LOADGEN:/usr/src/testnet-load-generator" +fi +exec docker run --rm $TTY $FLAGS \ + --volume=ag-setup-cosmos-chains:/data/chains \ + --volume=ag-chain-cosmos-state:/root/.ag-chain-cosmos \ + --volume=/var/run/docker.sock:/var/run/docker.sock \ + $setup_volume \ + --env AGD_HOME=/root/.ag-chain-cosmos \ + --env NETWORK_NAME=$NETWORK_NAME \ + -w /data/chains \ + "$IMAGE" ${1+"$@"} diff --git a/packages/deployment/jsconfig.json b/packages/deployment/jsconfig.json index 5357adfd09d..f720c5abf1c 100644 --- a/packages/deployment/jsconfig.json +++ b/packages/deployment/jsconfig.json @@ -3,6 +3,7 @@ "extends": "../../tsconfig.json", "include": [ "src/**/*.js", - "test/**/*.js" + "test/**/*.js", + "upgrade-test/**/*.js" ] } diff --git a/packages/deployment/package.json b/packages/deployment/package.json index 1a0f73b7db0..f30db2efbad 100644 --- a/packages/deployment/package.json +++ b/packages/deployment/package.json @@ -20,8 +20,8 @@ "license": "Apache-2.0", "dependencies": { "@agoric/assert": "^0.6.0", - "@endo/init": "^0.5.56", - "@endo/marshal": "^0.8.5", + "@endo/init": "^0.5.57", + "@endo/marshal": "^0.8.6", "chalk": "^5.2.0", "deterministic-json": "^1.0.5", "inquirer": "^8.2.2", diff --git a/packages/deployment/scripts/integration-test.sh b/packages/deployment/scripts/integration-test.sh index dbac085d216..59025808a07 100755 --- a/packages/deployment/scripts/integration-test.sh +++ b/packages/deployment/scripts/integration-test.sh @@ -7,6 +7,28 @@ thisdir=$(cd "$(dirname -- "$real0")" > /dev/null && pwd -P) export GOBIN="$thisdir/../../../golang/cosmos/build" export NETWORK_NAME=${NETWORK_NAME-localtest} +SDK_SRC=${SDK_SRC-$(cd "$thisdir/../../.." > /dev/null && pwd -P)} + +LOADGEN=${LOADGEN-""} +if [ -z "$LOADGEN" ] || [ "x$LOADGEN" = "x1" ]; then + for dir in "$SDK_SRC/../testnet-load-generator" /usr/src/testnet-load-generator; do + if [ -d "$dir" ]; then + LOADGEN="$dir" + break + fi + done +fi + +if [ -d "$LOADGEN" ]; then + # Get the absolute path. + LOADGEN=$(cd "$LOADGEN" > /dev/null && pwd -P) +elif [ -n "$LOADGEN" ]; then + echo "Cannot find loadgen (\$LOADGEN=$LOADGEN)" >&2 + exit 2 +else + echo "Running chain without loadgen" >&2 +fi + SOLO_ADDR= VAT_CONFIG= RESULTSDIR=${RESULTSDIR-"$NETWORK_NAME/results"} @@ -21,19 +43,16 @@ cd "$NETWORK_NAME/setup" export AG_SETUP_COSMOS_HOME=${AG_SETUP_COSMOS_HOME-$PWD} export AG_SETUP_COSMOS_STATE_SYNC_INTERVAL=20 -AGORIC_SDK_PATH=${AGORIC_SDK_PATH-$(cd "$thisdir/../../.." > /dev/null && pwd -P)} -if [ -d /usr/src/testnet-load-generator ] +if [ -n "$LOADGEN" ] then - solodir=/usr/src/testnet-load-generator/_agstate/agoric-servers/testnet-8000 + solodir="$LOADGEN"/_agstate/agoric-servers/testnet-8000 "$thisdir/../../solo/bin/ag-solo" init "$solodir" --webport=8000 SOLO_ADDR=$(cat "$solodir/ag-cosmos-helper-address") VAT_CONFIG="@agoric/vats/decentral-demo-config.json" fi -# Speed up the docker deployment by pre-mounting /usr/src/agoric-sdk. -DOCKER_VOLUMES="$AGORIC_SDK_PATH:/usr/src/agoric-sdk" \ - "$thisdir/docker-deployment.cjs" > deployment.json +"$thisdir/docker-deployment.cjs" > deployment.json # Set up the network from our above deployment.json. "$thisdir/setup.sh" init --noninteractive @@ -44,18 +63,18 @@ VAULT_FACTORY_CONTROLLER_ADDR="$SOLO_ADDR" \ CHAIN_BOOTSTRAP_VAT_CONFIG="$VAT_CONFIG" \ "$thisdir/setup.sh" bootstrap ${1+"$@"} -if [ -d /usr/src/testnet-load-generator ] +if [ -n "$LOADGEN" ] then - /usr/src/agoric-sdk/packages/deployment/scripts/setup.sh show-config > "$RESULTSDIR/network-config" + "$SDK_SRC/packages/deployment/scripts/setup.sh" show-config > "$RESULTSDIR/network-config" cp ag-chain-cosmos/data/genesis.json "$RESULTSDIR/genesis.json" cp "$AG_SETUP_COSMOS_HOME/ag-chain-cosmos/data/genesis.json" "$RESULTSDIR/genesis.json" - cd /usr/src/testnet-load-generator - SOLO_COINS=40000000000uist \ + cd "$LOADGEN" + SOLO_COINS=40000000000uist PATH="$thisdir/../bin:$PATH" \ "$AG_SETUP_COSMOS_HOME/faucet-helper.sh" add-egress loadgen "$SOLO_ADDR" - SLOGSENDER=@agoric/telemetry/src/otel-trace.js SOLO_SLOGSENDER= \ + SLOGSENDER=@agoric/telemetry/src/otel-trace.js SOLO_SLOGSENDER="" \ SLOGSENDER_FAIL_ON_ERROR=1 SLOGSENDER_AGENT=process \ AG_CHAIN_COSMOS_HOME=$HOME/.agoric \ - SDK_BUILD=0 MUST_USE_PUBLISH_BUNDLE=1 SDK_SRC=/usr/src/agoric-sdk OUTPUT_DIR="$RESULTSDIR" ./start.sh \ + SDK_BUILD=0 MUST_USE_PUBLISH_BUNDLE=1 SDK_SRC=$SDK_SRC OUTPUT_DIR="$RESULTSDIR" ./start.sh \ --no-stage.save-storage \ --stages=3 --stage.duration=10 --stage.loadgen.cycles=4 \ --stage.loadgen.faucet.interval=6 --stage.loadgen.faucet.limit=4 \ diff --git a/packages/deployment/scripts/setup.sh b/packages/deployment/scripts/setup.sh index 8be0a710a20..8dcb79466ea 100755 --- a/packages/deployment/scripts/setup.sh +++ b/packages/deployment/scripts/setup.sh @@ -11,8 +11,7 @@ export NETWORK_NAME export AG_SETUP_COSMOS_NAME=$NETWORK_NAME export AG_SETUP_COSMOS_HOME=${AG_SETUP_COSMOS_HOME-"$PWD/$NETWORK_NAME/setup"} -# Put our bindir into the PATH so that children can find ag-setup-cosmos. +# Put GOBIN into the PATH so that children can find ag-setup-cosmos. export PATH="$thisdir/../bin:${GOBIN-${GOPATH-/usr/local}/bin}:$PATH" -# Run our setup command. exec ag-setup-cosmos ${1+"$@"} diff --git a/packages/deployment/src/init.js b/packages/deployment/src/init.js index 6d7bed8d8e8..5e6e926517a 100644 --- a/packages/deployment/src/init.js +++ b/packages/deployment/src/init.js @@ -488,7 +488,7 @@ const doInit = config.OFFSETS[PLACEMENT] = offset; } Object.values(ROLE_INSTANCE).some(i => i > 0) || - Fail`Aborting due to no nodes configured!`; + Fail`Aborting due to no nodes configured! (${ROLE_INSTANCE})`; await wr.createFile( `vars.tf`, diff --git a/packages/deployment/src/main.js b/packages/deployment/src/main.js index ad79e69af5c..ed5e48a6450 100644 --- a/packages/deployment/src/main.js +++ b/packages/deployment/src/main.js @@ -1,3 +1,4 @@ +/* eslint-disable @jessie.js/safe-await-separator */ import djson from 'deterministic-json'; import { createHash } from 'crypto'; import chalk from 'chalk'; diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index 2fec95672aa..8b891fe2685 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -25,10 +25,10 @@ "eslint-config.*" ], "peerDependencies": { - "@endo/eslint-plugin": "^0.4.4", + "@endo/eslint-plugin": "^0.4.5", "@jessie.js/eslint-plugin": "^0.4.0", - "@typescript-eslint/eslint-plugin": "^5.61.0", - "@typescript-eslint/parser": "^5.61.0", + "@typescript-eslint/eslint-plugin": "^6.1.0", + "@typescript-eslint/parser": "^6.1.0", "eslint": "^8.36.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-github": "^4.8.0", @@ -36,7 +36,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-import": "^2.25.3", "eslint-plugin-jsdoc": "^40.1.0", - "eslint-plugin-prettier": "^5.0.0-alpha.2", + "eslint-plugin-prettier": "^5.0.0", "prettier": "^3.0.0" } } diff --git a/packages/governance/jsconfig.json b/packages/governance/jsconfig.json index b2d019670f2..96133333c02 100644 --- a/packages/governance/jsconfig.json +++ b/packages/governance/jsconfig.json @@ -1,6 +1,7 @@ { "extends": "../../tsconfig.json", "include": [ + "exported.js", "build", "scripts", "src", diff --git a/packages/governance/package.json b/packages/governance/package.json index 19d3ca8a83a..17f40028e5c 100644 --- a/packages/governance/package.json +++ b/packages/governance/package.json @@ -40,20 +40,20 @@ "@agoric/time": "^0.3.2", "@agoric/vat-data": "^0.5.2", "@agoric/zoe": "^0.26.2", - "@endo/bundle-source": "^2.5.1", - "@endo/captp": "^3.1.1", - "@endo/eventual-send": "^0.17.2", - "@endo/far": "^0.2.18", - "@endo/marshal": "^0.8.5", - "@endo/nat": "^4.1.27", - "@endo/promise-kit": "^0.2.56", + "@endo/bundle-source": "^2.5.2", + "@endo/captp": "^3.1.2", + "@endo/eventual-send": "^0.17.3", + "@endo/far": "^0.2.19", + "@endo/marshal": "^0.8.6", + "@endo/nat": "^4.1.28", + "@endo/promise-kit": "^0.2.57", "import-meta-resolve": "^2.2.1" }, "devDependencies": { "@agoric/deploy-script-support": "^0.10.3", "@agoric/vats": "^0.15.1", - "@endo/bundle-source": "^2.5.1", - "@endo/init": "^0.5.56", + "@endo/bundle-source": "^2.5.2", + "@endo/init": "^0.5.57", "ava": "^5.3.0", "c8": "^7.13.0" }, diff --git a/packages/governance/src/committee.js b/packages/governance/src/committee.js index 87f3f90443d..96e68d61ae6 100644 --- a/packages/governance/src/committee.js +++ b/packages/governance/src/committee.js @@ -23,11 +23,15 @@ const { ceilDivide } = natSafeMath; * }} CommitteeElectorateCreatorFacet */ -export const privateArgsShape = { - storageNode: StorageNodeShape, - marshaller: M.remotable('Marshaller'), +/** @type {ContractMeta} */ +export const meta = { + privateArgsShape: { + storageNode: StorageNodeShape, + marshaller: M.remotable('Marshaller'), + }, + upgradability: 'canUpgrade', }; -harden(privateArgsShape); +harden(meta); /** * Each Committee (an Electorate) represents a particular set of voters. The @@ -46,7 +50,7 @@ harden(privateArgsShape); * @param {import('@agoric/vat-data').Baggage} baggage * @returns {{creatorFacet: CommitteeElectorateCreatorFacet, publicFacet: CommitteeElectoratePublic}} */ -export const prepare = (zcf, privateArgs, baggage) => { +export const start = (zcf, privateArgs, baggage) => { /** @type {MapStore, import('./electorateTools.js').QuestionRecord>} */ const allQuestions = provideDurableMapStore(baggage, 'Question'); @@ -170,5 +174,4 @@ export const prepare = (zcf, privateArgs, baggage) => { return { publicFacet, creatorFacet }; }; - -harden(prepare); +harden(start); diff --git a/packages/governance/src/contractGovernor.js b/packages/governance/src/contractGovernor.js index ad2922d2270..bd18551d16c 100644 --- a/packages/governance/src/contractGovernor.js +++ b/packages/governance/src/contractGovernor.js @@ -11,6 +11,12 @@ const { Fail } = assert; const trace = makeTracer('CGov', false); +/** @type {ContractMeta} */ +export const meta = { + upgradability: 'canUpgrade', +}; +harden(meta); + /** * Validate that the question details correspond to a parameter change question * that the electorate hosts, and that the voteCounter and other details are @@ -147,8 +153,8 @@ harden(validateQuestionFromCounter); * }>} * @param {import('@agoric/vat-data').Baggage} baggage */ -export const prepare = async (zcf, privateArgs, baggage) => { - trace('prepare'); +export const start = async (zcf, privateArgs, baggage) => { + trace('start'); const zoe = zcf.getZoeService(); trace('getTerms', zcf.getTerms()); const { @@ -202,9 +208,9 @@ export const prepare = async (zcf, privateArgs, baggage) => { // Specifically, to the vat of the governed contract for its API names. The exo // defers that until API governance is requested to be invoked or validated. - trace('prepare complete'); + trace('start complete'); // CRUCIAL: only contractGovernor should get the ability to update params return { creatorFacet: governorKit.creator, publicFacet: governorKit.public }; }; -harden(prepare); +harden(start); diff --git a/packages/governance/src/types-ambient.js b/packages/governance/src/types-ambient.js index 2247ea079e5..c94c98b41ee 100644 --- a/packages/governance/src/types-ambient.js +++ b/packages/governance/src/types-ambient.js @@ -65,7 +65,7 @@ * * @template {import('./contractGovernance/typedParamManager.js').ParamTypesMap} T Governed parameters of contract * @typedef {{ - * electionManager: import('@agoric/zoe/src/zoeService/utils.js').Instance, + * electionManager: import('@agoric/zoe/src/zoeService/utils.js').Instance, * governedParams: import('./contractGovernance/typedParamManager.js').ParamRecordsFromTypes @@ -680,7 +680,7 @@ * @param {ERef} zoe * @param {import('@agoric/zoe/src/zoeService/utils.js').Instance<(zcf: ZCF>) => {}>} allegedGoverned * @param {Instance} allegedGovernor - * @param {Installation} contractGovernorInstallation + * @param {Installation} contractGovernorInstallation * @returns {Promise} */ @@ -699,7 +699,7 @@ */ /** - * @typedef {import('./contractGovernor.js')['prepare']} GovernorSF + * @typedef {import('./contractGovernor.js')['start']} GovernorSF */ // TODO find a way to parameterize the startInstance so the governed contract types flow diff --git a/packages/governance/test/swingsetTests/committeeBinary/vat-voter.js b/packages/governance/test/swingsetTests/committeeBinary/vat-voter.js index 6be03cb2c7f..796cfe24741 100644 --- a/packages/governance/test/swingsetTests/committeeBinary/vat-voter.js +++ b/packages/governance/test/swingsetTests/committeeBinary/vat-voter.js @@ -40,7 +40,7 @@ const verify = async (log, issue, electoratePublicFacet, instances) => { const build = async (log, zoe) => { return Far('voter', { createVoter: async (name, invitation, choice) => { - /** @type {import('@agoric/zoe/src/zoeService/utils.js').Instance} */ + /** @type {import('@agoric/zoe/src/zoeService/utils.js').Instance} */ const electorateInstance = await E(zoe).getInstance(invitation); const electoratePublicFacet = E(zoe).getPublicFacet(electorateInstance); const seat = E(zoe).offer(invitation); diff --git a/packages/governance/test/unitTests/test-committee.js b/packages/governance/test/unitTests/test-committee.js index 2c209fea744..f9dee76f8fb 100644 --- a/packages/governance/test/unitTests/test-committee.js +++ b/packages/governance/test/unitTests/test-committee.js @@ -37,7 +37,7 @@ const setupContract = async () => { bundleSource(counterRoot), ]); // install the contract - /** @typedef {Installation} CommitteInstallation */ + /** @typedef {Installation} CommitteInstallation */ /** @typedef {Installation} CounterInstallation */ /** @type {[CommitteInstallation, CounterInstallation] } */ const [electorateInstallation, counterInstallation] = await Promise.all([ diff --git a/packages/inter-protocol/README.md b/packages/inter-protocol/README.md index 6edecdfaafb..12286634539 100644 --- a/packages/inter-protocol/README.md +++ b/packages/inter-protocol/README.md @@ -21,7 +21,7 @@ The above states are robust to system restarts and upgrades. This is accomplishe Debts are denominated in µIST. (1 million µIST = 1 IST) Each interest charging period (say daily) the actual debts in all vaults are affected. Materializing that across all vaults would be O(n) writes. Instead, to make charging interest O(1) we virtualize the debt that a vault owes to be a function of stable vault attributes and values that change in the vault manager when it charges interest. Specifically, -- a compoundedStabilityFee value on the manager that keeps track of interest accrual since its launch +- a compoundedInterest value on the manager that keeps track of interest accrual since its launch - a debtSnapshot on the vault by which one can calculate the actual debt To maintain that the keys of vaults to liquidate are stable requires that its keys are also time-independent so they're recorded as a "normalized collateralization ratio", with the actual collateral divided by the normalized debt. diff --git a/packages/inter-protocol/docs/governance.md b/packages/inter-protocol/docs/governance.md index 8295fe82bf7..9d8671ea80f 100644 --- a/packages/inter-protocol/docs/governance.md +++ b/packages/inter-protocol/docs/governance.md @@ -51,7 +51,7 @@ the Inter Protocol Whitepaper, v0.8. | Governance Key | Type | WP? | | ------------------ | :---------------- | --- | | DebtLimit | Amount | Yes | -| StabilityFee | Ratio | Yes | +| InterestRate | Ratio | Yes | | LiquidationPadding | Ratio | | | LiquidationMargin | Ratio | Yes | | LiquidationPenalty | Ratio | Yes | @@ -60,7 +60,7 @@ the Inter Protocol Whitepaper, v0.8. From Inter Protocol Whitepaper, v0.8: >Governance determines the approved collateral types: the crypto assets that can be used as collateral in vaults. In addition, it sets and manages the parameters associated with each collateral type based on the risk of the asset. These include the total debt limit, the collateralization ratio, the stability fee, and the liquidation penalty. -Note that the "stability fee" described in the Whitepaper comprises both StabilityFee and MintFee. +Note that the "stability fee" described in the Whitepaper comprises both InterestRate and MintFee. ### Parity Stability Mechanism (PSM) diff --git a/packages/inter-protocol/package.json b/packages/inter-protocol/package.json index 77127790d8f..419a2cde0c3 100644 --- a/packages/inter-protocol/package.json +++ b/packages/inter-protocol/package.json @@ -41,11 +41,11 @@ "@agoric/time": "^0.3.2", "@agoric/vat-data": "^0.5.2", "@agoric/zoe": "^0.26.2", - "@endo/captp": "^3.1.1", - "@endo/eventual-send": "^0.17.2", - "@endo/far": "^0.2.18", - "@endo/marshal": "^0.8.5", - "@endo/nat": "^4.1.27", + "@endo/captp": "^3.1.2", + "@endo/eventual-send": "^0.17.3", + "@endo/far": "^0.2.19", + "@endo/marshal": "^0.8.6", + "@endo/nat": "^4.1.28", "jessie.js": "^0.3.2" }, "devDependencies": { @@ -55,9 +55,9 @@ "@agoric/swingset-vat": "^0.32.2", "@agoric/vats": "^0.15.1", "@agoric/zone": "^0.2.2", - "@endo/bundle-source": "^2.5.1", - "@endo/init": "^0.5.56", - "@endo/promise-kit": "^0.2.56", + "@endo/bundle-source": "^2.5.2", + "@endo/init": "^0.5.57", + "@endo/promise-kit": "^0.2.57", "@fast-check/ava": "^1.1.5", "ava": "^5.3.0", "c8": "^7.13.0", diff --git a/packages/inter-protocol/scripts/add-collateral-core.js b/packages/inter-protocol/scripts/add-collateral-core.js index 6e4caf3d218..bad11ee1c15 100644 --- a/packages/inter-protocol/scripts/add-collateral-core.js +++ b/packages/inter-protocol/scripts/add-collateral-core.js @@ -10,7 +10,7 @@ export const defaultProposalBuilder = async ( { publishRef, install: install0, wrapInstall }, { debtLimitValue = undefined, - stabilityFeeValue = undefined, + interestRateValue = undefined, interchainAssetOptions = /** @type {object} */ ({}), } = {}, { env = process.env } = {}, @@ -38,7 +38,7 @@ export const defaultProposalBuilder = async ( getManifestForAddAssetToVault.name, { debtLimitValue: debtLimitValue && BigInt(debtLimitValue), - stabilityFeeValue: stabilityFeeValue && BigInt(stabilityFeeValue), + interestRateValue: interestRateValue && BigInt(interestRateValue), interchainAssetOptions: { denom, issuerBoardId, diff --git a/packages/inter-protocol/scripts/deploy-contracts.js b/packages/inter-protocol/scripts/deploy-contracts.js index 3e99c39ccb2..a1fdd105257 100644 --- a/packages/inter-protocol/scripts/deploy-contracts.js +++ b/packages/inter-protocol/scripts/deploy-contracts.js @@ -43,14 +43,24 @@ export default async (homeP, endowments) => { }); console.log('getting installCache...'); - /** @type {CopyMap} */ + /** + * @type {CopyMap< + * string, + * { installation: Installation; boardId: string; path?: string } + * >} + */ const initial = await provideWhen(scratch, 'installCache', () => makeCopyMap([]), ); console.log('initially:', initial.payload.keys.length, 'entries'); // ISSUE: getCopyMapEntries of CopyMap loses K, V. - /** @type {Map} */ + /** + * @type {Map< + * string, + * { installation: Installation; boardId: string; path?: string } + * >} + */ const working = new Map(getCopyMapEntries(initial)); let added = 0; diff --git a/packages/inter-protocol/scripts/init-core.js b/packages/inter-protocol/scripts/init-core.js index a3b7c726efa..a0eca089546 100644 --- a/packages/inter-protocol/scripts/init-core.js +++ b/packages/inter-protocol/scripts/init-core.js @@ -1,7 +1,8 @@ /* global process */ /** - * @file can be run with `agoric deploy` after a chain is running (depends on chain state) - * Only works with "local" chain and not sim-chain b/c it needs governance votes (n/a on sim-chain). + * @file can be run with `agoric deploy` after a chain is running (depends on + * chain state) Only works with "local" chain and not sim-chain b/c it needs + * governance votes (n/a on sim-chain). */ import { makeHelpers } from '@agoric/deploy-script-support'; import { objectMap } from '@agoric/internal'; @@ -53,9 +54,8 @@ const installKeyGroups = { * @param {(i: I) => R} opts.publishRef * @param {(m: string, b: string, opts?: any) => I} opts.install * @param {(f: T) => T} [opts.wrapInstall] - * * @param {object} [options] - * @param {{ committeeName?: string, committeeSize?: number}} [options.econCommitteeOptions] + * @param {{ committeeName?: string; committeeSize?: number }} [options.econCommitteeOptions] */ export const committeeProposalBuilder = async ( { publishRef, install: install0, wrapInstall }, @@ -85,7 +85,6 @@ export const committeeProposalBuilder = async ( /** * @template I * @template R - * * @param {object} opts * @param {(i: I) => R} opts.publishRef * @param {(m: string, b: string, opts?: any) => I} opts.install @@ -127,7 +126,7 @@ export const defaultProposalBuilder = async ( options = {}, { env = process.env } = {}, ) => { - /** @param {string|undefined} s */ + /** @param {string | undefined} s */ const optBigInt = s => s && BigInt(s); const { vaultFactoryControllerAddress = env.VAULT_FACTORY_CONTROLLER_ADDR, diff --git a/packages/inter-protocol/scripts/manual-price-feed.js b/packages/inter-protocol/scripts/manual-price-feed.js index f40fef88362..70f356daa64 100644 --- a/packages/inter-protocol/scripts/manual-price-feed.js +++ b/packages/inter-protocol/scripts/manual-price-feed.js @@ -8,24 +8,29 @@ import process from 'process'; * After extracting the oracleAdmins to entries in home.scratch, you can use one * from the REPL like: * - * lookup('agoricNames', 'oracleBrand', 'ATOM').then(brand => atom = brand) - * -> [Object Alleged: ATOM brand]{} - * lookup('agoricNames', 'oracleBrand', 'USD').then(brand => usd = brand) - * -> [Object Alleged: USD brand]{} - * pa = home.priceAuthority - * -> [Object Alleged: PriceAuthority]{} - * qn = E(pa).makeQuoteNotifier({ value: 1n * 10n ** 6n, brand: atom }, usd) - * -> [Object Alleged: QuoteNotifier]{} - * oa = E(home.scratch).get("offerResult unknown#1652669688625") - * -> [Object Alleged: OracleAdmin]{} - * E(oa).pushResult('19.37') - * E(qn).getUpdateSince() + * lookup('agoricNames', 'oracleBrand', 'ATOM').then(brand => atom = brand) + * -> [Object Alleged: ATOM brand]{} + * lookup('agoricNames', 'oracleBrand', 'USD').then(brand => usd = brand) + * -> [Object Alleged: USD brand]{} + * pa = home.priceAuthority + * -> [Object Alleged: PriceAuthority]{} + * qn = E(pa).makeQuoteNotifier({ value: 1n * 10n ** 6n, brand: atom }, usd) + * -> [Object Alleged: QuoteNotifier]{} + * oa = E(home.scratch).get("offerResult unknown#1652669688625") + * -> [Object Alleged: OracleAdmin]{} + * E(oa).pushResult('19.37') + * E(qn).getUpdateSince() * - * @typedef {{ board: import('@agoric/vats').Board, chainTimerService, scratch, zoe }} Home + * @typedef {{ + * board: import('@agoric/vats').Board; + * chainTimerService; + * scratch; + * zoe; + * }} Home * @param {Promise} homePromise * @param {object} root0 - * @param {(...path: string[]) => Promise} root0.lookup - * A promise for the references available from REPL home + * @param {(...path: string[]) => Promise} root0.lookup A promise for the + * references available from REPL home */ export default async function priceAuthorityFromNotifier( homePromise, diff --git a/packages/inter-protocol/src/auction/auctionBook.js b/packages/inter-protocol/src/auction/auctionBook.js index c72ee7bac0a..548be5f0943 100644 --- a/packages/inter-protocol/src/auction/auctionBook.js +++ b/packages/inter-protocol/src/auction/auctionBook.js @@ -34,34 +34,38 @@ const DEFAULT_DECIMALS = 9; /** * @file The book represents the collateral-specific state of an ongoing - * auction. It holds the book, the capturedPrice, and the collateralSeat that has - * the allocation of assets for sale. + * auction. It holds the book, the capturedPrice, and the collateralSeat that + * has the allocation of assets for sale. + * + * The book contains orders for the collateral. It holds two kinds of orders: * - * The book contains orders for the collateral. It holds two kinds of - * orders: * - Prices express the bidding offer in terms of a Bid amount - * - ScaledBids express the offer in terms of a discount (or markup) from the - * most recent oracle price. + * - ScaledBids express the offer in terms of a discount (or markup) from the most + * recent oracle price. * - * Offers can be added in three ways. 1) When the auction is not active, prices - * are automatically added to the appropriate collection. When the auction is - * active, 2) if a new offer is at or above the current price, it will be - * settled immediately; 2) If the offer is below the current price, it will be - * added in the appropriate place and settled when the price reaches that level. + * Offers can be added in three ways. 1) When the auction is not active, prices + * are automatically added to the appropriate collection. When the auction is + * active, 2) if a new offer is at or above the current price, it will be + * settled immediately; 2) If the offer is below the current price, it will be + * added in the appropriate place and settled when the price reaches that + * level. */ const trace = makeTracer('AucBook', true); /** * @typedef {{ - * maxBuy: Amount<'nat'> + * maxBuy: Amount<'nat'>; * } & { - * exitAfterBuy?: boolean, - * } & ({ - * offerPrice: Ratio, - * } | { - * offerBidScaling: Ratio, - * })} OfferSpec + * exitAfterBuy?: boolean; + * } & ( + * | { + * offerPrice: Ratio; + * } + * | { + * offerBidScaling: Ratio; + * } + * )} OfferSpec */ /** * @param {Brand<'nat'>} bidBrand @@ -88,17 +92,19 @@ export const makeOfferSpecShape = (bidBrand, collateralBrand) => { /** * @typedef {object} BookDataNotification - * - * @property {Ratio | null} startPrice identifies the priceAuthority and price - * @property {Ratio | null} currentPriceLevel the price at the current auction tier - * @property {Amount<'nat'> | null} startProceedsGoal The proceeds the sellers were targeting to raise - * @property {Amount<'nat'> | null} remainingProceedsGoal The remainder of - * the proceeds the sellers were targeting to raise - * @property {Amount<'nat'> | undefined} proceedsRaised The proceeds raised so far in the auction - * @property {Amount<'nat'>} startCollateral How much collateral was - * available for sale at the start. (If more is deposited later, it'll be - * added in.) - * @property {Amount<'nat'> | null} collateralAvailable The amount of collateral remaining + * @property {Ratio | null} startPrice identifies the priceAuthority and price + * @property {Ratio | null} currentPriceLevel the price at the current auction + * tier + * @property {Amount<'nat'> | null} startProceedsGoal The proceeds the sellers + * were targeting to raise + * @property {Amount<'nat'> | null} remainingProceedsGoal The remainder of the + * proceeds the sellers were targeting to raise + * @property {Amount<'nat'> | undefined} proceedsRaised The proceeds raised so + * far in the auction + * @property {Amount<'nat'>} startCollateral How much collateral was available + * for sale at the start. (If more is deposited later, it'll be added in.) + * @property {Amount<'nat'> | null} collateralAvailable The amount of collateral + * remaining */ /** @@ -231,8 +237,8 @@ export const prepareAuctionBook = (baggage, zcf, makeRecorderKit) => { { helper: { /** - * remove the key from the appropriate book, indicated by whether the price - * is defined. + * remove the key from the appropriate book, indicated by whether the + * price is defined. * * @param {string} key * @param {Ratio | undefined} price @@ -247,8 +253,8 @@ export const prepareAuctionBook = (baggage, zcf, makeRecorderKit) => { }, /** - * Update the entry in the appropriate book, indicated by whether the price - * is defined. + * Update the entry in the appropriate book, indicated by whether the + * price is defined. * * @param {string} key * @param {Amount} collateralSold @@ -264,7 +270,8 @@ export const prepareAuctionBook = (baggage, zcf, makeRecorderKit) => { }, /** - * Settle with seat. The caller is responsible for updating the book, if any. + * Settle with seat. The caller is responsible for updating the book, if + * any. * * @param {ZCFSeat} seat * @param {Amount<'nat'>} collateralWanted @@ -341,15 +348,16 @@ export const prepareAuctionBook = (baggage, zcf, makeRecorderKit) => { }, /** - * Accept an offer expressed as a price. If the auction is active, attempt to - * buy collateral. If any of the offer remains add it to the book. + * Accept an offer expressed as a price. If the auction is active, + * attempt to buy collateral. If any of the offer remains add it to the + * book. * - * @param {ZCFSeat} seat - * @param {Ratio} price - * @param {Amount<'nat'>} maxBuy - * @param {object} opts - * @param {boolean} opts.trySettle - * @param {boolean} [opts.exitAfterBuy] + * @param {ZCFSeat} seat + * @param {Ratio} price + * @param {Amount<'nat'>} maxBuy + * @param {object} opts + * @param {boolean} opts.trySettle + * @param {boolean} [opts.exitAfterBuy] */ acceptPriceOffer( seat, @@ -388,16 +396,16 @@ export const prepareAuctionBook = (baggage, zcf, makeRecorderKit) => { }, /** - * Accept an offer expressed as a discount (or markup). If the auction is - * active, attempt to buy collateral. If any of the offer remains add it to - * the book. + * Accept an offer expressed as a discount (or markup). If the auction + * is active, attempt to buy collateral. If any of the offer remains add + * it to the book. * - * @param {ZCFSeat} seat - * @param {Ratio} bidScaling - * @param {Amount<'nat'>} maxBuy - * @param {object} opts - * @param {boolean} opts.trySettle - * @param {boolean} [opts.exitAfterBuy] + * @param {ZCFSeat} seat + * @param {Ratio} bidScaling + * @param {Amount<'nat'>} maxBuy + * @param {object} opts + * @param {boolean} opts.trySettle + * @param {boolean} [opts.exitAfterBuy] */ acceptScaledBidOffer( seat, @@ -466,10 +474,10 @@ export const prepareAuctionBook = (baggage, zcf, makeRecorderKit) => { * @param {Amount<'nat'>} assetAmount * @param {ZCFSeat} sourceSeat * @param {Amount<'nat'>} [proceedsGoal] an amount that the depositor - * would like to raise. The auction is requested to not sell more - * collateral than required to raise that much. The auctioneer might - * sell more if there is more than one supplier of collateral, and - * they request inconsistent limits. + * would like to raise. The auction is requested to not sell more + * collateral than required to raise that much. The auctioneer might + * sell more if there is more than one supplier of collateral, and + * they request inconsistent limits. */ addAssets(assetAmount, sourceSeat, proceedsGoal) { const { state, facets } = this; @@ -754,7 +762,11 @@ export const prepareAuctionBook = (baggage, zcf, makeRecorderKit) => { }, ); - /** @type {(...args: Parameters) => ReturnType['self']} */ + /** + * @type {( + * ...args: Parameters + * ) => ReturnType['self']} + */ const makeAuctionBook = (...args) => makeAuctionBookKit(...args).self; return makeAuctionBook; }; diff --git a/packages/inter-protocol/src/auction/auctioneer.js b/packages/inter-protocol/src/auction/auctioneer.js index 61df583c5d0..7a705398dc3 100644 --- a/packages/inter-protocol/src/auction/auctioneer.js +++ b/packages/inter-protocol/src/auction/auctioneer.js @@ -43,11 +43,10 @@ const { add, multiply } = natSafeMath; const trace = makeTracer('Auction', true); /** - * @file - * In this file, 'Bid' is the name of the ERTP issuer used to purchase - * collateral from various issuers. It's too confusing to also use Bid as a verb - * or a description of amounts offered, so we've tried to find alternatives in - * all those cases. + * @file In this file, 'Bid' is the name of the ERTP issuer used to purchase + * collateral from various issuers. It's too confusing to also use Bid as a + * verb or a description of amounts offered, so we've tried to find + * alternatives in all those cases. */ const MINIMUM_BID_GIVE = 1n; @@ -67,17 +66,19 @@ const makeBPRatio = (rate, bidBrand, collateralBrand = bidBrand) => * The auction sold some amount of collateral, and raised a certain amount of * Bid. The excess collateral was returned as `unsoldCollateral`. The Bid amount * collected from the auction participants is `proceeds`. + * * Return a set of transfers for atomicRearrange() that distribute * `unsoldCollateral` and `proceeds` proportionally to each seat's deposited * amount. Any uneven split should be allocated to the reserve. * * @param {Amount} unsoldCollateral * @param {Amount} proceeds - * @param {{seat: ZCFSeat, amount: Amount<'nat'>, goal: Amount<'nat'>}[]} deposits + * @param {{ seat: ZCFSeat; amount: Amount<'nat'>; goal: Amount<'nat'> }[]} deposits * @param {ZCFSeat} collateralSeat - * @param {ZCFSeat} bidHoldingSeat seat with the Bid allocation to be distributed + * @param {ZCFSeat} bidHoldingSeat seat with the Bid allocation to be + * distributed * @param {string} collateralKeyword The Reserve will hold multiple collaterals, - * so they need distinct keywords + * so they need distinct keywords * @param {ZCFSeat} reserveSeat * @param {Brand} brand */ @@ -132,6 +133,7 @@ const distributeProportionalShares = ( * The auction sold some amount of collateral, and raised a certain amount of * Bid. The excess collateral was returned as `unsoldCollateral`. The Bid amount * collected from the auction participants is `proceeds`. + * * Return a set of transfers for atomicRearrange() that distribute * `unsoldCollateral` and `proceeds` proportionally to each seat's deposited * amount. Any uneven split should be allocated to the reserve. @@ -140,32 +142,33 @@ const distributeProportionalShares = ( * outside the contract below. * * Some or all of the depositors may have specified a goal amount. - * * A if none did, return collateral and Bid prorated to deposits. - * * B if proceeds < proceedsGoal everyone gets prorated amounts of both. - * * C if proceeds matches proceedsGoal, everyone gets the Bid they - * asked for, plus enough collateral to reach the same proportional payout. - * If any depositor's goal amount exceeded their share of the total, - * we'll fall back to the first approach. - * * D if proceeds > proceedsGoal && all depositors specified a limit, - * all depositors get their goal first, then we distribute the - * remainder (collateral and Bid) to get the same proportional payout. - * * E if proceeds > proceedsGoal && some depositors didn't specify a - * limit, depositors who did will get their goal first, then we distribute - * the remainder (collateral and Bid) to get the same proportional - * payout. If any depositor's goal amount exceeded their share of the - * total, we'll fall back as above. - * Think of it this way: those who specified a limit want as much collateral - * back as possible, consistent with raising a certain amount of Bid. Those - * who didn't specify a limit are trying to sell collateral, and would prefer to - * have as much as possible converted to Bid. + * + * - A if none did, return collateral and Bid prorated to deposits. + * - B if proceeds < proceedsGoal everyone gets prorated amounts of both. + * - C if proceeds matches proceedsGoal, everyone gets the Bid they asked for, + * plus enough collateral to reach the same proportional payout. If any + * depositor's goal amount exceeded their share of the total, we'll fall back + * to the first approach. + * - D if proceeds > proceedsGoal && all depositors specified a limit, all + * depositors get their goal first, then we distribute the remainder + * (collateral and Bid) to get the same proportional payout. + * - E if proceeds > proceedsGoal && some depositors didn't specify a limit, + * depositors who did will get their goal first, then we distribute the + * remainder (collateral and Bid) to get the same proportional payout. If any + * depositor's goal amount exceeded their share of the total, we'll fall back + * as above. Think of it this way: those who specified a limit want as much + * collateral back as possible, consistent with raising a certain amount of + * Bid. Those who didn't specify a limit are trying to sell collateral, and + * would prefer to have as much as possible converted to Bid. * * @param {Amount<'nat'>} unsoldCollateral * @param {Amount<'nat'>} proceeds - * @param {{seat: ZCFSeat, amount: Amount<'nat'>, goal: Amount<'nat'>}[]} deposits + * @param {{ seat: ZCFSeat; amount: Amount<'nat'>; goal: Amount<'nat'> }[]} deposits * @param {ZCFSeat} collateralSeat - * @param {ZCFSeat} bidHoldingSeat seat with the Bid allocation to be distributed + * @param {ZCFSeat} bidHoldingSeat seat with the Bid allocation to be + * distributed * @param {string} collateralKeyword The Reserve will hold multiple collaterals, - * so they need distinct keywords + * so they need distinct keywords * @param {ZCFSeat} reserveSeat * @param {Brand} brand */ @@ -378,15 +381,17 @@ export const distributeProportionalSharesWithLimits = ( }; /** - * @param {ZCF & { - * timerService: import('@agoric/time/src/types').TimerService, - * reservePublicFacet: AssetReservePublicFacet, - * priceAuthority: PriceAuthority - * }>} zcf + * @param {ZCF< + * GovernanceTerms & { + * timerService: import('@agoric/time/src/types').TimerService; + * reservePublicFacet: AssetReservePublicFacet; + * priceAuthority: PriceAuthority; + * } + * >} zcf * @param {{ - * initialPoserInvitation: Invitation, - * storageNode: StorageNode, - * marshaller: Marshaller + * initialPoserInvitation: Invitation; + * storageNode: StorageNode; + * marshaller: Marshaller; * }} privateArgs * @param {Baggage} baggage */ @@ -399,7 +404,12 @@ export const start = async (zcf, privateArgs, baggage) => { /** @type {MapStore} */ const books = provideDurableMapStore(baggage, 'auctionBooks'); - /** @type {MapStore, goal: Amount<'nat'>}>>} */ + /** + * @type {MapStore< + * Brand, + * { seat: ZCFSeat; amount: Amount<'nat'>; goal: Amount<'nat'> }[] + * >} + */ const deposits = provideDurableMapStore(baggage, 'deposits'); /** @type {MapStore} */ const brandToKeyword = provideDurableMapStore(baggage, 'brandToKeyword'); @@ -427,9 +437,11 @@ export const start = async (zcf, privateArgs, baggage) => { }); const scheduleKit = makeERecorderKit( E(privateArgs.storageNode).makeChildNode('schedule'), - /** @type {import('@agoric/zoe/src/contractSupport/recorder.js').TypedMatcher} */ ( - M.any() - ), + /** + * @type {import('@agoric/zoe/src/contractSupport/recorder.js').TypedMatcher< + * import('./scheduler.js').ScheduleNotification + * >} + */ (M.any()), ); /** @@ -578,7 +590,7 @@ export const start = async (zcf, privateArgs, baggage) => { /** * @param {ZCFSeat} zcfSeat - * @param {{ goal: Amount<'nat'>}} offerArgs + * @param {{ goal: Amount<'nat'> }} offerArgs */ const depositOfferHandler = (zcfSeat, offerArgs) => { const goalMatcher = M.or(undefined, { goal: bidAmountShape }); diff --git a/packages/inter-protocol/src/auction/offerBook.js b/packages/inter-protocol/src/auction/offerBook.js index 2f8adb60075..77a8eb46937 100644 --- a/packages/inter-protocol/src/auction/offerBook.js +++ b/packages/inter-protocol/src/auction/offerBook.js @@ -25,12 +25,14 @@ const nextSequenceNumber = () => { /** * @typedef {{ - * seat: ZCFSeat, - * wanted: Amount<'nat'>, - * seqNum: NatValue, - * received: Amount<'nat'>, - * } & {exitAfterBuy: boolean} & ({ bidScaling: Pattern, price: undefined } | { bidScaling: undefined, price: Ratio}) - * } BidderRecord + * seat: ZCFSeat; + * wanted: Amount<'nat'>; + * seqNum: NatValue; + * received: Amount<'nat'>; + * } & { exitAfterBuy: boolean } & ( + * | { bidScaling: Pattern; price: undefined } + * | { bidScaling: undefined; price: Ratio } + * )} BidderRecord */ const ScaledBidBookStateShape = harden({ @@ -41,7 +43,8 @@ const ScaledBidBookStateShape = harden({ /** * Prices in this book are expressed as percentage of the full oracle price - * snapshot taken when the auction started. .4 is 60% off. 1.1 is 10% above par. + * snapshot taken when the auction started. .4 is 60% off. 1.1 is 10% above + * par. * * @param {Baggage} baggage */ @@ -51,7 +54,6 @@ export const prepareScaledBidBook = baggage => 'scaledBidBook', undefined, /** - * * @param {Pattern} bidScalingPattern * @param {Brand} collateralBrand */ @@ -134,8 +136,8 @@ const PriceBookStateShape = harden({ }); /** - * Prices in this book are actual prices expressed in terms of bid amount - * and collateral amount. + * Prices in this book are actual prices expressed in terms of bid amount and + * collateral amount. * * @param {Baggage} baggage */ @@ -145,7 +147,6 @@ export const preparePriceBook = baggage => 'priceBook', undefined, /** - * * @param {Pattern} priceRatioPattern * @param {Brand} collateralBrand */ diff --git a/packages/inter-protocol/src/auction/params.js b/packages/inter-protocol/src/auction/params.js index 19a7b149491..3e6ab5e581c 100644 --- a/packages/inter-protocol/src/auction/params.js +++ b/packages/inter-protocol/src/auction/params.js @@ -13,7 +13,7 @@ import { M } from '@agoric/store'; export const InvitationShape = M.remotable('Invitation'); /** - * In seconds, how often to start an auction. The auction will start at + * In seconds, how often to start an auction. The auction will start at * AUCTION_START_DELAY seconds after a multiple of START_FREQUENCY, with the * price at STARTING_RATE_BP. Every CLOCK_STEP, the price will be reduced by * DISCOUNT_STEP_BP, as long as the rate is at or above LOWEST_RATE_BP, or until @@ -73,9 +73,7 @@ export const auctioneerParamTypes = harden({ * @property {import('@agoric/time/src/types').TimerBrand} TimerBrand */ -/** - * @param {AuctionParams} initial - */ +/** @param {AuctionParams} initial */ export const makeAuctioneerParams = ({ ElectorateInvitationAmount, StartFrequency, @@ -148,7 +146,7 @@ export const makeAuctioneerParamManager = (publisherKit, zcf, initial) => { harden(makeAuctioneerParamManager); /** - * @param {{storageNode: ERef, marshaller: ERef}} caps + * @param {{ storageNode: ERef; marshaller: ERef }} caps * @param {ERef} timer * @param {ERef} priceAuthority * @param {ERef} reservePublicFacet diff --git a/packages/inter-protocol/src/auction/scheduleMath.js b/packages/inter-protocol/src/auction/scheduleMath.js index 1d7832ae55c..f6e53602c47 100644 --- a/packages/inter-protocol/src/auction/scheduleMath.js +++ b/packages/inter-protocol/src/auction/scheduleMath.js @@ -18,17 +18,18 @@ const subtract1 = relTime => /** * The length of the auction has to be inferred from the governed params. * - * 1. The auction starts by offering collateral at a `StartingRate` (e.g., 105%) - * of the market price at auction start, and continues until it reaches - * (or would exceed on its next step) LowestRate (e.g., 65%) + * 1. The auction starts by offering collateral at a `StartingRate` (e.g., 105%) of + * the market price at auction start, and continues until it reaches (or + * would exceed on its next step) LowestRate (e.g., 65%) * 2. The offer price changes every `ClockStep` seconds - * 3. The offer price changes by `DiscountStep` amount (e.g., 5%) each step So - * it must run however many `ClockSteps` are required to get from - * `StartingRate` to `LowestRate` changing by `DiscountStep` each time. + * 3. The offer price changes by `DiscountStep` amount (e.g., 5%) each step So it + * must run however many `ClockSteps` are required to get from `StartingRate` + * to `LowestRate` changing by `DiscountStep` each time. * - * Therefore, the duration is `(StartingRate - LowestRate) / DiscountStep * ClockStep`. + * Therefore, the duration is `(StartingRate - LowestRate) / DiscountStep * + * ClockStep`. * - * Note that this is what's *scheduled*. More than one auction can be running + * Note that this is what's _scheduled_. More than one auction can be running * simultaneously, and some conditions can cause some of the auctions to stop * selling early (e.g. reaching their target debt to raise or selling all of * their collateral). @@ -108,10 +109,10 @@ export const computeRoundTiming = (params, baseTime) => { harden(computeRoundTiming); /** - * Calculate when the next descending step will start. If we're between - * auctions (i.e. liveSchedule is undefined), or the last step of the current - * auction has started, then it'll be nextSchedule.startTime. Otherwise, it's - * the start of the step following the current step. + * Calculate when the next descending step will start. If we're between auctions + * (i.e. liveSchedule is undefined), or the last step of the current auction has + * started, then it'll be nextSchedule.startTime. Otherwise, it's the start of + * the step following the current step. * * @param {import('./scheduler.js').Schedule | null} liveSchedule * @param {import('./scheduler.js').Schedule | null} nextSchedule @@ -143,7 +144,6 @@ export const nextDescendingStepTime = (liveSchedule, nextSchedule, now) => { harden(nextDescendingStepTime); /** - * * @param {Timestamp} time * @param {import('./scheduler.js').Schedule} schedule * @returns {'before' | 'during' | 'endExactly' | 'after'} diff --git a/packages/inter-protocol/src/auction/scheduler.js b/packages/inter-protocol/src/auction/scheduler.js index 2d3737b5384..c1d05b18b5f 100644 --- a/packages/inter-protocol/src/auction/scheduler.js +++ b/packages/inter-protocol/src/auction/scheduler.js @@ -20,21 +20,22 @@ const MAX_LATE_TICK = 300n; /** * @file The scheduler is presumed to be quiescent between auction rounds. Each - * Auction round consists of a sequence of steps with decreasing prices. There - * should always be a next schedule, but between rounds, liveSchedule is null. + * Auction round consists of a sequence of steps with decreasing prices. There + * should always be a next schedule, but between rounds, liveSchedule is + * null. * - * The lock period that the liquidators use might start before the previous - * round has finished, so we need to schedule the next round each time an - * auction starts. This means if the scheduling parameters change, it'll be a - * full cycle before we switch. Otherwise, the vaults wouldn't know when to - * start their lock period. If the lock period for the next auction hasn't - * started when each aucion ends, we recalculate it, in case the parameters have - * changed. + * The lock period that the liquidators use might start before the previous + * round has finished, so we need to schedule the next round each time an + * auction starts. This means if the scheduling parameters change, it'll be a + * full cycle before we switch. Otherwise, the vaults wouldn't know when to + * start their lock period. If the lock period for the next auction hasn't + * started when each aucion ends, we recalculate it, in case the parameters + * have changed. * - * If the clock skips forward (because of a chain halt, for instance), the - * scheduler will try to cleanly and quickly finish any round already in - * progress. It would take additional work on the manual timer to test this - * thoroughly. + * If the clock skips forward (because of a chain halt, for instance), the + * scheduler will try to cleanly and quickly finish any round already in + * progress. It would take additional work on the manual timer to test this + * thoroughly. */ const makeCancelToken = makeCancelTokenMaker('scheduler'); @@ -49,12 +50,11 @@ const makeCancelToken = makeCancelTokenMaker('scheduler'); /** * @typedef {object} ScheduleNotification - * - * @property {Timestamp | null} activeStartTime start time of current - * auction if auction is active + * @property {Timestamp | null} activeStartTime start time of current auction if + * auction is active * @property {Timestamp | null} nextStartTime start time of next auction - * @property {Timestamp | null} nextDescendingStepTime when the next descending step - * will take place + * @property {Timestamp | null} nextDescendingStepTime when the next descending + * step will take place */ const safelyComputeRoundTiming = (params, baseTime) => { @@ -92,7 +92,7 @@ export const makeScheduler = async ( */ let liveSchedule = null; - /** @returns {Promise<{ now: Timestamp, nextSchedule: Schedule | null }>} */ + /** @returns {Promise<{ now: Timestamp; nextSchedule: Schedule | null }>} */ const initializeNextSchedule = async () => { return E.when( // XXX manualTimer returns a bigint, not a timeRecord. @@ -114,7 +114,7 @@ export const makeScheduler = async ( const stepCancelToken = makeCancelToken(); - /** @type {typeof AuctionState[keyof typeof AuctionState]} */ + /** @type {(typeof AuctionState)[keyof typeof AuctionState]} */ let auctionState = AuctionState.WAITING; /** diff --git a/packages/inter-protocol/src/auction/sortedOffers.js b/packages/inter-protocol/src/auction/sortedOffers.js index 5a6de83eec1..031c73e3ebe 100644 --- a/packages/inter-protocol/src/auction/sortedOffers.js +++ b/packages/inter-protocol/src/auction/sortedOffers.js @@ -13,12 +13,13 @@ const { Fail } = assert; /** * @file we use a floating point representation of the price or rate as the - * first part of the key in the store. The second part is the sequence number of - * the bid, but it doesn't matter for sorting. When we retrieve multiple bids, - * it's only by bid value, so we don't care how the sequence numbers sort. + * first part of the key in the store. The second part is the sequence number + * of the bid, but it doesn't matter for sorting. When we retrieve multiple + * bids, it's only by bid value, so we don't care how the sequence numbers + * sort. * - * We take advantage of the fact that encodeData takes a passable and turns it - * into a sort key. Arrays of passable data sort like composite keys. + * We take advantage of the fact that encodeData takes a passable and turns it + * into a sort key. Arrays of passable data sort like composite keys. */ /** @@ -39,7 +40,7 @@ export const toPartialOfferKey = offerPrice => { * @param {Ratio} offerPrice IST/collateral * @param {bigint} sequenceNumber * @returns {string} lexically sortable string in which highest price is first, - * ties will be broken by sequenceNumber of offer + * ties will be broken by sequenceNumber of offer */ export const toPriceOfferKey = (offerPrice, sequenceNumber) => { mustMatch(offerPrice, RatioShape); @@ -107,7 +108,7 @@ export const toBidScalingComparator = rate => { * @param {Ratio} rate discount/markup rate expressed as a ratio IST/IST * @param {bigint} sequenceNumber * @returns {string} lexically sortable string in which highest price is first, - * ties will be broken by sequenceNumber of offer + * ties will be broken by sequenceNumber of offer */ export const toScaledRateOfferKey = (rate, sequenceNumber) => { mustMatch(rate, RatioShape); diff --git a/packages/inter-protocol/src/auction/util.js b/packages/inter-protocol/src/auction/util.js index ffa984fa552..2a844c6ea82 100644 --- a/packages/inter-protocol/src/auction/util.js +++ b/packages/inter-protocol/src/auction/util.js @@ -10,7 +10,7 @@ import { Far } from '@endo/marshal'; /** * Constants for Auction State. * - * @type {{ ACTIVE: 'active', WAITING: 'waiting' }} + * @type {{ ACTIVE: 'active'; WAITING: 'waiting' }} */ export const AuctionState = { ACTIVE: 'active', @@ -18,8 +18,8 @@ export const AuctionState = { }; /** - * @param {{ brand: Brand, value: Pattern }} numeratorAmountShape - * @param {{ brand: Brand, value: Pattern }} denominatorAmountShape + * @param {{ brand: Brand; value: Pattern }} numeratorAmountShape + * @param {{ brand: Brand; value: Pattern }} denominatorAmountShape */ export const makeBrandedRatioPattern = ( numeratorAmountShape, @@ -36,7 +36,7 @@ export const makeBrandedRatioPattern = ( * @param {Ratio} currentPrice * @param {Ratio} oraclePrice * @returns {boolean} TRUE iff the discount(/markup) applied to the price is - * higher than the quote. + * higher than the quote. */ export const isScaledBidPriceHigher = (bidScaling, currentPrice, oraclePrice) => ratioGTE(multiplyRatios(oraclePrice, bidScaling), currentPrice); diff --git a/packages/inter-protocol/src/clientSupport.js b/packages/inter-protocol/src/clientSupport.js index 9ab281765d2..304cf54173f 100644 --- a/packages/inter-protocol/src/clientSupport.js +++ b/packages/inter-protocol/src/clientSupport.js @@ -15,8 +15,16 @@ const scaleDecimals = num => BigInt(num * Number(COSMOS_UNIT)); /** * Give/want * - * @param {Pick} agoricNames - * @param {{ giveMinted?: number, wantMinted?: number } | { collateralBrandKey: string, giveCollateral?: number, wantCollateral?: number }} opts + * @param {Pick< + * import('@agoric/vats/tools/board-utils.js').AgoricNamesRemotes, + * 'brand' + * >} agoricNames + * @param {| { giveMinted?: number; wantMinted?: number } + * | { + * collateralBrandKey: string; + * giveCollateral?: number; + * wantCollateral?: number; + * }} opts * @returns {Proposal} */ const makeVaultProposal = ({ brand }, opts) => { @@ -54,8 +62,16 @@ const makeVaultProposal = ({ brand }, opts) => { }; /** - * @param {Pick} agoricNames - * @param {{ offerId: string, wantMinted: number, giveCollateral: number, collateralBrandKey: string }} opts + * @param {Pick< + * import('@agoric/vats/tools/board-utils.js').AgoricNamesRemotes, + * 'brand' + * >} agoricNames + * @param {{ + * offerId: string; + * wantMinted: number; + * giveCollateral: number; + * collateralBrandKey: string; + * }} opts * @returns {import('@agoric/smart-wallet/src/offers.js').OfferSpec} */ const makeOpenOffer = ({ brand }, opts) => { @@ -82,8 +98,18 @@ const makeOpenOffer = ({ brand }, opts) => { }; /** - * @param {Pick} agoricNames - * @param {{ offerId: string, collateralBrandKey?: string, giveCollateral?: number, wantCollateral?: number, giveMinted?: number, wantMinted?: number }} opts + * @param {Pick< + * import('@agoric/vats/tools/board-utils.js').AgoricNamesRemotes, + * 'brand' + * >} agoricNames + * @param {{ + * offerId: string; + * collateralBrandKey?: string; + * giveCollateral?: number; + * wantCollateral?: number; + * giveMinted?: number; + * wantMinted?: number; + * }} opts * @param {string} previousOffer * @returns {import('@agoric/smart-wallet/src/offers.js').OfferSpec} */ @@ -105,8 +131,15 @@ const makeAdjustOffer = ({ brand }, opts, previousOffer) => { }; /** - * @param {Pick} agoricNames - * @param {{ offerId: string, collateralBrandKey?: string, giveMinted: number }} opts + * @param {Pick< + * import('@agoric/vats/tools/board-utils.js').AgoricNamesRemotes, + * 'brand' + * >} agoricNames + * @param {{ + * offerId: string; + * collateralBrandKey?: string; + * giveMinted: number; + * }} opts * @param {string} previousOffer * @returns {import('@agoric/smart-wallet/src/offers.js').OfferSpec} */ @@ -126,7 +159,9 @@ const makeCloseOffer = ({ brand }, opts, previousOffer) => { /** * @param {string} vaultId - * @param {Promise} currentP + * @param {Promise< + * import('@agoric/smart-wallet/src/smartWallet').CurrentWalletRecord + * >} currentP * @returns {Promise} offer id in which the vault was made */ export const lookupOfferIdForVault = async (vaultId, currentP) => { @@ -141,8 +176,12 @@ export const lookupOfferIdForVault = async (vaultId, currentP) => { }; /** - * @param {Record} brands - * @param {({ wantMinted: number, giveMinted?: undefined } | { giveMinted: number, wantMinted?: undefined })} opts + * @param {Record< + * string, + * import('@agoric/internal/src/marshal.js').BoardRemote + * >} brands + * @param {| { wantMinted: number; giveMinted?: undefined } + * | { giveMinted: number; wantMinted?: undefined }} opts * @param {number} [fee] * @param {string} [anchor] */ @@ -170,10 +209,15 @@ const makePsmProposal = (brands, opts, fee = 0, anchor = 'AUSD') => { }; /** - * @param {Pick} agoricNames + * @param {Pick< + * import('@agoric/vats/tools/board-utils.js').AgoricNamesRemotes, + * 'brand' + * >} agoricNames * @param {Instance} instance - * @param {{ offerId: string, feePct?: number, pair: [string, string] } & - * ({ wantMinted: number } | { giveMinted: number })} opts + * @param {{ offerId: string; feePct?: number; pair: [string, string] } & ( + * | { wantMinted: number } + * | { giveMinted: number } + * )} opts * @returns {import('@agoric/smart-wallet/src/offers.js').OfferSpec} */ const makePsmSwapOffer = ({ brand }, instance, opts) => { @@ -205,7 +249,10 @@ const makePsmSwapOffer = ({ brand }, instance, opts) => { }; /** - * @param {Pick} agoricNames + * @param {Pick< + * import('@agoric/vats/tools/board-utils.js').AgoricNamesRemotes, + * 'brand' | 'vbankAsset' + * >} agoricNames * @param {(msg: string) => Error} makeError error constructor * @returns {(a: string) => Amount<'nat'>} */ @@ -243,17 +290,23 @@ export const makeParseAmount = }; /** - * @param {Pick} agoricNames + * @param {Pick< + * import('@agoric/vats/tools/board-utils.js').AgoricNamesRemotes, + * 'brand' | 'vbankAsset' + * >} agoricNames * @param {{ - * offerId: string, - * give: string, - * maxBuy: string, - * wantMinimum?: string, - * } & ({ - * price: number, - * } | { - * discount: number, // -1 to 1. e.g. 0.10 for 10% discount, -0.05 for 5% markup - * })} opts + * offerId: string; + * give: string; + * maxBuy: string; + * wantMinimum?: string; + * } & ( + * | { + * price: number; + * } + * | { + * discount: number; // -1 to 1. e.g. 0.10 for 10% discount, -0.05 for 5% markup + * } + * )} opts * @returns {import('@agoric/smart-wallet/src/offers.js').OfferSpec} */ const makeBidOffer = (agoricNames, opts) => { @@ -312,11 +365,14 @@ const makeBidOffer = (agoricNames, opts) => { }; /** - * @param {Pick} agoricNames + * @param {Pick< + * import('@agoric/vats/tools/board-utils.js').AgoricNamesRemotes, + * 'brand' + * >} agoricNames * @param {{ - * offerId: string, - * give: number, - * collateralBrandKey: string, + * offerId: string; + * give: number; + * collateralBrandKey: string; * }} opts * @returns {import('@agoric/smart-wallet/src/offers.js').OfferSpec} */ @@ -344,12 +400,11 @@ const makeAddCollateralOffer = ({ brand }, opts) => { }; /** - * * @param {unknown} _agoricNames * @param {{ - * offerId: string, - * roundId?: bigint, - * unitPrice: bigint, + * offerId: string; + * roundId?: bigint; + * unitPrice: bigint; * }} opts * @param {string} previousOffer * @returns {import('@agoric/smart-wallet/src/offers.js').OfferSpec} @@ -370,7 +425,10 @@ const makePushPriceOffer = (_agoricNames, opts, previousOffer) => { }; /** - * @satisfies {Record>} + * @satisfies {Record< + * string, + * Record + * >} */ export const Offers = { auction: { diff --git a/packages/inter-protocol/src/contractSupport.js b/packages/inter-protocol/src/contractSupport.js index 02565eefa52..59d7c89d5c3 100644 --- a/packages/inter-protocol/src/contractSupport.js +++ b/packages/inter-protocol/src/contractSupport.js @@ -13,11 +13,11 @@ export const ratioPattern = harden({ }); /** - * Apply a delta to the `base` Amount, where the delta is represented as - * an amount to gain and an amount to lose. Typically one of those will - * be empty because gain/loss comes from the give/want for a specific asset - * on a proposal. We use two Amounts because an Amount cannot represent - * a negative number (so we use a "loss" that will be subtracted). + * Apply a delta to the `base` Amount, where the delta is represented as an + * amount to gain and an amount to lose. Typically one of those will be empty + * because gain/loss comes from the give/want for a specific asset on a + * proposal. We use two Amounts because an Amount cannot represent a negative + * number (so we use a "loss" that will be subtracted). * * @template {AssetKind} K * @param {Amount} base diff --git a/packages/inter-protocol/src/econCommitteeCharter.js b/packages/inter-protocol/src/econCommitteeCharter.js index a8746348fd1..be0133e60b5 100644 --- a/packages/inter-protocol/src/econCommitteeCharter.js +++ b/packages/inter-protocol/src/econCommitteeCharter.js @@ -13,12 +13,10 @@ import { import { E } from '@endo/far'; /** - * @file - * - * This contract makes it possible for those who govern contracts to call for - * votes on changes. A more complete implementation would validate parameters, - * constrain deadlines and possibly split the ability to call for votes into - * separate capabilities for finer grain encapsulation. + * @file This contract makes it possible for those who govern contracts to call + * for votes on changes. A more complete implementation would validate + * parameters, constrain deadlines and possibly split the ability to call for + * votes into separate capabilities for finer grain encapsulation. */ export const INVITATION_MAKERS_DESC = 'charter member invitation'; @@ -28,7 +26,7 @@ export const INVITATION_MAKERS_DESC = 'charter member invitation'; * @property {bigint} deadline * @property {Instance} instance * @property {Record} params - * @property {{paramPath: { key: string }}} [path] + * @property {{ paramPath: { key: string } }} [path] */ const ParamChangesOfferArgsShape = M.splitRecord( { @@ -41,19 +39,21 @@ const ParamChangesOfferArgsShape = M.splitRecord( }, ); -/** - * A pattern for Zoe to check custom terms before `start()`ing the contract. - */ -export const customTermsShape = harden({ - binaryVoteCounterInstallation: InstallationShape, -}); +/** @type {ContractMeta} */ +export const meta = { + customTermsShape: { + binaryVoteCounterInstallation: InstallationShape, + }, + upgradability: 'canUpgrade', +}; +harden(meta); /** - * @param {ZCF<{binaryVoteCounterInstallation: Installation}>} zcf + * @param {ZCF<{ binaryVoteCounterInstallation: Installation }>} zcf * @param {undefined} privateArgs * @param {import('@agoric/vat-data').Baggage} baggage */ -export const prepare = async (zcf, privateArgs, baggage) => { +export const start = async (zcf, privateArgs, baggage) => { const { binaryVoteCounterInstallation: counter } = zcf.getTerms(); /** @type {MapStore>} */ const instanceToGovernor = provideDurableMapStore( @@ -184,3 +184,4 @@ export const prepare = async (zcf, privateArgs, baggage) => { return harden({ creatorFacet }); }; +harden(start); diff --git a/packages/inter-protocol/src/feeDistributor.js b/packages/inter-protocol/src/feeDistributor.js index abd8f07019d..7afb625adf3 100644 --- a/packages/inter-protocol/src/feeDistributor.js +++ b/packages/inter-protocol/src/feeDistributor.js @@ -9,23 +9,24 @@ import { KeywordShape } from '@agoric/zoe/src/typeGuards.js'; const KeywordSharesShape = M.recordOf(KeywordShape, M.nat()); -/** - * A pattern for Zoe to check custom terms before `start()`ing the contract. - */ -export const customTermsShape = harden({ - keywordShares: KeywordSharesShape, - timerService: M.eref(M.remotable('TimerService')), - collectionInterval: RelativeTimeShape, -}); +/** @type {ContractMeta} */ +export const meta = { + customTermsShape: { + keywordShares: KeywordSharesShape, + timerService: M.eref(M.remotable('TimerService')), + collectionInterval: RelativeTimeShape, + }, +}; +harden(meta); /** * @typedef {import('@agoric/time/src/types').RelativeTime} RelativeTime + * * @typedef {import('@agoric/time/src/types').TimerService} TimerService */ /** * @typedef {object} FeeCollector - * * @property {() => ERef>} collectFees */ @@ -65,10 +66,12 @@ export const makeContractFeeCollector = (zoe, creatorFacet) => { * for fees that have been collected to date and send that payment to the * depositFacet. * - * @param {() => Promise} schedulePayments - distribute to the destinations - * @param {ERef} timerService - timer that is used to schedule collections + * @param {() => Promise} schedulePayments - distribute to the + * destinations + * @param {ERef} timerService - timer that is used to schedule + * collections * @param {RelativeTime} [collectionInterval] - how often to collect fees in the - * `timerService` unit + * `timerService` unit */ export const startDistributing = ( schedulePayments, @@ -99,8 +102,9 @@ export const startDistributing = ( }; /** - * @typedef {{ pushPayment: (payment: Payment, issuer: ERef) => Promise}} FeeDestination - * + * @typedef {{ + * pushPayment: (payment: Payment, issuer: ERef) => Promise; + * }} FeeDestination * @param {Record>} [destinations] * @param {Record} [keywordShares] */ @@ -161,17 +165,16 @@ export const sharePayment = async ( .filter(([_, amt]) => !AmountMath.isEmpty(amt)); /** - * If the `sharedPayment[i]` payments that are sent to the fee - * `destination` with `pushPayment` never arrive, or never get deposited - * (or otherwise used up), then they remain in the recovery set of the - * `recoveryPurse`. The purpose of this, and of recovery sets in general, - * is to be able, in emergencies, to recover the assets of payments in flight - * that seem to be stuck. This is much like cancelling a check that may still - * be undeposited. + * If the `sharedPayment[i]` payments that are sent to the fee `destination` + * with `pushPayment` never arrive, or never get deposited (or otherwise used + * up), then they remain in the recovery set of the `recoveryPurse`. The + * purpose of this, and of recovery sets in general, is to be able, in + * emergencies, to recover the assets of payments in flight that seem to be + * stuck. This is much like cancelling a check that may still be undeposited. * * TODO: However, for this to be possible, the `recoveryPurse` holding that - * recovery set must remain accessible to someone that should legitimately - * be able to recover those payments. But this `recoveryPurse` is currently + * recovery set must remain accessible to someone that should legitimately be + * able to recover those payments. But this `recoveryPurse` is currently * dropped on the floor instead. */ const recoveryPurse = E(issuer).makeEmptyPurse(); @@ -193,7 +196,11 @@ export const sharePayment = async ( /** * @param {ERef>} feeIssuer - * @param {{ keywordShares: Record, timerService: ERef, collectionInterval: RelativeTime}} terms + * @param {{ + * keywordShares: Record; + * timerService: ERef; + * collectionInterval: RelativeTime; + * }} terms */ export const makeFeeDistributor = (feeIssuer, terms) => { const { timerService, collectionInterval } = terms; @@ -261,9 +268,7 @@ export const makeFeeDistributor = (feeIssuer, terms) => { return periodicCollector; }, - /** - * @param {import('@endo/far').EOnly} depositFacet - */ + /** @param {import('@endo/far').EOnly} depositFacet */ makeDepositFacetDestination: depositFacet => { return Far(`DepositFacetDestination`, { pushPayment: async (payment, _issuer) => { @@ -315,9 +320,7 @@ export const makeFeeDistributor = (feeIssuer, terms) => { }); }, - /** - * @param {Record>} newDestinations - */ + /** @param {Record>} newDestinations */ setDestinations: async newDestinations => { destinations = newDestinations; shareConfig = makeShareConfig(destinations, keywordShares); @@ -344,9 +347,7 @@ export const makeFeeDistributor = (feeIssuer, terms) => { /** @typedef {ReturnType['creatorFacet']} FeeDistributorCreatorFacet */ /** @typedef {ReturnType['publicFacet']} FeeDistributorPublicFacet */ -/** - * @param {ZCF[1]>} zcf - */ +/** @param {ZCF[1]>} zcf */ export const start = async zcf => { const feeIssuer = E(zcf.getZoeService()).getFeeIssuer(); return makeFeeDistributor(feeIssuer, zcf.getTerms()); diff --git a/packages/inter-protocol/src/interest-math.js b/packages/inter-protocol/src/interest-math.js index 6a03929ed28..0322e813ecd 100644 --- a/packages/inter-protocol/src/interest-math.js +++ b/packages/inter-protocol/src/interest-math.js @@ -9,39 +9,39 @@ import { } from '@agoric/zoe/src/contractSupport/ratio.js'; /** - * @param {Ratio} currentCompoundedStabilityFee as coefficient - * @param {Ratio} previousCompoundedStabilityFee as coefficient + * @param {Ratio} currentCompoundedInterest as coefficient + * @param {Ratio} previousCompoundedInterest as coefficient * @returns {Ratio} additional compounding since the previous */ const calculateRelativeCompounding = ( - currentCompoundedStabilityFee, - previousCompoundedStabilityFee, + currentCompoundedInterest, + previousCompoundedInterest, ) => { // divide compounded interest by the snapshot return multiplyRatios( - currentCompoundedStabilityFee, - invertRatio(previousCompoundedStabilityFee), + currentCompoundedInterest, + invertRatio(previousCompoundedInterest), ); }; /** * @param {Amount<'nat'>} debtSnapshot - * @param {Ratio} stabilityFeeSnapshot as coefficient - * @param {Ratio} currentCompoundedStabilityFee as coefficient + * @param {Ratio} interestSnapshot as coefficient + * @param {Ratio} currentCompoundedInterest as coefficient * @returns {Amount<'nat'>} */ export const calculateCurrentDebt = ( debtSnapshot, - stabilityFeeSnapshot, - currentCompoundedStabilityFee, + interestSnapshot, + currentCompoundedInterest, ) => { - if (ratiosSame(stabilityFeeSnapshot, currentCompoundedStabilityFee)) { + if (ratiosSame(interestSnapshot, currentCompoundedInterest)) { return debtSnapshot; } const interestSinceSnapshot = calculateRelativeCompounding( - currentCompoundedStabilityFee, - stabilityFeeSnapshot, + currentCompoundedInterest, + interestSnapshot, ); return multiplyBy(debtSnapshot, interestSinceSnapshot); diff --git a/packages/inter-protocol/src/interest.js b/packages/inter-protocol/src/interest.js index a7d3e2f6cc5..1edd1e851ad 100644 --- a/packages/inter-protocol/src/interest.js +++ b/packages/inter-protocol/src/interest.js @@ -12,6 +12,7 @@ import { TimeMath } from '@agoric/time'; /** * @typedef {import('@agoric/time/src/types').Timestamp} Timestamp + * * @typedef {import('@agoric/time/src/types').RelativeTime} RelativeTime */ @@ -20,9 +21,7 @@ const BASIS_POINTS = 10000; // single digit APR is less than a basis point per day. const LARGE_DENOMINATOR = BASIS_POINTS * BASIS_POINTS; -/** - * Number chosen from 6 digits for a basis point, doubled for multiplication. - */ +/** Number chosen from 6 digits for a basis point, doubled for multiplication. */ const COMPOUNDED_INTEREST_DENOMINATOR = 10n ** 20n; /** @@ -57,8 +56,8 @@ export const makeInterestCalculator = ( * @type {Calculate} */ const calculate = (debtStatus, currentTime) => { - const { newDebt, latestStabilityFeeUpdate } = debtStatus; - let newRecent = latestStabilityFeeUpdate; + const { newDebt, latestInterestUpdate } = debtStatus; + let newRecent = latestInterestUpdate; let growingInterest = debtStatus.interest; let growingDebt = newDebt; while ( @@ -78,7 +77,7 @@ export const makeInterestCalculator = ( growingDebt += newInterest; } return { - latestStabilityFeeUpdate: newRecent, + latestInterestUpdate: newRecent, interest: growingInterest, newDebt: growingDebt, }; @@ -93,9 +92,9 @@ export const makeInterestCalculator = ( * @type {Calculate} */ const calculateReportingPeriod = (debtStatus, currentTime) => { - const { latestStabilityFeeUpdate } = debtStatus; + const { latestInterestUpdate } = debtStatus; const overshoot = TimeMath.modRelRel( - TimeMath.subtractAbsAbs(currentTime, latestStabilityFeeUpdate), + TimeMath.subtractAbsAbs(currentTime, latestInterestUpdate), recordingPeriod, ); return calculate( @@ -111,20 +110,20 @@ export const makeInterestCalculator = ( }; /** - * compoundedStabilityFee *= (new debt) / (prior total debt) + * compoundedInterest *= (new debt) / (prior total debt) * - * @param {Ratio} priorCompoundedStabilityFee + * @param {Ratio} priorCompoundedInterest * @param {NatValue} priorDebt * @param {NatValue} newDebt */ -export const calculateCompoundedStabilityFee = ( - priorCompoundedStabilityFee, +export const calculateCompoundedInterest = ( + priorCompoundedInterest, priorDebt, newDebt, ) => { - const brand = priorCompoundedStabilityFee.numerator.brand; + const brand = priorCompoundedInterest.numerator.brand; const compounded = multiplyRatios( - priorCompoundedStabilityFee, + priorCompoundedInterest, makeRatio(newDebt, brand, priorDebt, brand), ); return quantize(compounded, COMPOUNDED_INTEREST_DENOMINATOR); @@ -144,29 +143,36 @@ const validatedBrand = (mint, debt) => { }; /** - * Charge interest accrued between `latestStabilityFeeUpdate` and `accruedUntil`. + * Charge interest accrued between `latestInterestUpdate` and `accruedUntil`. * * @param {{ - * mint: ZCFMint<'nat'>, - * mintAndTransferWithFee: MintAndTransfer, - * poolIncrementSeat: ZCFSeat, - * seatAllocationKeyword: Keyword }} powers + * mint: ZCFMint<'nat'>; + * mintAndTransferWithFee: MintAndTransfer; + * poolIncrementSeat: ZCFSeat; + * seatAllocationKeyword: Keyword; + * }} powers * @param {{ - * stabilityFee: Ratio, - * chargingPeriod: RelativeTime, - * recordingPeriod: RelativeTime}} params + * interestRate: Ratio; + * chargingPeriod: RelativeTime; + * recordingPeriod: RelativeTime; + * }} params * @param {{ - * latestStabilityFeeUpdate: Timestamp, - * compoundedStabilityFee: Ratio, - * totalDebt: Amount<'nat'>}} prior + * latestInterestUpdate: Timestamp; + * compoundedInterest: Ratio; + * totalDebt: Amount<'nat'>; + * }} prior * @param {Timestamp} accruedUntil - * @returns {{compoundedStabilityFee: Ratio, latestStabilityFeeUpdate: Timestamp, totalDebt: Amount<'nat'> }} + * @returns {{ + * compoundedInterest: Ratio; + * latestInterestUpdate: Timestamp; + * totalDebt: Amount<'nat'>; + * }} */ export const chargeInterest = (powers, params, prior, accruedUntil) => { const brand = validatedBrand(powers.mint, prior.totalDebt); const interestCalculator = makeInterestCalculator( - params.stabilityFee, + params.interestRate, params.chargingPeriod, params.recordingPeriod, ); @@ -174,7 +180,7 @@ export const chargeInterest = (powers, params, prior, accruedUntil) => { // calculate delta of accrued debt const debtStatus = interestCalculator.calculateReportingPeriod( { - latestStabilityFeeUpdate: prior.latestStabilityFeeUpdate, + latestInterestUpdate: prior.latestInterestUpdate, newDebt: prior.totalDebt.value, interest: 0n, // XXX this is always zero, doesn't need to be an option }, @@ -185,8 +191,8 @@ export const chargeInterest = (powers, params, prior, accruedUntil) => { // done if none if (interestAccrued === 0n) { return { - compoundedStabilityFee: prior.compoundedStabilityFee, - latestStabilityFeeUpdate: debtStatus.latestStabilityFeeUpdate, + compoundedInterest: prior.compoundedInterest, + latestInterestUpdate: debtStatus.latestInterestUpdate, totalDebt: prior.totalDebt, }; } @@ -196,8 +202,8 @@ export const chargeInterest = (powers, params, prior, accruedUntil) => { // testing with small numbers there's 5 digits of precision, and with large // numbers the ratios tend towards ample precision. // TODO adopt banker's rounding https://github.com/Agoric/agoric-sdk/issues/4573 - const compoundedStabilityFee = calculateCompoundedStabilityFee( - prior.compoundedStabilityFee, + const compoundedInterest = calculateCompoundedInterest( + prior.compoundedInterest, prior.totalDebt.value, debtStatus.newDebt, ); @@ -218,8 +224,8 @@ export const chargeInterest = (powers, params, prior, accruedUntil) => { ); return { - compoundedStabilityFee, - latestStabilityFeeUpdate: debtStatus.latestStabilityFeeUpdate, + compoundedInterest, + latestInterestUpdate: debtStatus.latestInterestUpdate, totalDebt, }; }; diff --git a/packages/inter-protocol/src/price/fluxAggregatorContract.js b/packages/inter-protocol/src/price/fluxAggregatorContract.js index f3103dfe47d..2ac33c6482d 100644 --- a/packages/inter-protocol/src/price/fluxAggregatorContract.js +++ b/packages/inter-protocol/src/price/fluxAggregatorContract.js @@ -18,48 +18,56 @@ import { prepareFluxAggregatorKit } from './fluxAggregatorKit.js'; const trace = makeTracer('FluxAgg', false); /** * @typedef {import('@agoric/vat-data').Baggage} Baggage + * * @typedef {import('@agoric/time/src/types').TimerService} TimerService */ -export const privateArgsShape = M.splitRecord( - harden({ - storageNode: StorageNodeShape, - marshaller: M.eref(M.remotable('marshaller')), - namesByAddressAdmin: M.any(), - }), - harden({ - // always optional. XXX some code is including the key, set to null - highPrioritySendersManager: M.or( - M.remotable('prioritySenders manager'), - M.null(), - ), - // only necessary on first invocation, not subsequent - initialPoserInvitation: M.remotable('Invitation'), - }), -); +/** @type {ContractMeta} */ +export const meta = { + privateArgsShape: M.splitRecord( + { + storageNode: StorageNodeShape, + marshaller: M.eref(M.remotable('marshaller')), + namesByAddressAdmin: M.any(), + }, + { + // always optional. XXX some code is including the key, set to null + highPrioritySendersManager: M.or( + M.remotable('prioritySenders manager'), + M.null(), + ), + // only necessary on first invocation, not subsequent + initialPoserInvitation: M.remotable('Invitation'), + }, + ), + upgradability: 'canUpgrade', +}; +harden(meta); /** - * PriceAuthority for their median. Unlike the simpler `priceAggregator.js`, this approximates - * the *Node Operator Aggregation* logic of [Chainlink price + * PriceAuthority for their median. Unlike the simpler `priceAggregator.js`, + * this approximates the _Node Operator Aggregation_ logic of [Chainlink price * feeds](https://blog.chain.link/levels-of-data-aggregation-in-chainlink-price-feeds/). * - * @param {ZCF, - * brandOut: Brand<'nat'>, - * description: string, - * unitAmountIn?: Amount<'nat'>, - * }>} zcf + * @param {ZCF< + * import('./fluxAggregatorKit.js').ChainlinkConfig & { + * timer: TimerService; + * brandIn: Brand<'nat'>; + * brandOut: Brand<'nat'>; + * description: string; + * unitAmountIn?: Amount<'nat'>; + * } + * >} zcf * @param {{ - * highPrioritySendersManager?: import('@agoric/internal/src/priority-senders.js').PrioritySendersManager, - * initialPoserInvitation: Invitation, - * marshaller: ERef, - * namesByAddressAdmin: ERef, - * storageNode: StorageNode, + * highPrioritySendersManager?: import('@agoric/internal/src/priority-senders.js').PrioritySendersManager; + * initialPoserInvitation: Invitation; + * marshaller: ERef; + * namesByAddressAdmin: ERef; + * storageNode: StorageNode; * }} privateArgs * @param {Baggage} baggage */ -export const prepare = async (zcf, privateArgs, baggage) => { +export const start = async (zcf, privateArgs, baggage) => { trace('prepare with baggage keys', [...baggage.keys()]); // xxx uses contract baggage as issuerBagage, assumes one issuer in this contract @@ -151,20 +159,22 @@ export const prepare = async (zcf, privateArgs, baggage) => { const governedApis = { /** - * Add the specified oracles. May partially fail, such that some oracles are added and others aren't. + * Add the specified oracles. May partially fail, such that some oracles are + * added and others aren't. * * @param {string[]} addrs - * @returns {Promise>>} + * @returns {Promise[]>} */ addOracles: addrs => { return Promise.allSettled(addrs.map(addOracle)); }, /** - * Remove the specified oracles. May partially fail, such that some oracles are removed and others aren't. - * If the oracle was never part of the set that's a PromiseRejectedResult + * Remove the specified oracles. May partially fail, such that some oracles + * are removed and others aren't. If the oracle was never part of the set + * that's a PromiseRejectedResult * * @param {string[]} addrs - * @returns {Promise>>} + * @returns {Promise[]>} */ removeOracles: addrs => { return Promise.allSettled(addrs.map(removeOracle)); @@ -183,4 +193,4 @@ export const prepare = async (zcf, privateArgs, baggage) => { publicFacet: faKit.public, }); }; -harden(prepare); +harden(start); diff --git a/packages/inter-protocol/src/price/fluxAggregatorKit.js b/packages/inter-protocol/src/price/fluxAggregatorKit.js index 81801710685..b1ab44f6d16 100644 --- a/packages/inter-protocol/src/price/fluxAggregatorKit.js +++ b/packages/inter-protocol/src/price/fluxAggregatorKit.js @@ -1,7 +1,7 @@ /** - * @file - * Adaptation of Chainlink algorithm to the Agoric platform. - * Modeled on https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.6/FluxAggregator.sol (version?) + * @file Adaptation of Chainlink algorithm to the Agoric platform. Modeled on + * https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.6/FluxAggregator.sol + * (version?) */ import { AmountMath } from '@agoric/ertp'; import { assertAllDefined, makeTracer } from '@agoric/internal'; @@ -24,10 +24,14 @@ export const INVITATION_MAKERS_DESC = 'oracle invitation'; /** * @typedef {import('@agoric/vat-data').Baggage} Baggage + * * @typedef {import('@agoric/time/src/types').Timestamp} Timestamp - * @typedef {import('@agoric/time/src/types').RelativeTime} RelativeTime - * // TODO: use RelativeTime, not RelativeTimeValue + * + * @typedef {import('@agoric/time/src/types').RelativeTime} RelativeTime // + * TODO: use RelativeTime, not RelativeTimeValue + * * @typedef {import('@agoric/time/src/types').RelativeTimeValue} RelativeTimeValue + * * @typedef {import('@agoric/time/src/types').TimerService} TimerService */ @@ -49,30 +53,35 @@ const priceDescriptionFromQuote = quote => quote.quoteAmount.value[0]; * @typedef {object} ChainlinkConfig * @property {number} maxSubmissionCount * @property {number} minSubmissionCount - * @property {bigint} restartDelay the number of rounds an Oracle has to wait before they can initiate a round - * @property {number} minSubmissionValue an immutable check for a lower bound of what - * submission values are accepted from an oracle - * @property {number} maxSubmissionValue an immutable check for an upper bound of what - * submission values are accepted from an oracle - * @property {number} timeout the number of seconds after the previous round that - * allowed to lapse before allowing an oracle to skip an unfinished round + * @property {bigint} restartDelay the number of rounds an Oracle has to wait + * before they can initiate a round + * @property {number} minSubmissionValue an immutable check for a lower bound of + * what submission values are accepted from an oracle + * @property {number} maxSubmissionValue an immutable check for an upper bound + * of what submission values are accepted from an oracle + * @property {number} timeout the number of seconds after the previous round + * that allowed to lapse before allowing an oracle to skip an unfinished + * round */ /** - * Returns a maker for a single durable FluxAggregatorKit, closed over the prepare() arguments. + * Returns a maker for a single durable FluxAggregatorKit, closed over the + * prepare() arguments. * * The kit aggregates price inputs to produce a PriceAuthority. Unlike the - * simpler `priceAggregator.js`, this approximates the *Node Operator - * Aggregation* logic of [Chainlink price + * simpler `priceAggregator.js`, this approximates the _Node Operator + * Aggregation_ logic of [Chainlink price * feeds](https://blog.chain.link/levels-of-data-aggregation-in-chainlink-price-feeds/). * * @param {Baggage} baggage - * @param {ZCF, - * brandOut: Brand<'nat'>, - * unitAmountIn?: Amount<'nat'>, - * }>} zcf + * @param {ZCF< + * ChainlinkConfig & { + * timer: TimerService; + * brandIn: Brand<'nat'>; + * brandOut: Brand<'nat'>; + * unitAmountIn?: Amount<'nat'>; + * } + * >} zcf * @param {TimerService} timerPresence * @param {import('./roundsManager.js').QuoteKit} quoteKit * @param {StorageNode} storageNode @@ -128,7 +137,10 @@ export const prepareFluxAggregatorKit = async ( // end of maker definitions ///////////////////////////////// const { answerKit, latestRoundKit, priceKit } = await provideAll(baggage, { - /** This is just a signal that there's a new answer, which is read from `lastValueOutForUnitIn` */ + /** + * This is just a signal that there's a new answer, which is read from + * `lastValueOutForUnitIn` + */ answerKit: () => makeDurablePublishKit(), /** For publishing priceAuthority values to off-chain storage */ priceKit: () => @@ -142,9 +154,11 @@ export const prepareFluxAggregatorKit = async ( E.when(E(storageNode).makeChildNode('latestRound'), node => makeRecorderKit( node, - /** @type {import('@agoric/zoe/src/contractSupport/recorder.js').TypedMatcher} */ ( - M.any() - ), + /** + * @type {import('@agoric/zoe/src/contractSupport/recorder.js').TypedMatcher< + * import('./roundsManager.js').LatestRound + * >} + */ (M.any()), ), ), }); @@ -223,9 +237,9 @@ export const prepareFluxAggregatorKit = async ( * An "oracle invitation" is an invitation to be able to submit data to * include in the priceAggregator's results. * - * The offer result from this invitation is a OracleAdmin, which can be used - * directly to manage the price submissions as well as to terminate the - * relationship. + * The offer result from this invitation is a OracleAdmin, which can be + * used directly to manage the price submissions as well as to terminate + * the relationship. * * @param {string} oracleId unique per contract instance */ @@ -235,8 +249,8 @@ export const prepareFluxAggregatorKit = async ( /** * If custom arguments are supplied to the `zoe.offer` call, they can * indicate an OraclePriceSubmission notifier and a corresponding - * `shiftValueOut` that should be adapted as part of the priceAuthority's - * reported data. + * `shiftValueOut` that should be adapted as part of the + * priceAuthority's reported data. * * @param {ZCFSeat} seat */ @@ -299,8 +313,9 @@ export const prepareFluxAggregatorKit = async ( }, /** - * a method to provide all current info oracleStatuses need. Intended only - * only to be callable by oracleStatuses. Not for use by contracts to read state. + * a method to provide all current info oracleStatuses need. Intended + * only only to be callable by oracleStatuses. Not for use by contracts + * to read state. * * @param {string} oracleId * @param {bigint} queriedRoundId diff --git a/packages/inter-protocol/src/price/priceOracleKit.js b/packages/inter-protocol/src/price/priceOracleKit.js index 567f8cb0f8b..7622fe50ef2 100644 --- a/packages/inter-protocol/src/price/priceOracleKit.js +++ b/packages/inter-protocol/src/price/priceOracleKit.js @@ -8,14 +8,17 @@ export const INVITATION_MAKERS_DESC = 'oracle invitation'; /** * @typedef {{ - * oracleId: string, - * roundPowers: { handlePush: (status: OracleStatus, result: import('./roundsManager.js').PriceRound) => Promise } + * oracleId: string; + * roundPowers: { + * handlePush: ( + * status: OracleStatus, + * result: import('./roundsManager.js').PriceRound, + * ) => Promise; + * }; * }} HeldParams */ -/** - * @typedef {{ roundId: number | undefined, unitPrice: NatValue }} PriceDatum - */ +/** @typedef {{ roundId: number | undefined; unitPrice: NatValue }} PriceDatum */ /** * @typedef {object} OracleStatus @@ -26,11 +29,9 @@ export const INVITATION_MAKERS_DESC = 'oracle invitation'; * @property {string} oracleId */ /** - * @typedef {Readonly} ImmutableState + * @typedef {Readonly} ImmutableState * - * @typedef {OracleStatus & { - * }} MutableState + * @typedef {OracleStatus & {}} MutableState */ /** @typedef {ImmutableState & MutableState} State */ @@ -106,10 +107,7 @@ export const prepareOracleAdminKit = baggage => state.lastStartedRound = result.lastStartedRound; state.latestSubmission = result.latestSubmission; }, - /** - * - * @returns {OracleStatus} - */ + /** @returns {OracleStatus} */ getStatus() { const { state } = this; return { diff --git a/packages/inter-protocol/src/price/roundsManager.js b/packages/inter-protocol/src/price/roundsManager.js index 7e147d57ee3..881d4831d29 100644 --- a/packages/inter-protocol/src/price/roundsManager.js +++ b/packages/inter-protocol/src/price/roundsManager.js @@ -17,6 +17,7 @@ const { add, subtract, multiply, floorDivide, ceilDivide, isGTE } = natSafeMath; /** @typedef {import('./priceOracleKit.js').OracleStatus} OracleStatus */ /** * @typedef {import('@agoric/time/src/types').Timestamp} Timestamp + * * @typedef {import('@agoric/time/src/types').TimerService} TimerService */ @@ -28,34 +29,30 @@ export const ROUND_MAX = BigInt(2 ** 32 - 1); const trace = makeTracer('RoundsM', false); -/** - * @param {bigint} roundId - */ +/** @param {bigint} roundId */ const validRoundId = roundId => { return roundId <= ROUND_MAX; }; /** - * @typedef {{ roundId: number | undefined, unitPrice: NatValue }} PriceRound + * @typedef {{ roundId: number | undefined; unitPrice: NatValue }} PriceRound * - * @typedef {Pick & { startedBy: string }} LatestRound + * @typedef {Pick & { startedBy: string }} LatestRound */ -/** - * @typedef {Round & {roundId: bigint}} RoundData - */ +/** @typedef {Round & { roundId: bigint }} RoundData */ /** * @typedef {object} Round * @property {bigint} answer the answer for the given round - * @property {Timestamp} startedAt the timestamp when the round was started. This is 0 - * if the round hasn't been started yet. - * @property {Timestamp} updatedAt the timestamp when the round last was updated (i.e. - * answer was last computed) - * @property {bigint} answeredInRound the round ID of the round in which the answer - * was computed. answeredInRound may be smaller than roundId when the round - * timed out. answeredInRound is equal to roundId when the round didn't time out - * and was completed regularly. + * @property {Timestamp} startedAt the timestamp when the round was started. + * This is 0 if the round hasn't been started yet. + * @property {Timestamp} updatedAt the timestamp when the round last was updated + * (i.e. answer was last computed) + * @property {bigint} answeredInRound the round ID of the round in which the + * answer was computed. answeredInRound may be smaller than roundId when the + * round timed out. answeredInRound is equal to roundId when the round didn't + * time out and was completed regularly. */ /** @@ -66,29 +63,31 @@ const validRoundId = roundId => { * @property {number} roundTimeout */ -/** - * @typedef {IssuerKit<'set'>} QuoteKit - */ +/** @typedef {IssuerKit<'set'>} QuoteKit */ /** - * @typedef {Readonly, - * brandIn: Brand<'nat'>, - * brandOut: Brand<'nat'>, - * latestRoundPublisher: import('@agoric/zoe/src/contractSupport/recorder.js').Recorder, - * timerPresence: TimerService, - * }>} HeldParams + * @typedef {Readonly< + * import('./fluxAggregatorKit.js').ChainlinkConfig & { + * quoteKit: QuoteKit; + * answerPublisher: Publisher; + * brandIn: Brand<'nat'>; + * brandOut: Brand<'nat'>; + * latestRoundPublisher: import('@agoric/zoe/src/contractSupport/recorder.js').Recorder; + * timerPresence: TimerService; + * } + * >} HeldParams * - * @typedef {Readonly, - * rounds: MapStore, - * unitIn: bigint, - * }>} ImmutableState + * @typedef {Readonly< + * HeldParams & { + * details: MapStore; + * rounds: MapStore; + * unitIn: bigint; + * } + * >} ImmutableState * * @typedef {{ - * lastValueOutForUnitIn: bigint?, - * reportingRoundId: bigint, + * lastValueOutForUnitIn: bigint?; + * reportingRoundId: bigint; * }} MutableState */ /** @typedef {ImmutableState & MutableState} State */ @@ -116,7 +115,11 @@ export const prepareRoundsManagerKit = baggage => handlePush: M.call(M.record(), M.record()).returns(M.promise()), }), }, - /** @type {(opts: HeldParams & { unitAmountIn: Amount<'nat'> }) => State} */ + /** + * @type {( + * opts: HeldParams & { unitAmountIn: Amount<'nat'> }, + * ) => State} + */ ({ // ChainlinkConfig maxSubmissionCount, @@ -170,9 +173,7 @@ export const prepareRoundsManagerKit = baggage => }, { helper: { - /** - * @param {bigint} roundId - */ + /** @param {bigint} roundId */ acceptingSubmissions(roundId) { const { details } = this.state; return ( @@ -190,9 +191,7 @@ export const prepareRoundsManagerKit = baggage => return roundId > add(lastStarted, restartDelay) || lastStarted === 0n; }, - /** - * @param {bigint} roundId - */ + /** @param {bigint} roundId */ deleteRoundDetails(roundId) { const { details } = this.state; const roundDetails = details.get(roundId); @@ -201,9 +200,7 @@ export const prepareRoundsManagerKit = baggage => details.delete(roundId); }, - /** - * @param {bigint} roundId - */ + /** @param {bigint} roundId */ isNextRound(roundId) { const { reportingRoundId } = this.state; return roundId === add(reportingRoundId, 1); @@ -421,7 +418,7 @@ export const prepareRoundsManagerKit = baggage => * @param {OracleStatus} status * @param {bigint} roundId * @param {Timestamp} blockTimestamp - * @returns {string?} error message, if there is one + * @returns {string | null} error message, if there is one */ validateOracleRound(status, roundId, blockTimestamp) { const { reportingRoundId } = this.state; @@ -449,10 +446,7 @@ export const prepareRoundsManagerKit = baggage => }, }, contract: { - /** - * - * @param {PriceQuoteValue} quote - */ + /** @param {PriceQuoteValue} quote */ async authenticateQuote(quote) { const { quoteKit } = this.state; const quoteAmount = AmountMath.make(quoteKit.brand, harden(quote)); @@ -470,9 +464,7 @@ export const prepareRoundsManagerKit = baggage => const { brandIn, brandOut, timerPresence } = state; const { contract } = this.facets; - /** - * @param {PriceQuery} priceQuery - */ + /** @param {PriceQuery} priceQuery */ return Far('createQuote', priceQuery => { const { lastValueOutForUnitIn, unitIn } = state; @@ -486,9 +478,7 @@ export const prepareRoundsManagerKit = baggage => return undefined; } - /** - * @param {Amount<'nat'>} amountIn the given amountIn - */ + /** @param {Amount<'nat'>} amountIn the given amountIn */ const calcAmountOut = amountIn => { const valueIn = AmountMath.getValue(brandIn, amountIn); return AmountMath.make( @@ -497,9 +487,7 @@ export const prepareRoundsManagerKit = baggage => ); }; - /** - * @param {Amount<'nat'>} amountOut the wanted amountOut - */ + /** @param {Amount<'nat'>} amountOut the wanted amountOut */ const calcAmountIn = amountOut => { const valueOut = AmountMath.getValue(brandOut, amountOut); return AmountMath.make( @@ -564,9 +552,8 @@ export const prepareRoundsManagerKit = baggage => }, /** - * consumers are encouraged to check - * that they're receiving fresh data by inspecting the updatedAt and - * answeredInRound return values. + * consumers are encouraged to check that they're receiving fresh data + * by inspecting the updatedAt and answeredInRound return values. * * @param {bigint | number} roundIdRaw * @returns {Promise} @@ -603,8 +590,9 @@ export const prepareRoundsManagerKit = baggage => }, /** - * a method to provide all current info oracleStatuses need. Intended only - * only to be callable by oracleStatuses. Not for use by contracts to read state. + * a method to provide all current info oracleStatuses need. Intended + * only only to be callable by oracleStatuses. Not for use by contracts + * to read state. * * @param {OracleStatus} status * @param {Timestamp} blockTimestamp diff --git a/packages/inter-protocol/src/proposals/addAssetToVault.js b/packages/inter-protocol/src/proposals/addAssetToVault.js index de26cec8903..a0dc7415440 100644 --- a/packages/inter-protocol/src/proposals/addAssetToVault.js +++ b/packages/inter-protocol/src/proposals/addAssetToVault.js @@ -212,7 +212,7 @@ export const registerScaledPriceAuthority = async ( * @param {object} config.options * @param {InterchainAssetOptions} config.options.interchainAssetOptions * @param {bigint | number | string} config.options.debtLimitValue - * @param {bigint} config.options.stabilityFeeValue + * @param {bigint} config.options.interestRateValue */ export const addAssetToVault = async ( { @@ -228,7 +228,7 @@ export const addAssetToVault = async ( debtLimitValue = 1_000n * 1_000_000n, // Default to a safe value. Production will likely set this through governance. // Allow setting through bootstrap to simplify testing. - stabilityFeeValue = 1n, + interestRateValue = 1n, interchainAssetOptions, }, }, @@ -250,7 +250,7 @@ export const addAssetToVault = async ( const vaultFactoryCreator = E.get(vaultFactoryKit).creatorFacet; await E(vaultFactoryCreator).addVaultType(interchainIssuer, oracleBrand, { debtLimit: AmountMath.make(stable, BigInt(debtLimitValue)), - stabilityFee: makeRatio(stabilityFeeValue, stable), + interestRate: makeRatio(interestRateValue, stable), // The rest of these we use safe defaults. // In production they will be governed by the Econ Committee. // Product deployments are also expected to have a low debtLimitValue at the outset, @@ -268,7 +268,7 @@ export const getManifestForAddAssetToVault = ( { restoreRef }, { debtLimitValue, - stabilityFeeValue, + interestRateValue, interchainAssetOptions, scaledPriceAuthorityRef, }, @@ -341,7 +341,7 @@ export const getManifestForAddAssetToVault = ( options: { debtLimitValue, interchainAssetOptions, - stabilityFeeValue, + interestRateValue, }, }; }; diff --git a/packages/inter-protocol/src/proposals/committee-proposal.js b/packages/inter-protocol/src/proposals/committee-proposal.js index 0e0ec0e7512..ea61923f639 100644 --- a/packages/inter-protocol/src/proposals/committee-proposal.js +++ b/packages/inter-protocol/src/proposals/committee-proposal.js @@ -4,14 +4,14 @@ import { reserveThenDeposit } from './utils.js'; const { values } = Object; -/** @type { (xs: X[], ys: Y[]) => [X, Y][]} */ +/** @type {(xs: X[], ys: Y[]) => [X, Y][]} */ const zip = (xs, ys) => xs.map((x, i) => [x, ys[i]]); const EC_HIGH_PRIORITY_SENDERS_NAMESPACE = 'economicCommittee'; /** * @param {import('./econ-behaviors').EconomyBootstrapPowers} powers - * @param {{ options: { voterAddresses: Record }}} param1 + * @param {{ options: { voterAddresses: Record } }} param1 */ export const inviteCommitteeMembers = async ( { @@ -26,9 +26,7 @@ export const inviteCommitteeMembers = async ( const highPrioritySendersManager = await consume.highPrioritySendersManager; - /** - * @param {[string, Promise][]} addrInvitations - */ + /** @param {[string, Promise][]} addrInvitations */ const distributeInvitations = async addrInvitations => { await Promise.all( addrInvitations.map(async ([addr, invitationP]) => { @@ -53,9 +51,7 @@ export const inviteCommitteeMembers = async ( harden(inviteCommitteeMembers); -/** - * @param {import('./econ-behaviors').EconomyBootstrapPowers} powers - */ +/** @param {import('./econ-behaviors').EconomyBootstrapPowers} powers */ export const startEconCharter = async ({ consume: { zoe }, produce: { econCharterKit }, @@ -131,7 +127,7 @@ harden(addGovernorsToEconCharter); /** * @param {import('./econ-behaviors').EconomyBootstrapPowers} powers - * @param {{ options: { voterAddresses: Record }}} param1 + * @param {{ options: { voterAddresses: Record } }} param1 */ export const inviteToEconCharter = async ( { consume: { namesByAddressAdmin, econCharterKit } }, diff --git a/packages/inter-protocol/src/proposals/core-proposal.js b/packages/inter-protocol/src/proposals/core-proposal.js index a02c2d2731c..c2749040aa6 100644 --- a/packages/inter-protocol/src/proposals/core-proposal.js +++ b/packages/inter-protocol/src/proposals/core-proposal.js @@ -15,9 +15,7 @@ export * from './startEconCommittee.js'; // eslint-disable-line import/export // require updating a lot of tests. So for now, we just // grab the kits afterward and store them. -/** - * @param {import('./econ-behaviors.js').EconomyBootstrapPowers} powers - */ +/** @param {import('./econ-behaviors.js').EconomyBootstrapPowers} powers */ export const storeInterContractStartKits = async ({ consume: { contractKits, @@ -31,8 +29,8 @@ export const storeInterContractStartKits = async ({ }, }) => { /** - * @param {Promise>} storeP - * @param {Promise<{instance: Instance}>[]} kitPs + * @param {Promise>} storeP + * @param {Promise<{ instance: Instance }>[]} kitPs */ const storeAll = async (storeP, kitPs) => { const store = await storeP; diff --git a/packages/inter-protocol/src/proposals/econ-behaviors.js b/packages/inter-protocol/src/proposals/econ-behaviors.js index 6ba0ed21fc1..85464dc87f1 100644 --- a/packages/inter-protocol/src/proposals/econ-behaviors.js +++ b/packages/inter-protocol/src/proposals/econ-behaviors.js @@ -22,7 +22,9 @@ export const SECONDS_PER_WEEK = 7n * SECONDS_PER_DAY; /** * @typedef {import('../vaultFactory/vaultFactory.js').VaultFactoryContract['publicFacet']} VaultFactoryPublicFacet + * * @typedef {import('../auction/auctioneer.js').AuctioneerPublicFacet} AuctioneerPublicFacet + * * @typedef {import('../auction/auctioneer.js').AuctioneerCreatorFacet} AuctioneerCreatorFacet */ @@ -31,43 +33,65 @@ export const SECONDS_PER_WEEK = 7n * SECONDS_PER_DAY; * @property {string} label * @property {Instance} psm * @property {Instance} psmGovernor - * @property {Awaited>['creatorFacet']['getLimitedCreatorFacet']>>} psmCreatorFacet - * @property {GovernorCreatorFacet} psmGovernorCreatorFacet + * @property {Awaited< + * ReturnType< + * Awaited< + * ReturnType + * >['creatorFacet']['getLimitedCreatorFacet'] + * > + * >} psmCreatorFacet + * @property {GovernorCreatorFacet} psmGovernorCreatorFacet * @property {AdminFacet} psmAdminFacet */ -/** - * @typedef {GovernanceFacetKit} AuctioneerKit - */ +/** @typedef {GovernanceFacetKit} AuctioneerKit */ /** - * @typedef { WellKnownSpaces & ChainBootstrapSpace & EconomyBootstrapSpace - * } EconomyBootstrapPowers + * @typedef {WellKnownSpaces & ChainBootstrapSpace & EconomyBootstrapSpace} EconomyBootstrapPowers + * * @typedef {PromiseSpaceOf<{ - * economicCommitteeKit: CommitteeStartResult, - * economicCommitteeCreatorFacet: import('@agoric/governance/src/committee.js').CommitteeElectorateCreatorFacet, - * feeDistributorKit: StartedInstanceKit, - * periodicFeeCollectors: MapStore, - * psmKit: MapStore, - * anchorBalancePayments: MapStore>, - * econCharterKit: EconCharterStartResult, - * reserveKit: GovernanceFacetKit, - * vaultFactoryKit: GovernanceFacetKit, - * auctioneerKit: AuctioneerKit, - * minInitialDebt: NatValue, + * economicCommitteeKit: CommitteeStartResult; + * economicCommitteeCreatorFacet: import('@agoric/governance/src/committee.js').CommitteeElectorateCreatorFacet; + * feeDistributorKit: StartedInstanceKit< + * typeof import('../feeDistributor.js').start + * >; + * periodicFeeCollectors: MapStore< + * number, + * import('../feeDistributor.js').PeriodicFeeCollector + * >; + * psmKit: MapStore; + * anchorBalancePayments: MapStore>; + * econCharterKit: EconCharterStartResult; + * reserveKit: GovernanceFacetKit< + * import('../reserve/assetReserve.js')['start'] + * >; + * vaultFactoryKit: GovernanceFacetKit< + * import('../vaultFactory/vaultFactory.js')['start'] + * >; + * auctioneerKit: AuctioneerKit; + * minInitialDebt: NatValue; * }>} EconomyBootstrapSpace */ -/** @typedef {import('@agoric/zoe/src/zoeService/utils.js').StartedInstanceKit} EconCharterStartResult */ -/** @typedef {import('@agoric/zoe/src/zoeService/utils.js').StartedInstanceKit} CommitteeStartResult */ +/** + * @typedef {import('@agoric/zoe/src/zoeService/utils.js').StartedInstanceKit< + * import('../econCommitteeCharter')['start'] + * >} EconCharterStartResult + */ +/** + * @typedef {import('@agoric/zoe/src/zoeService/utils.js').StartedInstanceKit< + * import('@agoric/governance/src/committee.js')['start'] + * >} CommitteeStartResult + */ /** * @file A collection of productions, each of which declares inputs and outputs. - * Each function is passed a set of powers for reading from and writing to the vat config. + * Each function is passed a set of powers for reading from and writing to the + * vat config. * - * Each of the things they produce they're responsible for resolving or setting. + * Each of the things they produce they're responsible for resolving or setting. * - * In production called by @agoric/vats to bootstrap. + * In production called by @agoric/vats to bootstrap. */ /** @param {EconomyBootstrapPowers} powers */ @@ -299,7 +323,11 @@ export const startVaultFactory = async ( }), ); - /** @type {GovernorStartedInstallationKit} */ + /** + * @type {GovernorStartedInstallationKit< + * typeof vaultFactoryInstallation + * >} + */ const g = await E(consume.zoe).startInstance( contractGovernorInstallation, undefined, @@ -348,8 +376,8 @@ export const startVaultFactory = async ( }; /** - * Grant access to the VaultFactory creatorFacet - * to up to one user based on address. + * Grant access to the VaultFactory creatorFacet to up to one user based on + * address. * * @param {EconomyBootstrapPowers} powers * @param {object} [root0] @@ -435,9 +463,8 @@ export const startRewardDistributor = async ({ /** * @type {Awaited< - * ReturnType> - * & { adminFacet: AdminFacet, instance: Instance } - * } + * ReturnType + * > & { adminFacet: AdminFacet; instance: Instance }} */ const instanceKit = await E(zoe).startInstance( feeDistributor, diff --git a/packages/inter-protocol/src/proposals/price-feed-proposal.js b/packages/inter-protocol/src/proposals/price-feed-proposal.js index 751d3c811c8..4a38110d6b2 100644 --- a/packages/inter-protocol/src/proposals/price-feed-proposal.js +++ b/packages/inter-protocol/src/proposals/price-feed-proposal.js @@ -23,12 +23,12 @@ export const instanceNameFor = (inBrandName, outBrandName) => /** * @typedef {{ - * brandIn?: ERef | undefined>, - * brandOut?: ERef | undefined>, - * IN_BRAND_NAME: string, - * IN_BRAND_DECIMALS: string, - * OUT_BRAND_NAME: string, - * OUT_BRAND_DECIMALS: string, + * brandIn?: ERef | undefined>; + * brandOut?: ERef | undefined>; + * IN_BRAND_NAME: string; + * IN_BRAND_DECIMALS: string; + * OUT_BRAND_NAME: string; + * OUT_BRAND_DECIMALS: string; * }} PriceFeedOptions */ @@ -36,7 +36,7 @@ export const instanceNameFor = (inBrandName, outBrandName) => * Create inert brands (no mint or issuer) referred to by price oracles. * * @param {ChainBootstrapSpace & NamedVatPowers} space - * @param {{options: {priceFeedOptions: PriceFeedOptions}}} opt + * @param {{ options: { priceFeedOptions: PriceFeedOptions } }} opt * @returns {Promise<[Brand<'nat'>, Brand<'nat'>]>} */ export const ensureOracleBrands = async ( @@ -81,7 +81,17 @@ export const ensureOracleBrands = async ( /** * @param {ChainBootstrapSpace} powers - * @param {{options: {priceFeedOptions: {AGORIC_INSTANCE_NAME: string, oracleAddresses: string[], contractTerms: import('@agoric/inter-protocol/src/price/fluxAggregatorKit.js').ChainlinkConfig, IN_BRAND_NAME: string, OUT_BRAND_NAME: string}}}} config + * @param {{ + * options: { + * priceFeedOptions: { + * AGORIC_INSTANCE_NAME: string; + * oracleAddresses: string[]; + * contractTerms: import('@agoric/inter-protocol/src/price/fluxAggregatorKit.js').ChainlinkConfig; + * IN_BRAND_NAME: string; + * OUT_BRAND_NAME: string; + * }; + * }; + * }} config */ export const createPriceFeed = async ( { @@ -120,9 +130,17 @@ export const createPriceFeed = async ( const timer = await chainTimerService; /** - * Values come from economy-template.json, which at this writing had IN:ATOM, OUT:USD + * Values come from economy-template.json, which at this writing had IN:ATOM, + * OUT:USD * - * @type {[[Brand<'nat'>, Brand<'nat'>], [Installation]]} + * @type {[ + * [Brand<'nat'>, Brand<'nat'>], + * [ + * Installation< + * import('@agoric/inter-protocol/src/price/fluxAggregatorContract.js')['start] + * >, + * ], + * ]} */ const [[brandIn, brandOut], [priceAggregator]] = await Promise.all([ reserveThenGetNames(E(agoricNamesAdmin).lookupAdmin('oracleBrand'), [ @@ -215,7 +233,8 @@ export const createPriceFeed = async ( const t = 'priceFeed'; /** - * Add a price feed to a running chain, returning the manifest, installations, and options. + * Add a price feed to a running chain, returning the manifest, installations, + * and options. * * @param {object} utils * @param {(ref: unknown) => Promise} [utils.restoreRef] diff --git a/packages/inter-protocol/src/proposals/startPSM.js b/packages/inter-protocol/src/proposals/startPSM.js index d5cd008609d..5c1bee87e60 100644 --- a/packages/inter-protocol/src/proposals/startPSM.js +++ b/packages/inter-protocol/src/proposals/startPSM.js @@ -35,10 +35,13 @@ export { inviteCommitteeMembers, startEconCharter, inviteToEconCharter }; const stablePsmKey = `published.psm.${Stable.symbol}`; /** - * @param {Array<[key: string, value: string]>} chainStorageEntries + * @param {[key: string, value: string][]} chainStorageEntries * @param {string} keyword - * @param {{ minted: Brand<'nat'>, anchor: Brand<'nat'> }} brands - * @returns {{ metrics?: MetricsNotification, governance?: GovernanceSubscriptionState }} + * @param {{ minted: Brand<'nat'>; anchor: Brand<'nat'> }} brands + * @returns {{ + * metrics?: MetricsNotification; + * governance?: GovernanceSubscriptionState; + * }} */ const findOldPSMState = (chainStorageEntries, keyword, brands) => { // In this reviver, object references are revived as boardIDs @@ -80,7 +83,7 @@ const findOldPSMState = (chainStorageEntries, keyword, brands) => { * @param {bigint} [config.WantMintedFeeBP] * @param {bigint} [config.GiveMintedFeeBP] * @param {bigint} [config.MINT_LIMIT] - * @param {{ anchorOptions?: AnchorOptions } } [config.options] + * @param {{ anchorOptions?: AnchorOptions }} [config.options] */ export const startPSM = async ( { @@ -291,16 +294,16 @@ harden(startPSM); */ /** - * Make anchor issuer out of a Cosmos asset; presumably - * USDC over IBC. Add it to BankManager. + * Make anchor issuer out of a Cosmos asset; presumably USDC over IBC. Add it to + * BankManager. * - * Also, if vatParameters shows an anchorPoolBalance for this asset, - * mint a payment for that balance. + * Also, if vatParameters shows an anchorPoolBalance for this asset, mint a + * payment for that balance. * * TODO: address redundancy with publishInterchainAssetFromBank * * @param {EconomyBootstrapPowers & WellKnownSpaces & ChainStorageVatParams} powers - * @param {{options: { anchorOptions?: AnchorOptions } }} config + * @param {{ options: { anchorOptions?: AnchorOptions } }} config */ export const makeAnchorAsset = async ( { @@ -345,14 +348,18 @@ export const makeAnchorAsset = async ( }), ); - const { creatorFacet: mint, publicFacet: issuer } = - /** @type {{ creatorFacet: ERef>, publicFacet: ERef> }} */ ( - await E(startUpgradable)({ - installation: mintHolder, - label: keyword, - terms, - }) - ); + const { creatorFacet: mint, publicFacet: issuer } = /** + * @type {{ + * creatorFacet: ERef>; + * publicFacet: ERef>; + * }} + */ ( + await E(startUpgradable)({ + installation: mintHolder, + label: keyword, + terms, + }) + ); const brand = await E(issuer).getBrand(); const kit = harden({ mint, issuer, brand }); diff --git a/packages/inter-protocol/src/proposals/utils.js b/packages/inter-protocol/src/proposals/utils.js index 6d8f80a18ea..444544d0c8c 100644 --- a/packages/inter-protocol/src/proposals/utils.js +++ b/packages/inter-protocol/src/proposals/utils.js @@ -10,7 +10,6 @@ const { Fail } = assert; */ export const reserveThenGetNamePaths = async (nameAdmin, paths) => { /** - * * @param {ERef} nextAdmin * @param {string[]} path */ @@ -54,7 +53,7 @@ export const reserveThenGetNames = async (nameAdmin, names) => * @param {string} debugName * @param {ERef} namesByAddressAdmin * @param {string} addr - * @param {Array>} payments + * @param {ERef[]} payments */ export const reserveThenDeposit = async ( debugName, @@ -79,7 +78,15 @@ export const reserveThenDeposit = async ( ); }; -/** @type {(store: ERef | import('@agoric/internal/src/scratch.js').ScratchPad>, key: string, make: () => T) => Promise} */ +/** + * @type {( + * store: ERef< + * Map | import('@agoric/internal/src/scratch.js').ScratchPad + * >, + * key: string, + * make: () => T, + * ) => Promise} + */ const provideWhen = async (store, key, make) => { const found = await E(store).get(key); if (found) { @@ -91,21 +98,33 @@ const provideWhen = async (store, key, make) => { }; /** - * @param {{ scratch: ERef }} homeP + * @param {{ + * scratch: ERef; + * }} homeP * @param {object} opts - * @param {(specifier: string) => Promise<{default: Bundle}>} opts.loadBundle + * @param {(specifier: string) => Promise<{ default: Bundle }>} opts.loadBundle * @param {string} [opts.installCacheKey] */ export const makeInstallCache = async ( homeP, { installCacheKey = 'installCache', loadBundle }, ) => { - /** @type {CopyMap} */ + /** + * @type {CopyMap< + * string, + * { installation: Installation; boardId: string; path?: string } + * >} + */ const initial = await provideWhen(E.get(homeP).scratch, installCacheKey, () => makeCopyMap([]), ); // ISSUE: getCopyMapEntries of CopyMap loses K, V. - /** @type {Map} */ + /** + * @type {Map< + * string, + * { installation: Installation; boardId: string; path?: string } + * >} + */ const working = new Map(getCopyMapEntries(initial)); const saveCache = async () => { diff --git a/packages/inter-protocol/src/psm/psm.js b/packages/inter-protocol/src/psm/psm.js index e1726b0ec5f..be2bf6afb0a 100644 --- a/packages/inter-protocol/src/psm/psm.js +++ b/packages/inter-protocol/src/psm/psm.js @@ -41,80 +41,86 @@ const { Fail } = assert; /** * @file The Parity Stability Module supports efficiently minting/burning a - * stable token at a specified fixed ratio to a reference stable token, which - * thereby acts as an anchor to provide additional stability. For flexible - * economic policies, the fee percentage for trading into and out of the stable - * token are specified separately. + * stable token at a specified fixed ratio to a reference stable token, which + * thereby acts as an anchor to provide additional stability. For flexible + * economic policies, the fee percentage for trading into and out of the + * stable token are specified separately. */ /** - * @typedef {object} MetricsNotification - * Metrics naming scheme is that nouns are present values and past-participles - * are accumulative. - * - * @property {Amount<'nat'>} anchorPoolBalance amount of Anchor token - * available to be swapped - * @property {Amount<'nat'>} mintedPoolBalance amount of Minted token - * outstanding (the amount minted minus the amount burned). - * @property {Amount<'nat'>} feePoolBalance amount of Minted token - * fees available to be collected - * - * @property {Amount<'nat'>} totalAnchorProvided running sum of Anchor - * ever given by this contract - * @property {Amount<'nat'>} totalMintedProvided running sum of Minted - * ever given by this contract + * @typedef {object} MetricsNotification Metrics naming scheme is that nouns are + * present values and past-participles are accumulative. + * @property {Amount<'nat'>} anchorPoolBalance amount of Anchor token available + * to be swapped + * @property {Amount<'nat'>} mintedPoolBalance amount of Minted token + * outstanding (the amount minted minus the amount burned). + * @property {Amount<'nat'>} feePoolBalance amount of Minted token fees + * available to be collected + * @property {Amount<'nat'>} totalAnchorProvided running sum of Anchor ever + * given by this contract + * @property {Amount<'nat'>} totalMintedProvided running sum of Minted ever + * given by this contract */ /** @typedef {import('@agoric/vat-data').Baggage} Baggage */ -export const customTermsShape = { - anchorBrand: BrandShape, - anchorPerMinted: RatioShape, - electionManager: InstanceHandleShape, - governedParams: { - [CONTRACT_ELECTORATE]: { - type: ParamTypes.INVITATION, - value: AmountShape, +/** @type {ContractMeta} */ +export const meta = { + upgradability: 'canUpgrade', + customTermsShape: { + anchorBrand: BrandShape, + anchorPerMinted: RatioShape, + electionManager: InstanceHandleShape, + governedParams: { + [CONTRACT_ELECTORATE]: { + type: ParamTypes.INVITATION, + value: AmountShape, + }, + WantMintedFee: { + type: ParamTypes.RATIO, + value: RatioShape, + }, + GiveMintedFee: { + type: ParamTypes.RATIO, + value: RatioShape, + }, + MintLimit: { type: ParamTypes.AMOUNT, value: AmountShape }, }, - WantMintedFee: { - type: ParamTypes.RATIO, - value: RatioShape, + }, + privateArgsShape: M.splitRecord( + { + marshaller: M.remotable('Marshaller'), + storageNode: StorageNodeShape, }, - GiveMintedFee: { - type: ParamTypes.RATIO, - value: RatioShape, + { + // only necessary on first invocation, not subsequent + feeMintAccess: FeeMintAccessShape, + initialPoserInvitation: InvitationShape, }, - MintLimit: { type: ParamTypes.AMOUNT, value: AmountShape }, - }, + ), }; -harden(customTermsShape); - -export const privateArgsShape = M.splitRecord( - harden({ - marshaller: M.remotable('Marshaller'), - storageNode: StorageNodeShape, - }), - harden({ - // only necessary on first invocation, not subsequent - feeMintAccess: FeeMintAccessShape, - initialPoserInvitation: InvitationShape, - }), -); -harden(privateArgsShape); +harden(meta); /** - * @param {ZCF & { - * anchorBrand: Brand<'nat'>, - * anchorPerMinted: Ratio, - * }>} zcf - * @param {{feeMintAccess: FeeMintAccess, initialPoserInvitation: Invitation, storageNode: StorageNode, marshaller: Marshaller}} privateArgs + * anchorBrand: Brand<'nat'>; + * anchorPerMinted: Ratio; + * } + * >} zcf + * @param {{ + * feeMintAccess: FeeMintAccess; + * initialPoserInvitation: Invitation; + * storageNode: StorageNode; + * marshaller: Marshaller; + * }} privateArgs * @param {Baggage} baggage */ -export const prepare = async (zcf, privateArgs, baggage) => { +export const start = async (zcf, privateArgs, baggage) => { const { anchorBrand, anchorPerMinted } = zcf.getTerms(); console.log('PSM Starting', anchorBrand, anchorPerMinted); @@ -231,9 +237,7 @@ export const prepare = async (zcf, privateArgs, baggage) => { updateMetrics(); }; - /** - * @param {Amount<'nat'>} toMint - */ + /** @param {Amount<'nat'>} toMint */ const assertUnderLimit = toMint => { const mintedAfter = AmountMath.add( baggage.get('mintedPoolBalance'), @@ -262,7 +266,8 @@ export const prepare = async (zcf, privateArgs, baggage) => { /** * @param {ZCFSeat} seat * @param {Amount<'nat'>} given - * @param {Amount<'nat'>} [wanted] defaults to maximum anchor (given exchange rate minus fees) + * @param {Amount<'nat'>} [wanted] defaults to maximum anchor (given exchange + * rate minus fees) */ const giveMinted = (seat, given, wanted = emptyAnchor) => { const fee = ceilMultiplyBy(given, params.getGiveMintedFee()); @@ -440,5 +445,6 @@ export const prepare = async (zcf, privateArgs, baggage) => { publicFacet, }); }; +harden(start); -/** @typedef {Awaited>['publicFacet']} PsmPublicFacet */ +/** @typedef {Awaited>['publicFacet']} PsmPublicFacet */ diff --git a/packages/inter-protocol/src/reserve/assetReserve.js b/packages/inter-protocol/src/reserve/assetReserve.js index 4263d6054d5..9791502eb39 100644 --- a/packages/inter-protocol/src/reserve/assetReserve.js +++ b/packages/inter-protocol/src/reserve/assetReserve.js @@ -10,36 +10,42 @@ import { prepareAssetReserveKit } from './assetReserveKit.js'; const trace = makeTracer('AR', true); +/** @type {ContractMeta} */ +export const meta = { + upgradability: 'canUpgrade', +}; +harden(meta); + /** * @typedef {{ - * increaseLiquidationShortfall: (increase: Amount) => void - * reduceLiquidationShortfall: (reduction: Amount) => void + * increaseLiquidationShortfall: (increase: Amount) => void; + * reduceLiquidationShortfall: (reduction: Amount) => void; * }} ShortfallReportingFacet */ /** @typedef {import('@agoric/vat-data').Baggage} Baggage */ /** - * Asset Reserve holds onto assets for the Inter Protocol, and can - * dispense it for various purposes under governance control. + * Asset Reserve holds onto assets for the Inter Protocol, and can dispense it + * for various purposes under governance control. * * This contract has the ability to mint Fee tokens, granted through its private * arguments. * - * @param {ZCF & - * { - * governedApis: ['burnFeesToReduceShortfall'], - * } + * @param {ZCF< + * GovernanceTerms<{}> & { + * governedApis: ['burnFeesToReduceShortfall']; + * } * >} zcf * @param {{ - * feeMintAccess: FeeMintAccess, - * initialPoserInvitation: Invitation, - * marshaller: ERef, - * storageNode: ERef, + * feeMintAccess: FeeMintAccess; + * initialPoserInvitation: Invitation; + * marshaller: ERef; + * storageNode: ERef; * }} privateArgs * @param {Baggage} baggage */ -export const prepare = async (zcf, privateArgs, baggage) => { +export const start = async (zcf, privateArgs, baggage) => { trace('prepare', Object.keys(privateArgs), [...baggage.keys()]); // This contract mixes two styles of access to durable state. durableStores // are declared at the top level and referenced lexically. local state is @@ -106,7 +112,7 @@ export const prepare = async (zcf, privateArgs, baggage) => { publicFacet: /** @type {any} */ (assetReserveKit.public), }; }; -harden(prepare); +harden(start); /** * @typedef {object} ShortfallReporter @@ -121,5 +127,8 @@ harden(prepare); * @property {() => Promise>} makeShortfallReportingInvitation */ -/** @typedef {Awaited>['publicFacet']} AssetReservePublicFacet */ -/** @typedef {Awaited>['creatorFacet']} AssetReserveCreatorFacet the creator facet for the governor */ +/** @typedef {Awaited>['publicFacet']} AssetReservePublicFacet */ +/** + * @typedef {Awaited>['creatorFacet']} AssetReserveCreatorFacet + * the creator facet for the governor + */ diff --git a/packages/inter-protocol/src/reserve/assetReserveKit.js b/packages/inter-protocol/src/reserve/assetReserveKit.js index 0925369991f..bcc4096cdde 100644 --- a/packages/inter-protocol/src/reserve/assetReserveKit.js +++ b/packages/inter-protocol/src/reserve/assetReserveKit.js @@ -17,7 +17,6 @@ const trace = makeTracer('ReserveKit', true); /** * @typedef {object} MetricsNotification - * * @property {AmountKeywordRecord} allocations * @property {Amount<'nat'>} shortfallBalance shortfall from liquidation that * has not yet been compensated. @@ -28,10 +27,11 @@ const trace = makeTracer('ReserveKit', true); /** * @param {import('@agoric/vat-data').Baggage} baggage * @param {{ - * feeMint: ZCFMint<'nat'>, - * makeRecorderKit: import('@agoric/zoe/src/contractSupport/recorder.js').MakeRecorderKit, - * storageNode: StorageNode, - * zcf: ZCF}} powers + * feeMint: ZCFMint<'nat'>; + * makeRecorderKit: import('@agoric/zoe/src/contractSupport/recorder.js').MakeRecorderKit; + * storageNode: StorageNode; + * zcf: ZCF; + * }} powers */ export const prepareAssetReserveKit = async ( baggage, @@ -63,10 +63,7 @@ export const prepareAssetReserveKit = async ( reduceLiquidationShortfall: M.call(AmountShape).returns(), }), }, - /** - * - * @param {StorageNode} metricsNode - */ + /** @param {StorageNode} metricsNode */ metricsNode => { /** * Used to look up the unique keyword for each brand, including Fee brand. @@ -77,7 +74,8 @@ export const prepareAssetReserveKit = async ( durable: true, }); /** - * Used to look up the brands for keywords, excluding Fee because it's a special case. + * Used to look up the brands for keywords, excluding Fee because it's a + * special case. * * @type {MapStore} */ @@ -137,7 +135,6 @@ export const prepareAssetReserveKit = async ( }, governedApis: { /** - * * @param {Amount<'nat'>} reduction * @returns {void} */ @@ -205,12 +202,11 @@ export const prepareAssetReserveKit = async ( }, }, /** - * XXX missing governance public methods https://github.com/Agoric/agoric-sdk/issues/5200 + * XXX missing governance public methods + * https://github.com/Agoric/agoric-sdk/issues/5200 */ public: { - /** - * Anyone can deposit any assets to the reserve - */ + /** Anyone can deposit any assets to the reserve */ makeAddCollateralInvitation() { /** @type {OfferHandler>} */ const handler = async seat => { @@ -247,9 +243,7 @@ export const prepareAssetReserveKit = async ( }, }, shortfallReportingFacet: { - /** - * @param {Amount<"nat">} shortfall - */ + /** @param {Amount<'nat'>} shortfall */ increaseLiquidationShortfall(shortfall) { const { facets, state } = this; state.shortfallBalance = AmountMath.add( @@ -260,9 +254,7 @@ export const prepareAssetReserveKit = async ( }, // currently exposed for testing. Maybe it only gets called internally? - /** - * @param {Amount<"nat">} reduction - */ + /** @param {Amount<'nat'>} reduction */ reduceLiquidationShortfall(reduction) { const { state } = this; if (AmountMath.isGTE(reduction, state.shortfallBalance)) { diff --git a/packages/inter-protocol/src/tokens.js b/packages/inter-protocol/src/tokens.js index 0b6a11dd28e..42c336a1067 100644 --- a/packages/inter-protocol/src/tokens.js +++ b/packages/inter-protocol/src/tokens.js @@ -1,17 +1,17 @@ // @ts-check -/** @typedef { 'IST' | 'BLD' } TokenKeyword */ +/** @typedef {'IST' | 'BLD'} TokenKeyword */ /** - * Use static type check and unit tests rather than runtime import - * to avoid bundling all of ERTP just to get Stable.symbol. + * Use static type check and unit tests rather than runtime import to avoid + * bundling all of ERTP just to get Stable.symbol. * * @type {typeof import('@agoric/ertp').AssetKind.NAT} */ const NAT = 'nat'; export const Stable = harden( - /** @type {const } */ ({ + /** @type {const} */ ({ symbol: 'IST', denom: 'uist', proposedName: 'Agoric stable token', @@ -24,7 +24,7 @@ export const Stable = harden( ); export const Stake = harden( - /** @type {const } */ ({ + /** @type {const} */ ({ symbol: 'BLD', denom: 'ubld', proposedName: 'Agoric staking token', diff --git a/packages/inter-protocol/src/typeGuards.js b/packages/inter-protocol/src/typeGuards.js index 2be3465894a..f3a055a082e 100644 --- a/packages/inter-protocol/src/typeGuards.js +++ b/packages/inter-protocol/src/typeGuards.js @@ -2,9 +2,7 @@ import { M } from '@agoric/store'; -/** - * To be used only for 'helper' facets where the calls are from trusted code. - */ +/** To be used only for 'helper' facets where the calls are from trusted code. */ export const UnguardedHelperI = M.interface( 'helper', {}, diff --git a/packages/inter-protocol/src/vaultFactory/liquidation.js b/packages/inter-protocol/src/vaultFactory/liquidation.js index e3180fecb1c..cf0241696dc 100644 --- a/packages/inter-protocol/src/vaultFactory/liquidation.js +++ b/packages/inter-protocol/src/vaultFactory/liquidation.js @@ -22,7 +22,8 @@ const makeCancelToken = makeCancelTokenMaker('liq'); /** * This will normally be set. If the schedule goes sideways, we'll unschedule - * all events and unset it. When auction params are changed, we'll restart the schedule + * all events and unset it. When auction params are changed, we'll restart the + * schedule * * @type {object | undefined} */ @@ -47,15 +48,16 @@ const cancelWakeups = timer => { }; /** - * Schedule wakeups for the *next* auction round. + * Schedule wakeups for the _next_ auction round. * - * In practice, there are these cases to handle (with N as "live" and N+1 is "next"): + * In practice, there are these cases to handle (with N as "live" and N+1 is + * "next"): * - * | when (now within the range) | what | - * | -------------------------------- | --------------------------------------- | - * | [start N, nominalStart N+1] | good: schedule normally the three wakers| - * | (nominalStart N+1, endTime N+1] | recover: skip round N+1 and schedule N+2| - * | (endTime N+1, ∞) | give up: wait for repair by governance | + * | when (now within the range) | what | + * | ------------------------------- | ---------------------------------------- | + * | [start N, nominalStart N+1] | good: schedule normally the three wakers | + * | (nominalStart N+1, endTime N+1] | recover: skip round N+1 and schedule N+2 | + * | (endTime N+1, ∞) | give up: wait for repair by governance | * * @param {object} opts * @param {ERef} opts.timer @@ -132,7 +134,7 @@ const setWakeups = ({ }; /** - * Schedule wakeups for the *next* auction round. + * Schedule wakeups for the _next_ auction round. * * Called by vaultDirector's resetWakeupsForNextAuction at start() and every * time there's a "reschedule" wakeup. @@ -185,7 +187,7 @@ harden(setWakeupsForNextAuction); /** * @param {Amount<'nat'>} debt * @param {Amount<'nat'>} minted - * @returns {{ overage: Amount<'nat'>, shortfall: Amount<'nat'>}} + * @returns {{ overage: Amount<'nat'>; shortfall: Amount<'nat'> }} */ export const liquidationResults = (debt, minted) => { if (AmountMath.isEmpty(minted)) { @@ -240,15 +242,21 @@ export const watchForGovernanceChange = ( * @param {PriceQuote} collateralizationDetails.quote * @param {Ratio} collateralizationDetails.interest * @param {Ratio} collateralizationDetails.margin - * @param {ReturnType} prioritizedVaults + * @param {ReturnType< + * typeof import('./prioritizedVaults.js').makePrioritizedVaults + * >} prioritizedVaults * @param {SetStore} liquidatingVaults * @param {Brand<'nat'>} debtBrand * @param {Brand<'nat'>} collateralBrand * @returns {{ - * vaultData: MapStore, debtAmount: Amount<'nat'>}>, - * totalDebt: Amount<'nat'>, - * totalCollateral: Amount<'nat'>, - * liqSeat: ZCFSeat}} + * vaultData: MapStore< + * Vault, + * { collateralAmount: Amount<'nat'>; debtAmount: Amount<'nat'> } + * >; + * totalDebt: Amount<'nat'>; + * totalCollateral: Amount<'nat'>; + * liqSeat: ZCFSeat; + * }} */ export const getLiquidatableVaults = ( zcf, @@ -261,7 +269,12 @@ export const getLiquidatableVaults = ( const vaultsToLiquidate = prioritizedVaults.removeVaultsBelow( collateralizationDetails, ); - /** @type {MapStore, debtAmount: Amount<'nat'>}>} */ + /** + * @type {MapStore< + * Vault, + * { collateralAmount: Amount<'nat'>; debtAmount: Amount<'nat'> } + * >} + */ const vaultData = makeScalarMapStore(); const { zcfSeat: liqSeat } = zcf.makeEmptySeatKit(); diff --git a/packages/inter-protocol/src/vaultFactory/math.js b/packages/inter-protocol/src/vaultFactory/math.js index d923695741c..5583ffc16db 100644 --- a/packages/inter-protocol/src/vaultFactory/math.js +++ b/packages/inter-protocol/src/vaultFactory/math.js @@ -1,8 +1,8 @@ // @jessie-check /** - * @file calculations specific to the Vault Factory contract - * See also ../interest-math.js + * @file calculations specific to the Vault Factory contract See also + * ../interest-math.js */ import { AmountMath } from '@agoric/ertp'; @@ -17,8 +17,8 @@ import { priceFrom } from '../auction/util.js'; import { addSubtract } from '../contractSupport.js'; /** - * Calculate the minimum collateralization given the liquidation margin and the "padding" - * from that liquidation threshold. + * Calculate the minimum collateralization given the liquidation margin and the + * "padding" from that liquidation threshold. * * @param {Ratio} liquidationMargin * @param {Ratio} liquidationPadding @@ -74,11 +74,10 @@ export const maxDebtForVault = ( }; /** - * Calculate the fee, the amount to mint and the resulting debt. - * The give and the want together reflect a delta, where typically - * one is zero because they come from the gave/want of an offer - * proposal. If the `want` is zero, the `fee` will also be zero, - * so the simple math works. + * Calculate the fee, the amount to mint and the resulting debt. The give and + * the want together reflect a delta, where typically one is zero because they + * come from the gave/want of an offer proposal. If the `want` is zero, the + * `fee` will also be zero, so the simple math works. * * @param {Amount<'nat'>} currentDebt * @param {Amount<'nat'>} give excess of currentDebt is returned in 'surplus' diff --git a/packages/inter-protocol/src/vaultFactory/orderedVaultStore.js b/packages/inter-protocol/src/vaultFactory/orderedVaultStore.js index 7fd83d61244..d4423b2b7cf 100644 --- a/packages/inter-protocol/src/vaultFactory/orderedVaultStore.js +++ b/packages/inter-protocol/src/vaultFactory/orderedVaultStore.js @@ -3,22 +3,20 @@ import { fromVaultKey, toVaultKey } from './storeUtils.js'; /** * Used by prioritizedVaults to wrap the Collections API for this use case. * - * Designed to be replaceable by naked Collections API when composite keys are available. + * Designed to be replaceable by naked Collections API when composite keys are + * available. * - * In this module debts are encoded as the inverse quotient (collateral over debt) so that - * greater collateralization sorts after lower. (Higher debt-to-collateral come - * first.) + * In this module debts are encoded as the inverse quotient (collateral over + * debt) so that greater collateralization sorts after lower. (Higher + * debt-to-collateral come first.) */ /** @typedef {import('./vault').Vault} Vault */ /** @typedef {import('./storeUtils').CompositeKey} CompositeKey */ -/** - * @param {MapStore} store - */ +/** @param {MapStore} store */ export const makeOrderedVaultStore = store => { /** - * * @param {string} vaultId * @param {Vault} vault */ @@ -31,7 +29,6 @@ export const makeOrderedVaultStore = store => { }; /** - * * @param {string} key * @returns {Vault} */ diff --git a/packages/inter-protocol/src/vaultFactory/params.js b/packages/inter-protocol/src/vaultFactory/params.js index 5e2f772f85f..ce883dffd32 100644 --- a/packages/inter-protocol/src/vaultFactory/params.js +++ b/packages/inter-protocol/src/vaultFactory/params.js @@ -21,7 +21,7 @@ export const DEBT_LIMIT_KEY = 'DebtLimit'; export const LIQUIDATION_MARGIN_KEY = 'LiquidationMargin'; export const LIQUIDATION_PADDING_KEY = 'LiquidationPadding'; export const LIQUIDATION_PENALTY_KEY = 'LiquidationPenalty'; -export const STABILITY_FEE_KEY = 'StabilityFee'; +export const INTEREST_RATE_KEY = 'InterestRate'; export const MINT_FEE_KEY = 'MintFee'; export const MIN_INITIAL_DEBT_KEY = 'MinInitialDebt'; export const SHORTFALL_INVITATION_KEY = 'ShortfallInvitation'; @@ -75,7 +75,11 @@ const makeVaultDirectorParams = ( }; harden(makeVaultDirectorParams); -/** @typedef {import('@agoric/governance/src/contractGovernance/typedParamManager').ParamTypesMapFromRecord>} VaultDirectorParams */ +/** + * @typedef {import('@agoric/governance/src/contractGovernance/typedParamManager').ParamTypesMapFromRecord< + * ReturnType + * >} VaultDirectorParams + */ /** @type {(liquidationMargin: Ratio) => Ratio} */ const zeroRatio = liquidationMargin => @@ -89,7 +93,7 @@ export const makeVaultParamManager = ( publisherKit, { debtLimit, - stabilityFee, + interestRate, liquidationMargin, liquidationPadding = zeroRatio(liquidationMargin), liquidationPenalty, @@ -98,7 +102,7 @@ export const makeVaultParamManager = ( ) => makeParamManagerSync(publisherKit, { [DEBT_LIMIT_KEY]: [ParamTypes.AMOUNT, debtLimit], - [STABILITY_FEE_KEY]: [ParamTypes.RATIO, stabilityFee], + [INTEREST_RATE_KEY]: [ParamTypes.RATIO, interestRate], [LIQUIDATION_PADDING_KEY]: [ParamTypes.RATIO, liquidationPadding], [LIQUIDATION_MARGIN_KEY]: [ParamTypes.RATIO, liquidationMargin], [LIQUIDATION_PENALTY_KEY]: [ParamTypes.RATIO, liquidationPenalty], @@ -110,7 +114,7 @@ export const vaultParamPattern = M.splitRecord( { liquidationMargin: ratioPattern, liquidationPenalty: ratioPattern, - stabilityFee: ratioPattern, + interestRate: ratioPattern, mintFee: ratioPattern, debtLimit: amountPattern, }, @@ -122,16 +126,16 @@ export const vaultParamPattern = M.splitRecord( /** * @param {{ - * auctioneerPublicFacet: ERef, - * electorateInvitationAmount: Amount<'set'>, - * minInitialDebt: Amount<'nat'>, - * bootstrapPaymentValue: bigint, - * priceAuthority: ERef, - * timer: ERef, - * reservePublicFacet: AssetReservePublicFacet, - * interestTiming: InterestTiming, - * shortfallInvitationAmount: Amount<'set'>, - * referencedUi?: string, + * auctioneerPublicFacet: ERef; + * electorateInvitationAmount: Amount<'set'>; + * minInitialDebt: Amount<'nat'>; + * bootstrapPaymentValue: bigint; + * priceAuthority: ERef; + * timer: ERef; + * reservePublicFacet: AssetReservePublicFacet; + * interestTiming: InterestTiming; + * shortfallInvitationAmount: Amount<'set'>; + * referencedUi?: string; * }} opts */ export const makeGovernedTerms = ({ @@ -163,8 +167,8 @@ export const makeGovernedTerms = ({ }; harden(makeGovernedTerms); /** - * Stop-gap which restores initial param values - * UNTIL https://github.com/Agoric/agoric-sdk/issues/5200 + * Stop-gap which restores initial param values UNTIL + * https://github.com/Agoric/agoric-sdk/issues/5200 * * NB: changes from initial values will be lost upon restart * @@ -176,7 +180,12 @@ export const provideVaultParamManagers = (baggage, marshaller) => { const managers = makeScalarMapStore(); // the managers aren't durable but their arguments are - /** @type {MapStore} */ + /** + * @type {MapStore< + * Brand, + * { storageNode: StorageNode; initialParamValues: VaultManagerParamValues } + * >} + */ const managerArgs = provideDurableMapStore( baggage, 'vault param manager parts', @@ -196,7 +205,6 @@ export const provideVaultParamManagers = (baggage, marshaller) => { return { /** - * * @param {Brand} brand * @param {StorageNode} storageNode * @param {VaultManagerParamValues} initialParamValues @@ -206,9 +214,7 @@ export const provideVaultParamManagers = (baggage, marshaller) => { managerArgs.init(brand, args); return makeManager(brand, args); }, - /** - * @param {Brand} brand - */ + /** @param {Brand} brand */ get(brand) { return managers.get(brand); }, diff --git a/packages/inter-protocol/src/vaultFactory/prioritizedVaults.js b/packages/inter-protocol/src/vaultFactory/prioritizedVaults.js index 09384cb386c..0402e8ffa4e 100644 --- a/packages/inter-protocol/src/vaultFactory/prioritizedVaults.js +++ b/packages/inter-protocol/src/vaultFactory/prioritizedVaults.js @@ -47,8 +47,8 @@ export const currentDebtToCollateral = vault => * Vaults, ordered by their debt ratio so that all the vaults below a threshold * can be quickly found and liquidated. * - * @param {MapStore} store - * vault has a higher debt ratio than the previous highest + * @param {MapStore} store vault has a higher debt ratio than the + * previous highest */ export const makePrioritizedVaults = store => { const vaults = makeOrderedVaultStore(store); diff --git a/packages/inter-protocol/src/vaultFactory/proceeds.js b/packages/inter-protocol/src/vaultFactory/proceeds.js index 45d4d8885f3..eaeb0c5b2d6 100644 --- a/packages/inter-protocol/src/vaultFactory/proceeds.js +++ b/packages/inter-protocol/src/vaultFactory/proceeds.js @@ -11,27 +11,32 @@ import { liquidationResults } from './liquidation.js'; /** * @typedef {{ - * overage: Amount<'nat'>, - * shortfallToReserve: Amount<'nat'>, - * collateralForReserve: Amount<'nat'>, - * actualCollateralSold: Amount<'nat'>, - * collateralSold: Amount<'nat'>, - * collatRemaining: Amount<'nat'>, - * debtToBurn: Amount<'nat'>, - * mintedForReserve: Amount<'nat'>, - * mintedProceeds: Amount<'nat'>, - * phantomDebt: Amount<'nat'>, - * totalPenalty: Amount<'nat'>, - * transfersToVault: Array<[number, AmountKeywordRecord]>, - * vaultsToReinstate: Array + * overage: Amount<'nat'>; + * shortfallToReserve: Amount<'nat'>; + * collateralForReserve: Amount<'nat'>; + * actualCollateralSold: Amount<'nat'>; + * collateralSold: Amount<'nat'>; + * collatRemaining: Amount<'nat'>; + * debtToBurn: Amount<'nat'>; + * mintedForReserve: Amount<'nat'>; + * mintedProceeds: Amount<'nat'>; + * phantomDebt: Amount<'nat'>; + * totalPenalty: Amount<'nat'>; + * transfersToVault: [number, AmountKeywordRecord][]; + * vaultsToReinstate: number[]; * }} DistributionPlan + * The plan to execute for distributing proceeds of a liquidation. * - * The plan to execute for distributing proceeds of a liquidation. - * - * Vaults are referenced by index in the list sent to the calculator. + * Vaults are referenced by index in the list sent to the calculator. */ -/** @typedef {{ collateral: Amount<'nat'>, presaleDebt: Amount<'nat'>, currentDebt: Amount<'nat'> }} VaultBalances */ +/** + * @typedef {{ + * collateral: Amount<'nat'>; + * presaleDebt: Amount<'nat'>; + * currentDebt: Amount<'nat'>; + * }} VaultBalances + */ /** * Liquidation.md describes how to process liquidation proceeds. @@ -46,7 +51,8 @@ import { liquidationResults } from './liquidation.js'; * @param {Amount<'nat'>} inputs.totalDebt * @param {Amount<'nat'>} inputs.totalCollateral * @param {PriceDescription} inputs.oraclePriceAtStart - * @param {Array} inputs.vaultsBalances ordered best to worst collateralized + * @param {VaultBalances[]} inputs.vaultsBalances ordered best to worst + * collateralized * @param {Ratio} inputs.penaltyRate * @returns {DistributionPlan} */ diff --git a/packages/inter-protocol/src/vaultFactory/storeUtils.js b/packages/inter-protocol/src/vaultFactory/storeUtils.js index db8ab0c29a9..d1daf1abcc1 100644 --- a/packages/inter-protocol/src/vaultFactory/storeUtils.js +++ b/packages/inter-protocol/src/vaultFactory/storeUtils.js @@ -19,13 +19,9 @@ const { multiply } = natSafeMath; const trace = makeTracer('Store', true); -/** - * @typedef {import('@endo/marshal').PureData} PureData - */ +/** @typedef {import('@endo/marshal').PureData} PureData */ -/** - * @typedef {[normalizedCollateralization: number, vaultId: VaultId]} CompositeKey - */ +/** @typedef {[normalizedCollateralization: number, vaultId: VaultId]} CompositeKey */ // `makeEncodePassable` has three named options: // `encodeRemotable`, `encodeError`, and `encodePromise`. @@ -69,12 +65,12 @@ const decodeNumber = encoded => { }; // Type annotations to support static testing of amount values -/** @typedef {Amount<'nat'> & {normalized: true}} NormalizedDebt */ -/** @typedef {Amount<'nat'> & {normalized: false}} ActualDebt */ +/** @typedef {Amount<'nat'> & { normalized: true }} NormalizedDebt */ +/** @typedef {Amount<'nat'> & { normalized: false }} ActualDebt */ /** - * Overcollateralized are greater than one. - * The more undercollaterized the smaller in [0-1]. + * Overcollateralized are greater than one. The more undercollaterized the + * smaller in [0-1]. * * @param {NormalizedDebt} normalizedDebt normalized (not actual) total debt * @param {Amount<'nat'>} collateral @@ -95,7 +91,7 @@ const collateralizationRatio = (normalizedDebt, collateral) => { * @param {Amount<'nat'>} collateral * @param {VaultId} vaultId * @returns {string} lexically sortable string in which highest - * debt-to-collateral is earliest + * debt-to-collateral is earliest */ export const toVaultKey = (normalizedDebt, collateral, vaultId) => { assert(normalizedDebt); @@ -131,15 +127,15 @@ harden(fromVaultKey); * For use by `normalizedCollRatioKey` and tests. * * @param {PriceQuote} quote - * @param {Ratio} compoundedStabilityFee + * @param {Ratio} compoundedInterest * @param {Ratio} margin * @returns {number} */ -export const normalizedCollRatio = (quote, compoundedStabilityFee, margin) => { +export const normalizedCollRatio = (quote, compoundedInterest, margin) => { const amountIn = getAmountIn(quote).value; const amountOut = getAmountOut(quote).value; - const interestNumerator = compoundedStabilityFee.numerator.value; - const interestBase = compoundedStabilityFee.denominator.value; + const interestNumerator = compoundedInterest.numerator.value; + const interestBase = compoundedInterest.denominator.value; const numerator = multiply( margin.numerator.value, multiply(amountIn, interestNumerator), @@ -159,17 +155,13 @@ harden(normalizedCollRatio); * out the numerator and the denominator, and divide only once. * * @param {PriceQuote} quote - * @param {Ratio} compoundedStabilityFee + * @param {Ratio} compoundedInterest * @param {Ratio} margin * @returns {string} lexically sortable string in which highest - * debt-to-collateral is earliest + * debt-to-collateral is earliest */ -export const normalizedCollRatioKey = ( - quote, - compoundedStabilityFee, - margin, -) => { - const collRatio = normalizedCollRatio(quote, compoundedStabilityFee, margin); +export const normalizedCollRatioKey = (quote, compoundedInterest, margin) => { + const collRatio = normalizedCollRatio(quote, compoundedInterest, margin); return `${encodeNumber(collRatio)}:`; }; harden(normalizedCollRatioKey); diff --git a/packages/inter-protocol/src/vaultFactory/types.js b/packages/inter-protocol/src/vaultFactory/types.js index 7c189af1a0d..c2a6a07c53c 100644 --- a/packages/inter-protocol/src/vaultFactory/types.js +++ b/packages/inter-protocol/src/vaultFactory/types.js @@ -2,21 +2,30 @@ /** * @typedef {import('./vault').VaultNotification} VaultNotification + * * @typedef {import('./vault').Vault} Vault + * * @typedef {import('./vaultKit').VaultKit} VaultKit + * * @typedef {import('./vaultManager').VaultManager} VaultManager + * * @typedef {import('./vaultManager').CollateralManager} CollateralManager + * * @typedef {import('../reserve/assetReserve.js').AssetReserveLimitedCreatorFacet} AssetReserveCreatorFacet + * * @typedef {import('../reserve/assetReserve.js').AssetReservePublicFacet} AssetReservePublicFacet + * * @typedef {import('../auction/auctioneer.js').AuctioneerPublicFacet} AuctioneerPublicFacet + * * @typedef {import('./vaultFactory.js').VaultFactoryContract['publicFacet']} VaultFactoryPublicFacet * * @typedef {import('@agoric/time/src/types').Timestamp} Timestamp + * * @typedef {import('@agoric/time/src/types').RelativeTime} RelativeTime */ /** - * @typedef {object} AutoswapLocal + * @typedef {object} AutoswapLocal * @property {(amount: Amount, brand: Brand) => Amount} getInputPrice * @property {() => Invitation} makeSwapInvitation */ @@ -24,13 +33,16 @@ /** * @typedef {object} VaultManagerParamValues * @property {Ratio} liquidationMargin - margin below which collateral will be - * liquidated to satisfy the debt. - * @property {Ratio} liquidationPenalty - penalty charged upon liquidation as proportion of debt - * @property {Ratio} stabilityFee - annual interest rate charged on debt positions - * @property {Ratio} mintFee - The fee (in BasisPoints) charged when creating - * or increasing a debt position. + * liquidated to satisfy the debt. + * @property {Ratio} liquidationPenalty - penalty charged upon liquidation as + * proportion of debt + * @property {Ratio} interestRate - annual interest rate charged on debt + * positions + * @property {Ratio} mintFee - The fee (in BasisPoints) charged when creating or + * increasing a debt position. * @property {Amount<'nat'>} debtLimit - * @property {Ratio} [liquidationPadding] - vault must maintain this in order to remove collateral or add debt + * @property {Ratio} [liquidationPadding] - vault must maintain this in order to + * remove collateral or add debt */ /** @@ -42,7 +54,7 @@ */ /** - * @typedef {object} VaultFactoryCreatorFacet + * @typedef {object} VaultFactoryCreatorFacet * @property {AddVaultType} addVaultType * @property {() => Allocation} getRewardAllocation * @property {() => Promise>} makeCollectFeesInvitation @@ -51,10 +63,10 @@ */ /** - * @callback MintAndTransfer - * Mint new debt `toMint` and transfer the `fee` portion to the vaultFactory's reward - * pool. Then reallocate over all the seat arguments and the rewardPoolSeat. Update - * the `totalDebt` if the reallocate succeeds. + * @callback MintAndTransfer Mint new debt `toMint` and transfer the `fee` + * portion to the vaultFactory's reward pool. Then reallocate over all the + * seat arguments and the rewardPoolSeat. Update the `totalDebt` if the + * reallocate succeeds. * @param {ZCFSeat} mintReceiver * @param {Amount<'nat'>} toMint * @param {Amount<'nat'>} fee @@ -63,11 +75,8 @@ */ /** - * @callback BurnDebt - * - * Burn debt tokens off a seat and update - * the `totalDebt` if the reallocate succeeds. - * + * @callback BurnDebt Burn debt tokens off a seat and update the `totalDebt` if + * the reallocate succeeds. * @param {Amount} toBurn * @param {ZCFSeat} fromSeat * @returns {void} @@ -78,16 +87,15 @@ * @property {() => Ratio} getLiquidationMargin * @property {() => Ratio} getMintFee * @property {() => Promise} getCollateralQuote - * @property {() => Ratio} getStabilityFee - The annual interest rate on a debt position + * @property {() => Ratio} getInterestRate - The annual interest rate on a debt + * position * @property {() => RelativeTime} getChargingPeriod - The period (in seconds) at * which interest is charged to the debt position. * @property {() => RelativeTime} getRecordingPeriod - The period (in seconds) * at which interest is recorded to the debt position. */ -/** - * @typedef {string} VaultId - */ +/** @typedef {string} VaultId */ /** * @typedef {object} InterestTiming @@ -104,13 +112,15 @@ /** * @typedef {object} Liquidator - * @property {() => Promise; penaltyRate: Ratio; }>>} makeLiquidateInvitation + * @property {() => Promise< + * Invitation; penaltyRate: Ratio }> + * >} makeLiquidateInvitation */ /** * @typedef {object} DebtStatus - * @property {Timestamp} latestStabilityFeeUpdate - * @property {NatValue} interest interest accrued since latestStabilityFeeUpdate + * @property {Timestamp} latestInterestUpdate + * @property {NatValue} interest interest accrued since latestInterestUpdate * @property {NatValue} newDebt total including principal and interest */ @@ -124,11 +134,11 @@ /** * @typedef {object} CalculatorKit * @property {Calculate} calculate calculate new debt for charging periods up to - * the present. + * the present. * @property {Calculate} calculateReportingPeriod calculate new debt for - * reporting periods up to the present. If some charging periods have elapsed - * that don't constitute whole reporting periods, the time is not updated past - * them and interest is not accumulated for them. + * reporting periods up to the present. If some charging periods have elapsed + * that don't constitute whole reporting periods, the time is not updated past + * them and interest is not accumulated for them. */ -/** @typedef {{key: 'governedParams' | {collateralBrand: Brand}}} VaultFactoryParamPath */ +/** @typedef {{ key: 'governedParams' | { collateralBrand: Brand } }} VaultFactoryParamPath */ diff --git a/packages/inter-protocol/src/vaultFactory/vault.js b/packages/inter-protocol/src/vaultFactory/vault.js index 7e14f91c52d..646271ec8ac 100644 --- a/packages/inter-protocol/src/vaultFactory/vault.js +++ b/packages/inter-protocol/src/vaultFactory/vault.js @@ -22,31 +22,36 @@ const trace = makeTracer('Vault', true); /** @typedef {import('./storeUtils.js').NormalizedDebt} NormalizedDebt */ /** - * @file This has most of the logic for a Vault, to borrow Minted against collateral. + * @file This has most of the logic for a Vault, to borrow Minted against + * collateral. * - * The logic here is for Vault which is the majority of logic of vaults but - * the user view is the `vault` value contained in VaultKit. + * The logic here is for Vault which is the majority of logic of vaults but the + * user view is the `vault` value contained in VaultKit. * - * A note on naming convention: - * - `Pre` is used as a postfix for any mutable value retrieved *before* an - * `await`, to flag values that must used very carefully after the `await` - * - `new` is a prefix for values that describe the result of executing a - * transaction; e.g., `debt` is the value before the txn, and `newDebt` - * will be value if the txn completes. - * - the absence of one of these implies the opposite, so `newDebt` is the - * future value fo `debt`, as computed based on values after any `await` + * A note on naming convention: + * + * - `Pre` is used as a postfix for any mutable value retrieved _before_ an + * `await`, to flag values that must used very carefully after the + * `await` + * - `new` is a prefix for values that describe the result of executing a + * transaction; e.g., `debt` is the value before the txn, and `newDebt` + * will be value if the txn completes. + * - the absence of one of these implies the opposite, so `newDebt` is the future + * value fo `debt`, as computed based on values after any `await` */ /** * Constants for vault phase. * - * ACTIVE - vault is in use and can be changed - * LIQUIDATING - vault is being liquidated by the vault manager, and cannot be changed by the user. - * If liquidation fails, vaults may remain in this state. An upgrade to the contract - * might be able to recover them. - * TRANSFER - vault is able to be transferred (payments and debits frozen until it has a new owner) - * CLOSED - vault was closed by the user and all assets have been paid out - * LIQUIDATED - vault was closed by the manager, with remaining assets paid to owner + * - ACTIVE - vault is in use and can be changed + * - LIQUIDATING - vault is being liquidated by the vault manager, and cannot be + * changed by the user. If liquidation fails, vaults may remain in this state. + * An upgrade to the contract might be able to recover them. + * - TRANSFER - vault is able to be transferred (payments and debits frozen until + * it has a new owner) + * - CLOSED - vault was closed by the user and all assets have been paid out + * - LIQUIDATED - vault was closed by the manager, with remaining assets paid to + * owner */ export const Phase = /** @type {const} */ ({ ACTIVE: 'active', @@ -58,7 +63,7 @@ export const Phase = /** @type {const} */ ({ /** * @typedef {Phase[keyof Omit]} VaultPhase - * @type {{[K in VaultPhase]: Array}} + * @type {{ [K in VaultPhase]: VaultPhase[] }} */ const validTransitions = { [Phase.ACTIVE]: [Phase.LIQUIDATING, Phase.CLOSED], @@ -72,7 +77,8 @@ const validTransitions = { * * @typedef {object} VaultNotification * @property {Amount<'nat'>} locked Amount of Collateral locked - * @property {{debt: Amount<'nat'>, stabilityFee: Ratio}} debtSnapshot 'debt' at the point the compounded stabilityFee was 'stabilityFee' + * @property {{ debt: Amount<'nat'>; interest: Ratio }} debtSnapshot 'debt' at + * the point the compounded interest was 'interest' * @property {HolderPhase} vaultState */ @@ -86,28 +92,37 @@ const validTransitions = { * @property {() => Brand<'nat'>} getDebtBrand * @property {MintAndTransfer} mintAndTransfer * @property {(amount: Amount, seat: ZCFSeat) => void} burn - * @property {() => Ratio} getCompoundedStabilityFee - * @property {(oldDebt: import('./storeUtils.js').NormalizedDebt, oldCollateral: Amount<'nat'>, vaultId: VaultId, vaultPhase: VaultPhase, vault: Vault) => void} handleBalanceChange + * @property {() => Ratio} getCompoundedInterest + * @property {( + * oldDebt: import('./storeUtils.js').NormalizedDebt, + * oldCollateral: Amount<'nat'>, + * vaultId: VaultId, + * vaultPhase: VaultPhase, + * vault: Vault, + * ) => void} handleBalanceChange * @property {() => import('./vaultManager.js').GovernedParamGetters} getGovernedParams */ /** * @typedef {Readonly<{ - * idInManager: VaultId, - * manager: VaultManager, - * storageNode: StorageNode, - * vaultSeat: ZCFSeat, + * idInManager: VaultId; + * manager: VaultManager; + * storageNode: StorageNode; + * vaultSeat: ZCFSeat; * }>} ImmutableState */ /** - * Snapshot is of the debt and compounded interest when the principal was last changed. + * Snapshot is of the debt and compounded interest when the principal was last + * changed. * * @typedef {{ - * stabilityFeeSnapshot: Ratio, - * phase: VaultPhase, - * debtSnapshot: Amount<'nat'>, - * outerUpdater: import('@agoric/zoe/src/contractSupport/recorder.js').Recorder | null, + * interestSnapshot: Ratio; + * phase: VaultPhase; + * debtSnapshot: Amount<'nat'>; + * outerUpdater: + * | import('@agoric/zoe/src/contractSupport/recorder.js').Recorder + * | null; * }} MutableState */ @@ -132,7 +147,7 @@ const VaultStateShape = harden({ phase: M.any(), storageNode: M.any(), vaultSeat: M.any(), - stabilityFeeSnapshot: M.any(), + interestSnapshot: M.any(), debtSnapshot: M.any(), }); @@ -174,7 +189,7 @@ export const prepareVault = (baggage, makeRecorderKit, zcf) => { vaultSeat: zcf.makeEmptySeatKit().zcfSeat, // Two values from the same moment - stabilityFeeSnapshot: manager.getCompoundedStabilityFee(), + interestSnapshot: manager.getCompoundedInterest(), debtSnapshot: AmountMath.makeEmpty(manager.getDebtBrand()), }); }, @@ -195,7 +210,10 @@ export const prepareVault = (baggage, makeRecorderKit, zcf) => { return AmountMath.makeEmpty(this.facets.helper.debtBrand()); }, /** - * @typedef {{ give: { Collateral: Amount<'nat'>, Minted: Amount<'nat'> }, want: { Collateral: Amount<'nat'>, Minted: Amount<'nat'> } }} FullProposal + * @typedef {{ + * give: { Collateral: Amount<'nat'>; Minted: Amount<'nat'> }; + * want: { Collateral: Amount<'nat'>; Minted: Amount<'nat'> }; + * }} FullProposal */ /** * @param {ProposalRecord} partial @@ -220,9 +238,7 @@ export const prepareVault = (baggage, makeRecorderKit, zcf) => { //#endregion //#region Phase logic - /** - * @param {VaultPhase} newPhase - */ + /** @param {VaultPhase} newPhase */ assignPhase(newPhase) { const { state } = this; @@ -257,17 +273,18 @@ export const prepareVault = (baggage, makeRecorderKit, zcf) => { // update local state state.debtSnapshot = newDebt; - state.stabilityFeeSnapshot = - state.manager.getCompoundedStabilityFee(); + state.interestSnapshot = state.manager.getCompoundedInterest(); }, /** - * Update the debt balance and propagate upwards to - * maintain aggregate debt and liquidation order. + * Update the debt balance and propagate upwards to maintain aggregate + * debt and liquidation order. * - * @param {NormalizedDebt} oldDebtNormalized - prior principal and all accrued interest, normalized to the launch of the vaultManager + * @param {NormalizedDebt} oldDebtNormalized - prior principal and all + * accrued interest, normalized to the launch of the vaultManager * @param {Amount<'nat'>} oldCollateral - actual collateral - * @param {Amount<'nat'>} newDebtActual - actual principal and all accrued interest + * @param {Amount<'nat'>} newDebtActual - actual principal and all + * accrued interest */ updateDebtAccounting(oldDebtNormalized, oldCollateral, newDebtActual) { const { state, facets } = this; @@ -283,10 +300,7 @@ export const prepareVault = (baggage, makeRecorderKit, zcf) => { ); }, - /** - * - * @param {ZCFSeat} seat - */ + /** @param {ZCFSeat} seat */ getCollateralAllocated(seat) { return seat.getAmountAllocated( 'Collateral', @@ -308,7 +322,6 @@ export const prepareVault = (baggage, makeRecorderKit, zcf) => { }, /** - * * @param {Amount<'nat'>} collateralAmount * @param {Amount<'nat'>} proposedDebt */ @@ -321,18 +334,14 @@ export const prepareVault = (baggage, makeRecorderKit, zcf) => { )} for ${q(collateralAmount)} collateral`; }, - /** - * - * @param {HolderPhase} newPhase - */ + /** @param {HolderPhase} newPhase */ getStateSnapshot(newPhase) { const { state, facets } = this; - const { debtSnapshot: debt, stabilityFeeSnapshot: stabilityFee } = - state; + const { debtSnapshot: debt, interestSnapshot: interest } = state; /** @type {VaultNotification} */ return harden({ - debtSnapshot: { debt, stabilityFee }, + debtSnapshot: { debt, interest }, locked: facets.self.getCollateralAmount(), // newPhase param is so that makeTransferInvitation can finish without setting the vault's phase // TODO refactor https://github.com/Agoric/agoric-sdk/issues/4415 @@ -340,9 +349,7 @@ export const prepareVault = (baggage, makeRecorderKit, zcf) => { }); }, - /** - * call this whenever anything changes! - */ + /** call this whenever anything changes! */ updateUiState() { const { state, facets } = this; const { outerUpdater } = state; @@ -370,9 +377,7 @@ export const prepareVault = (baggage, makeRecorderKit, zcf) => { } }, - /** - * @param {ZCFSeat} seat - */ + /** @param {ZCFSeat} seat */ async closeHook(seat) { const { state, facets } = this; @@ -442,11 +447,11 @@ export const prepareVault = (baggage, makeRecorderKit, zcf) => { }, /** - * Calculate the fee, the amount to mint and the resulting debt. - * The give and the want together reflect a delta, where typically - * one is zero because they come from the gave/want of an offer - * proposal. If the `want` is zero, the `fee` will also be zero, - * so the simple math works. + * Calculate the fee, the amount to mint and the resulting debt. The + * give and the want together reflect a delta, where typically one is + * zero because they come from the gave/want of an offer proposal. If + * the `want` is zero, the `fee` will also be zero, so the simple math + * works. * * @param {Amount<'nat'>} currentDebt * @param {Amount<'nat'>} giveAmount @@ -524,7 +529,6 @@ export const prepareVault = (baggage, makeRecorderKit, zcf) => { }, /** - * * @param {ZCFSeat} clientSeat * @param {FullProposal} fp * @param {ReturnType} costs @@ -570,7 +574,6 @@ export const prepareVault = (baggage, makeRecorderKit, zcf) => { }, /** - * * @param {ZCFSeat} seat * @returns {VaultKit} */ @@ -671,9 +674,7 @@ export const prepareVault = (baggage, makeRecorderKit, zcf) => { return vaultKit; }, - /** - * Called by manager at start of liquidation. - */ + /** Called by manager at start of liquidation. */ liquidating() { const { facets } = this; @@ -683,8 +684,8 @@ export const prepareVault = (baggage, makeRecorderKit, zcf) => { }, /** - * Called by manager at end of liquidation, at which point all debts have been - * covered. + * Called by manager at end of liquidation, at which point all debts + * have been covered. */ liquidated() { const { facets } = this; @@ -776,9 +777,7 @@ export const prepareVault = (baggage, makeRecorderKit, zcf) => { ); }, - /** - * @returns {Promise} - */ + /** @returns {Promise} */ makeTransferInvitation() { const { state, facets } = this; const { outerUpdater } = state; @@ -787,7 +786,7 @@ export const prepareVault = (baggage, makeRecorderKit, zcf) => { helper.updateDebtSnapshot(self.getCurrentDebt()); const { debtSnapshot: debt, - stabilityFeeSnapshot: stabilityFee, + interestSnapshot: interest, phase, } = state; if (outerUpdater) { @@ -797,7 +796,7 @@ export const prepareVault = (baggage, makeRecorderKit, zcf) => { state.outerUpdater = null; } const transferState = { - debtSnapshot: { debt, stabilityFee }, + debtSnapshot: { debt, interest }, locked: self.getCollateralAmount(), vaultState: phase, }; @@ -810,10 +809,7 @@ export const prepareVault = (baggage, makeRecorderKit, zcf) => { // for status/debugging - /** - * - * @returns {Amount<'nat'>} - */ + /** @returns {Amount<'nat'>} */ getCollateralAmount() { const { state, facets } = this; const { vaultSeat } = state; @@ -827,42 +823,40 @@ export const prepareVault = (baggage, makeRecorderKit, zcf) => { /** * The actual current debt, including accrued interest. * - * This looks like a simple getter but it does a lot of the heavy lifting for - * interest accrual. Rather than updating all records when interest accrues, - * the vault manager updates just its rolling compounded interest. Here we - * calculate what the current debt is given what's recorded in this vault and - * what interest has compounded since this vault record was written. - * - * @see getNormalizedDebt + * This looks like a simple getter but it does a lot of the heavy + * lifting for interest accrual. Rather than updating all records when + * interest accrues, the vault manager updates just its rolling + * compounded interest. Here we calculate what the current debt is given + * what's recorded in this vault and what interest has compounded since + * this vault record was written. * * @returns {Amount<'nat'>} + * @see getNormalizedDebt */ getCurrentDebt() { const { state } = this; return calculateCurrentDebt( state.debtSnapshot, - state.stabilityFeeSnapshot, - state.manager.getCompoundedStabilityFee(), + state.interestSnapshot, + state.manager.getCompoundedInterest(), ); }, /** - * The normalization puts all debts on a common time-independent scale since - * the launch of this vault manager. This allows the manager to order vaults - * by their debt-to-collateral ratios without having to mutate the debts as - * the interest accrues. + * The normalization puts all debts on a common time-independent scale + * since the launch of this vault manager. This allows the manager to + * order vaults by their debt-to-collateral ratios without having to + * mutate the debts as the interest accrues. * + * @returns {import('./storeUtils.js').NormalizedDebt} as if the vault + * was open at the launch of this manager, before any interest + * accrued * @see getActualDebAmount - * - * @returns {import('./storeUtils.js').NormalizedDebt} as if the vault was open at the launch of this manager, before any interest accrued */ getNormalizedDebt() { const { state } = this; // @ts-expect-error cast - return reverseInterest( - state.debtSnapshot, - state.stabilityFeeSnapshot, - ); + return reverseInterest(state.debtSnapshot, state.interestSnapshot); }, }, }, diff --git a/packages/inter-protocol/src/vaultFactory/vaultDirector.js b/packages/inter-protocol/src/vaultFactory/vaultDirector.js index cebc345d82c..c60b8b2d544 100644 --- a/packages/inter-protocol/src/vaultFactory/vaultDirector.js +++ b/packages/inter-protocol/src/vaultFactory/vaultDirector.js @@ -44,30 +44,34 @@ const trace = makeTracer('VD', true); /** * @typedef {{ - * collaterals: Brand[], - * rewardPoolAllocation: AmountKeywordRecord, + * collaterals: Brand[]; + * rewardPoolAllocation: AmountKeywordRecord; * }} MetricsNotification * - * @typedef {Readonly<{ - * }>} ImmutableState + * @typedef {Readonly<{}>} ImmutableState * - * @typedef {{ - * }} MutableState + * @typedef {{}} MutableState * * @typedef {ImmutableState & MutableState} State * * @typedef {{ - * burnDebt: BurnDebt, - * getGovernedParams: (collateralBrand: Brand) => import('./vaultManager.js').GovernedParamGetters, - * mintAndTransfer: MintAndTransfer, - * getShortfallReporter: () => Promise, + * burnDebt: BurnDebt; + * getGovernedParams: ( + * collateralBrand: Brand, + * ) => import('./vaultManager.js').GovernedParamGetters; + * mintAndTransfer: MintAndTransfer; + * getShortfallReporter: () => Promise< + * import('../reserve/assetReserve.js').ShortfallReporter + * >; * }} FactoryPowersFacet * * @typedef {Readonly<{ * state: State; * }>} MethodContext * - * @typedef {import('@agoric/governance/src/contractGovernance/typedParamManager').TypedParamManager} VaultDirectorParamManager + * @typedef {import('@agoric/governance/src/contractGovernance/typedParamManager').TypedParamManager< + * import('./params.js').VaultDirectorParams + * >} VaultDirectorParamManager */ const shortfallInvitationKey = 'shortfallInvitation'; @@ -76,7 +80,7 @@ const shortfallInvitationKey = 'shortfallInvitation'; * @param {import('@agoric/ertp').Baggage} baggage * @param {import('./vaultFactory.js').VaultFactoryZCF} zcf * @param {VaultDirectorParamManager} directorParamManager - * @param {ZCFMint<"nat">} debtMint + * @param {ZCFMint<'nat'>} debtMint * @param {ERef} timer * @param {ERef} auctioneer * @param {ERef} storageNode @@ -126,9 +130,7 @@ const prepareVaultDirector = ( const managersNode = E(storageNode).makeChildNode('managers'); - /** - * @returns {MetricsNotification} - */ + /** @returns {MetricsNotification} */ const sampleMetrics = () => { return harden({ collaterals: Array.from(collateralManagers.keys()), @@ -188,8 +190,8 @@ const prepareVaultDirector = ( }, /** - * Let the manager add rewards to the rewardPoolSeat without - * exposing the rewardPoolSeat to them. + * Let the manager add rewards to the rewardPoolSeat without exposing the + * rewardPoolSeat to them. * * @type {MintAndTransfer} */ @@ -264,9 +266,7 @@ const prepareVaultDirector = ( }); }; - /** - * @returns {State} - */ + /** @returns {State} */ const initState = () => { return {}; }; @@ -276,7 +276,7 @@ const prepareVaultDirector = ( * * @param {import('./vaultFactory.js').VaultFactoryZCF} zcf * @param {VaultDirectorParamManager} directorParamManager - * @param {ZCFMint<"nat">} debtMint + * @param {ZCFMint<'nat'>} debtMint */ const makeVaultDirector = prepareExoClassKit( baggage, @@ -331,9 +331,7 @@ const prepareVaultDirector = ( } }, }), - /** - * @param {string} name - */ + /** @param {string} name */ getInvitation(name) { return directorParamManager.getInternalParamValue(name); }, @@ -442,9 +440,7 @@ const prepareVaultDirector = ( }, }, public: { - /** - * @param {Brand} brandIn - */ + /** @param {Brand} brandIn */ getCollateralManager(brandIn) { collateralManagers.has(brandIn) || Fail`Not a supported collateral type ${brandIn}`; @@ -465,22 +461,16 @@ const prepareVaultDirector = ( getPublicTopics() { return topics; }, - /** - * subscription for the paramManager for the vaultFactory's electorate - */ + /** subscription for the paramManager for the vaultFactory's electorate */ getElectorateSubscription() { return directorParamManager.getSubscription(); }, - /** - * @param {{ collateralBrand: Brand }} selector - */ + /** @param {{ collateralBrand: Brand }} selector */ getGovernedParams({ collateralBrand }) { // TODO use named getters of TypedParamManager return vaultParamManagers.get(collateralBrand).getParams(); }, - /** - * @param {string} name - */ + /** @param {string} name */ getInvitationAmount(name) { return directorParamManager.getInvitationAmount(name); }, @@ -500,9 +490,7 @@ const prepareVaultDirector = ( rescheduleWaker, ); }, - /** - * Start non-durable processes (or restart if needed after vat restart) - */ + /** Start non-durable processes (or restart if needed after vat restart) */ async start() { const { helper, machine } = this.facets; @@ -527,7 +515,9 @@ harden(prepareVaultDirector); /** * Prepare the VaultDirector kind, get or make the singleton * - * @type {(...pvdArgs: Parameters) => ReturnType>} + * @type {( + * ...pvdArgs: Parameters + * ) => ReturnType>} */ export const provideDirector = (...args) => { const makeVaultDirector = prepareVaultDirector(...args); diff --git a/packages/inter-protocol/src/vaultFactory/vaultFactory.js b/packages/inter-protocol/src/vaultFactory/vaultFactory.js index 082aae2eb91..a2af199ff3e 100644 --- a/packages/inter-protocol/src/vaultFactory/vaultFactory.js +++ b/packages/inter-protocol/src/vaultFactory/vaultFactory.js @@ -34,40 +34,46 @@ import { provideDirector } from './vaultDirector.js'; const trace = makeTracer('VF', true); /** - * @typedef {ZCF & { - * auctioneerPublicFacet: import('../auction/auctioneer.js').AuctioneerPublicFacet, - * priceAuthority: ERef, - * reservePublicFacet: AssetReservePublicFacet, - * timerService: import('@agoric/time/src/types').TimerService, - * }>} VaultFactoryZCF + * @typedef {ZCF< + * GovernanceTerms & { + * auctioneerPublicFacet: import('../auction/auctioneer.js').AuctioneerPublicFacet; + * priceAuthority: ERef; + * reservePublicFacet: AssetReservePublicFacet; + * timerService: import('@agoric/time/src/types').TimerService; + * } + * >} VaultFactoryZCF */ -export const privateArgsShape = M.splitRecord( - harden({ - marshaller: M.remotable('Marshaller'), - storageNode: StorageNodeShape, - }), - harden({ - // only necessary on first invocation, not subsequent - feeMintAccess: FeeMintAccessShape, - initialPoserInvitation: InvitationShape, - initialShortfallInvitation: InvitationShape, - }), -); -harden(privateArgsShape); +/** @type {ContractMeta} */ +export const meta = { + privateArgsShape: M.splitRecord( + { + marshaller: M.remotable('Marshaller'), + storageNode: StorageNodeShape, + }, + { + // only necessary on first invocation, not subsequent + feeMintAccess: FeeMintAccessShape, + initialPoserInvitation: InvitationShape, + initialShortfallInvitation: InvitationShape, + }, + ), + upgradability: 'canUpgrade', +}; +harden(meta); /** * @param {VaultFactoryZCF} zcf * @param {{ - * feeMintAccess: FeeMintAccess, - * initialPoserInvitation: Invitation, - * initialShortfallInvitation: Invitation, - * storageNode: ERef, - * marshaller: ERef, + * feeMintAccess: FeeMintAccess; + * initialPoserInvitation: Invitation; + * initialShortfallInvitation: Invitation; + * storageNode: ERef; + * marshaller: ERef; * }} privateArgs * @param {import('@agoric/ertp').Baggage} baggage */ -export const prepare = async (zcf, privateArgs, baggage) => { +export const start = async (zcf, privateArgs, baggage) => { trace('prepare start', privateArgs, [...baggage.keys()]); const { initialPoserInvitation, @@ -145,5 +151,6 @@ export const prepare = async (zcf, privateArgs, baggage) => { publicFacet: director.public, }); }; +harden(start); -/** @typedef {ContractOf} VaultFactoryContract */ +/** @typedef {ContractOf} VaultFactoryContract */ diff --git a/packages/inter-protocol/src/vaultFactory/vaultHolder.js b/packages/inter-protocol/src/vaultFactory/vaultHolder.js index ca9640d2005..b5e8ef61507 100644 --- a/packages/inter-protocol/src/vaultFactory/vaultHolder.js +++ b/packages/inter-protocol/src/vaultFactory/vaultHolder.js @@ -1,6 +1,4 @@ -/** - * @file Use-object for the owner of a vault - */ +/** @file Use-object for the owner of a vault */ import { AmountShape } from '@agoric/ertp'; import { M, prepareExoClassKit } from '@agoric/vat-data'; import { TopicsRecordShape } from '@agoric/zoe/src/contractSupport/index.js'; @@ -10,8 +8,8 @@ const { Fail } = assert; /** * @typedef {{ - * topicKit: import('@agoric/zoe/src/contractSupport/recorder.js').RecorderKit, - * vault: Vault | null, + * topicKit: import('@agoric/zoe/src/contractSupport/recorder.js').RecorderKit; + * vault: Vault | null; * }} State */ @@ -25,7 +23,7 @@ const HolderI = M.interface('holder', { makeTransferInvitation: M.call().returns(M.promise()), }); -/** @type {{ [name: string]: [ description: string, valueShape: Pattern ] }} */ +/** @type {{ [name: string]: [description: string, valueShape: Pattern] }} */ const PUBLIC_TOPICS = { vault: ['Vault holder status', M.any()], }; @@ -48,7 +46,6 @@ export const prepareVaultHolder = (baggage, makeRecorderKit) => { }), }, /** - * * @param {Vault} vault * @param {StorageNode} storageNode * @returns {State} @@ -61,9 +58,7 @@ export const prepareVaultHolder = (baggage, makeRecorderKit) => { }, { helper: { - /** - * @throws if this holder no longer owns the vault - */ + /** @throws if this holder no longer owns the vault */ owned() { const { vault } = this.state; if (!vault) { @@ -104,8 +99,8 @@ export const prepareVaultHolder = (baggage, makeRecorderKit) => { return this.facets.helper.owned().makeCloseInvitation(); }, /** - * Starting a transfer revokes the vault holder. The associated updater will - * get a special notification that the vault is being transferred. + * Starting a transfer revokes the vault holder. The associated updater + * will get a special notification that the vault is being transferred. */ makeTransferInvitation() { const vault = this.facets.helper.owned(); diff --git a/packages/inter-protocol/src/vaultFactory/vaultKit.js b/packages/inter-protocol/src/vaultFactory/vaultKit.js index 354ac3bf5d5..dbabbcf7b9c 100644 --- a/packages/inter-protocol/src/vaultFactory/vaultKit.js +++ b/packages/inter-protocol/src/vaultFactory/vaultKit.js @@ -8,7 +8,8 @@ import { prepareVaultHolder } from './vaultHolder.js'; const trace = makeTracer('VK', true); /** - * Wrap the VaultHolder duration object in a record suitable for the result of an invitation. + * Wrap the VaultHolder duration object in a record suitable for the result of + * an invitation. * * @param {import('@agoric/ertp').Baggage} baggage * @param {import('@agoric/zoe/src/contractSupport/recorder.js').MakeRecorderKit} makeRecorderKit @@ -43,4 +44,4 @@ export const prepareVaultKit = (baggage, makeRecorderKit) => { return makeVaultKit; }; -/** @typedef {(ReturnType>)} VaultKit */ +/** @typedef {ReturnType>} VaultKit */ diff --git a/packages/inter-protocol/src/vaultFactory/vaultManager.js b/packages/inter-protocol/src/vaultFactory/vaultManager.js index 1ce51665681..dd9daf9efee 100644 --- a/packages/inter-protocol/src/vaultFactory/vaultManager.js +++ b/packages/inter-protocol/src/vaultFactory/vaultManager.js @@ -2,18 +2,20 @@ /** * @file Vault Manager object manages vault-based debts for a collateral type. * - * The responsibilities include: - * - opening a new vault backed by the collateral - * - publishing metrics on the vault economy for that collateral - * - charging interest on all active vaults - * - liquidating active vaults that have exceeded the debt ratio + * The responsibilities include: * - * Once a vault is settled (liquidated or closed) it can still be used, traded, - * etc. but is no longer the concern of the manager. It can't be liquidated, - * have interest charged, or be counted in the metrics. + * - opening a new vault backed by the collateral + * - publishing metrics on the vault economy for that collateral + * - charging interest on all active vaults + * - liquidating active vaults that have exceeded the debt ratio * - * Undercollateralized vaults can have their assets sent to the auctioneer to be - * liquidated. If the auction is unsuccessful, the liquidation may be reverted. + * Once a vault is settled (liquidated or closed) it can still be used, traded, + * etc. but is no longer the concern of the manager. It can't be liquidated, + * have interest charged, or be counted in the metrics. + * + * Undercollateralized vaults can have their assets sent to the auctioneer to be + * liquidated. If the auction is unsuccessful, the liquidation may be + * reverted. */ import '@agoric/zoe/exported.js'; @@ -73,93 +75,102 @@ const trace = makeTracer('VM'); // Metrics naming scheme: nouns are present values; past-participles are accumulative. /** * @typedef {object} MetricsNotification - * - * @property {Ratio | null} lockedQuote priceQuote that will be used for liquidation. - * Non-null from priceLock time until liquidation has taken place. - * @property {number} numActiveVaults present count of vaults - * @property {number} numLiquidatingVaults present count of liquidating vaults - * @property {Amount<'nat'>} totalCollateral present sum of collateral across all vaults - * @property {Amount<'nat'>} totalDebt present sum of debt across all vaults - * @property {Amount<'nat'>} retainedCollateral collateral held as a result of not returning excess refunds - * to owners of vaults liquidated with shortfalls - * @property {Amount<'nat'>} liquidatingCollateral present sum of collateral in vaults sent for liquidation - * @property {Amount<'nat'>} liquidatingDebt present sum of debt in vaults sent for liquidation - * - * @property {Amount<'nat'>} totalCollateralSold running sum of collateral sold in liquidation - * @property {Amount<'nat'>} totalOverageReceived running sum of overages, central received greater than debt - * @property {Amount<'nat'>} totalProceedsReceived running sum of minted received from liquidation - * @property {Amount<'nat'>} totalShortfallReceived running sum of shortfalls, minted received less than debt - * @property {number} numLiquidationsCompleted running count of liquidated vaults - * @property {number} numLiquidationsAborted running count of vault liquidations that were reverted. + * @property {Ratio | null} lockedQuote priceQuote that will be used for + * liquidation. Non-null from priceLock time until liquidation has taken + * place. + * @property {number} numActiveVaults present count of vaults + * @property {number} numLiquidatingVaults present count of liquidating vaults + * @property {Amount<'nat'>} totalCollateral present sum of collateral across + * all vaults + * @property {Amount<'nat'>} totalDebt present sum of debt across all vaults + * @property {Amount<'nat'>} retainedCollateral collateral held as a result of + * not returning excess refunds to owners of vaults liquidated with + * shortfalls + * @property {Amount<'nat'>} liquidatingCollateral present sum of collateral in + * vaults sent for liquidation + * @property {Amount<'nat'>} liquidatingDebt present sum of debt in vaults sent + * for liquidation + * @property {Amount<'nat'>} totalCollateralSold running sum of collateral sold + * in liquidation + * @property {Amount<'nat'>} totalOverageReceived running sum of overages, + * central received greater than debt + * @property {Amount<'nat'>} totalProceedsReceived running sum of minted + * received from liquidation + * @property {Amount<'nat'>} totalShortfallReceived running sum of shortfalls, + * minted received less than debt + * @property {number} numLiquidationsCompleted running count of liquidated + * vaults + * @property {number} numLiquidationsAborted running count of vault liquidations + * that were reverted. */ /** * @typedef {{ - * compoundedStabilityFee: Ratio, - * stabilityFee: Ratio, - * latestStabilityFeeUpdate: Timestamp, + * compoundedInterest: Ratio; + * interestRate: Ratio; + * latestInterestUpdate: Timestamp; * }} AssetState * * @typedef {{ - * getChargingPeriod: () => RelativeTime, - * getRecordingPeriod: () => RelativeTime, - * getDebtLimit: () => Amount<'nat'>, - * getStabilityFee: () => Ratio, - * getLiquidationPadding: () => Ratio, - * getLiquidationMargin: () => Ratio, - * getLiquidationPenalty: () => Ratio, - * getMintFee: () => Ratio, - * getMinInitialDebt: () => Amount<'nat'>, + * getChargingPeriod: () => RelativeTime; + * getRecordingPeriod: () => RelativeTime; + * getDebtLimit: () => Amount<'nat'>; + * getInterestRate: () => Ratio; + * getLiquidationPadding: () => Ratio; + * getLiquidationMargin: () => Ratio; + * getLiquidationPenalty: () => Ratio; + * getMintFee: () => Ratio; + * getMinInitialDebt: () => Amount<'nat'>; * }} GovernedParamGetters */ /** * @typedef {Readonly<{ - * debtMint: ZCFMint<'nat'>, - * collateralBrand: Brand<'nat'>, - * collateralUnit: Amount<'nat'>, - * descriptionScope: string, - * startTimeStamp: Timestamp, - * storageNode: StorageNode, + * debtMint: ZCFMint<'nat'>; + * collateralBrand: Brand<'nat'>; + * collateralUnit: Amount<'nat'>; + * descriptionScope: string; + * startTimeStamp: Timestamp; + * storageNode: StorageNode; * }>} HeldParams */ /** * @typedef {{ - * assetTopicKit: import('@agoric/zoe/src/contractSupport/recorder.js').RecorderKit, - * debtBrand: Brand<'nat'>, - * liquidatingVaults: SetStore, - * metricsTopicKit: import('@agoric/zoe/src/contractSupport/recorder.js').RecorderKit, - * poolIncrementSeat: ZCFSeat, - * retainedCollateralSeat: ZCFSeat, - * unsettledVaults: MapStore, + * assetTopicKit: import('@agoric/zoe/src/contractSupport/recorder.js').RecorderKit; + * debtBrand: Brand<'nat'>; + * liquidatingVaults: SetStore; + * metricsTopicKit: import('@agoric/zoe/src/contractSupport/recorder.js').RecorderKit; + * poolIncrementSeat: ZCFSeat; + * retainedCollateralSeat: ZCFSeat; + * unsettledVaults: MapStore; * }} ImmutableState */ /** * @typedef {{ - * compoundedStabilityFee: Ratio, - * latestStabilityFeeUpdate: Timestamp, - * numLiquidationsCompleted: number, - * numLiquidationsAborted: number, - * totalCollateral: Amount<'nat'>, - * totalCollateralSold: Amount<'nat'>, - * totalDebt: Amount<'nat'>, - * liquidatingCollateral: Amount<'nat'>, - * liquidatingDebt: Amount<'nat'>, - * totalOverageReceived: Amount<'nat'>, - * totalProceedsReceived: Amount<'nat'>, - * totalShortfallReceived: Amount<'nat'>, - * vaultCounter: number, - * lockedQuote: PriceQuote | undefined, + * compoundedInterest: Ratio; + * latestInterestUpdate: Timestamp; + * numLiquidationsCompleted: number; + * numLiquidationsAborted: number; + * totalCollateral: Amount<'nat'>; + * totalCollateralSold: Amount<'nat'>; + * totalDebt: Amount<'nat'>; + * liquidatingCollateral: Amount<'nat'>; + * liquidatingDebt: Amount<'nat'>; + * totalOverageReceived: Amount<'nat'>; + * totalProceedsReceived: Amount<'nat'>; + * totalShortfallReceived: Amount<'nat'>; + * vaultCounter: number; + * lockedQuote: PriceQuote | undefined; * }} MutableState */ /** * @type {(brand: Brand) => { - * prioritizedVaults: ReturnType, - * storedQuotesNotifier: import('@agoric/notifier').StoredNotifier, - * storedCollateralQuote: PriceQuote, + * prioritizedVaults: ReturnType; + * storedQuotesNotifier: import('@agoric/notifier').StoredNotifier; + * storedCollateralQuote: PriceQuote; * }} */ // any b/c will be filled after start() @@ -168,11 +179,11 @@ const collateralEphemera = makeEphemeraProvider(() => /** @type {any} */ ({})); /** * @param {import('@agoric/ertp').Baggage} baggage * @param {{ - * zcf: import('./vaultFactory.js').VaultFactoryZCF, - * marshaller: ERef, - * makeRecorderKit: import('@agoric/zoe/src/contractSupport/recorder.js').MakeRecorderKit, - * makeERecorderKit: import('@agoric/zoe/src/contractSupport/recorder.js').MakeERecorderKit, - * factoryPowers: import('./vaultDirector.js').FactoryPowersFacet, + * zcf: import('./vaultFactory.js').VaultFactoryZCF; + * marshaller: ERef; + * makeRecorderKit: import('@agoric/zoe/src/contractSupport/recorder.js').MakeRecorderKit; + * makeERecorderKit: import('@agoric/zoe/src/contractSupport/recorder.js').MakeERecorderKit; + * factoryPowers: import('./vaultDirector.js').FactoryPowersFacet; * }} powers */ export const prepareVaultManagerKit = ( @@ -203,8 +214,9 @@ export const prepareVaultManagerKit = ( poolIncrementSeat: zcf.makeEmptySeatKit().zcfSeat, /** - * Vaults that have been sent for liquidation. When we get proceeds (or lack - * thereof) back from the liquidator, we will allocate them among the vaults. + * Vaults that have been sent for liquidation. When we get proceeds (or + * lack thereof) back from the liquidator, we will allocate them among the + * vaults. * * @type {SetStore} */ @@ -230,8 +242,8 @@ export const prepareVaultManagerKit = ( return harden({ ...params, ...immutable, - compoundedStabilityFee: makeRatio(100n, debtBrand), // starts at 1.0, no interest - latestStabilityFeeUpdate: startTimeStamp, + compoundedInterest: makeRatio(100n, debtBrand), // starts at 1.0, no interest + latestInterestUpdate: startTimeStamp, numLiquidationsCompleted: 0, numLiquidationsAborted: 0, totalCollateral: zeroCollateral, @@ -255,7 +267,7 @@ export const prepareVaultManagerKit = ( makeVaultInvitation: M.call().returns(M.promise()), getPublicTopics: M.call().returns(TopicsRecordShape), getQuotes: M.call().returns(NotifierShape), - getCompoundedStabilityFee: M.call().returns(RatioShape), + getCompoundedInterest: M.call().returns(RatioShape), }), helper: M.interface( 'helper', @@ -276,7 +288,7 @@ export const prepareVaultManagerKit = ( getAssetSubscriber: M.call().returns(SubscriberShape), getCollateralBrand: M.call().returns(BrandShape), getDebtBrand: M.call().returns(BrandShape), - getCompoundedStabilityFee: M.call().returns(RatioShape), + getCompoundedInterest: M.call().returns(RatioShape), scopeDescription: M.call(M.string()).returns(M.string()), handleBalanceChange: M.call( AmountShape, @@ -319,8 +331,8 @@ export const prepareVaultManagerKit = ( const ephemera = collateralEphemera(this.state.collateralBrand); return ephemera.storedQuotesNotifier; }, - getCompoundedStabilityFee() { - return this.state.compoundedStabilityFee; + getCompoundedInterest() { + return this.state.compoundedInterest; }, getPublicTopics() { const { assetTopicKit, metricsTopicKit } = this.state; @@ -339,9 +351,7 @@ export const prepareVaultManagerKit = ( // Some of these could go in closures but are kept on a facet anticipating future durability options. helper: { - /** - * Start non-durable processes (or restart if needed after vat restart) - */ + /** Start non-durable processes (or restart if needed after vat restart) */ start() { const { state, facets } = this; trace(state.collateralBrand, 'helper.start()', state.vaultCounter); @@ -409,9 +419,7 @@ export const prepareVaultManagerKit = ( }); trace('helper.start() done'); }, - /** - * @param {Timestamp} updateTime - */ + /** @param {Timestamp} updateTime */ async chargeAllVaults(updateTime) { const { state, facets } = this; const { collateralBrand, debtMint, poolIncrementSeat } = state; @@ -419,9 +427,9 @@ export const prepareVaultManagerKit = ( updateTime, }); - const stabilityFee = factoryPowers + const interestRate = factoryPowers .getGovernedParams(collateralBrand) - .getStabilityFee(); + .getInterestRate(); // Update state with the results of charging interest @@ -433,7 +441,7 @@ export const prepareVaultManagerKit = ( seatAllocationKeyword: 'Minted', }, { - stabilityFee, + interestRate, chargingPeriod: factoryPowers .getGovernedParams(collateralBrand) .getChargingPeriod(), @@ -442,15 +450,15 @@ export const prepareVaultManagerKit = ( .getRecordingPeriod(), }, { - latestStabilityFeeUpdate: state.latestStabilityFeeUpdate, - compoundedStabilityFee: state.compoundedStabilityFee, + latestInterestUpdate: state.latestInterestUpdate, + compoundedInterest: state.compoundedInterest, totalDebt: state.totalDebt, }, updateTime, ); - state.compoundedStabilityFee = changes.compoundedStabilityFee; - state.latestStabilityFeeUpdate = changes.latestStabilityFeeUpdate; + state.compoundedInterest = changes.compoundedInterest; + state.latestInterestUpdate = changes.latestInterestUpdate; state.totalDebt = changes.totalDebt; return facets.helper.assetNotify(); @@ -458,14 +466,14 @@ export const prepareVaultManagerKit = ( assetNotify() { const { state } = this; const { collateralBrand, assetTopicKit } = state; - const stabilityFee = factoryPowers + const interestRate = factoryPowers .getGovernedParams(collateralBrand) - .getStabilityFee(); + .getInterestRate(); /** @type {AssetState} */ const payload = harden({ - compoundedStabilityFee: state.compoundedStabilityFee, - stabilityFee, - latestStabilityFeeUpdate: state.latestStabilityFeeUpdate, + compoundedInterest: state.compoundedInterest, + interestRate, + latestInterestUpdate: state.latestInterestUpdate, }); return assetTopicKit.recorder.write(payload); }, @@ -515,7 +523,6 @@ export const prepareVaultManagerKit = ( state.liquidatingDebt = AmountMath.add(state.liquidatingDebt, debt); }, /** - * * @param {Amount<'nat'>} debt * @param {Amount<'nat'>} collateral * @param {Amount<'nat'>} overage @@ -598,14 +605,18 @@ export const prepareVaultManagerKit = ( }, /** - * This is designed to tolerate an incomplete plan, in case calculateDistributionPlan encounters - * an error during its calculation. We don't have a way to induce such errors in CI so we've - * done so manually in dev and verified this function recovers as expected. + * This is designed to tolerate an incomplete plan, in case + * calculateDistributionPlan encounters an error during its calculation. + * We don't have a way to induce such errors in CI so we've done so + * manually in dev and verified this function recovers as expected. * * @param {AmountKeywordRecord} proceeds * @param {Amount<'nat'>} totalDebt * @param {Pick} oraclePriceAtStart - * @param {MapStore, debtAmount: Amount<'nat'>}>} vaultData + * @param {MapStore< + * Vault, + * { collateralAmount: Amount<'nat'>; debtAmount: Amount<'nat'> } + * >} vaultData * @param {Amount<'nat'>} totalCollateral */ planProceedsDistribution( @@ -661,13 +672,14 @@ export const prepareVaultManagerKit = ( }, /** - * This is designed to tolerate an incomplete plan, in case calculateDistributionPlan encounters - * an error during its calculation. We don't have a way to induce such errors in CI so we've - * done so manually in dev and verified this function recovers as expected. + * This is designed to tolerate an incomplete plan, in case + * calculateDistributionPlan encounters an error during its calculation. + * We don't have a way to induce such errors in CI so we've done so + * manually in dev and verified this function recovers as expected. * * @param {object} obj * @param {import('./proceeds.js').DistributionPlan} obj.plan - * @param {Array} obj.vaultsInPlan + * @param {Vault[]} obj.vaultsInPlan * @param {ZCFSeat} obj.liqSeat * @param {Amount<'nat'>} obj.totalCollateral * @param {Amount<'nat'>} obj.totalDebt @@ -840,11 +852,9 @@ export const prepareVaultManagerKit = ( const { descriptionScope } = this.state; return `${descriptionScope}: ${base}`; }, - /** - * coefficient on existing debt to calculate new debt - */ - getCompoundedStabilityFee() { - return this.state.compoundedStabilityFee; + /** coefficient on existing debt to calculate new debt */ + getCompoundedInterest() { + return this.state.compoundedInterest; }, /** * Called by a vault when its balances change. @@ -852,7 +862,8 @@ export const prepareVaultManagerKit = ( * @param {NormalizedDebt} oldDebtNormalized * @param {Amount<'nat'>} oldCollateral * @param {VaultId} vaultId - * @param {import('./vault.js').VaultPhase} vaultPhase at the end of whatever change updated balances + * @param {import('./vault.js').VaultPhase} vaultPhase at the end of + * whatever change updated balances * @param {Vault} vault * @returns {void} */ @@ -937,9 +948,7 @@ export const prepareVaultManagerKit = ( return factoryPowers.getGovernedParams(collateralBrand); }, - /** - * @param {ZCFSeat} seat - */ + /** @param {ZCFSeat} seat */ async makeVaultKit(seat) { const { state, @@ -1042,18 +1051,16 @@ export const prepareVaultManagerKit = ( ); state.lockedQuote = storedCollateralQuote; - facets.helper.writeMetrics(); + void facets.helper.writeMetrics(); return storedCollateralQuote; }, - /** - * @param {ERef} auctionPF - */ + /** @param {ERef} auctionPF */ async liquidateVaults(auctionPF) { const { state, facets } = this; const { self, helper } = facets; const { collateralBrand, - compoundedStabilityFee, + compoundedInterest, debtBrand, liquidatingVaults, lockedQuote, @@ -1082,7 +1089,7 @@ export const prepareVaultManagerKit = ( zcf, { quote: lockedQuote, - interest: compoundedStabilityFee, + interest: compoundedInterest, margin: liqMargin, }, prioritizedVaults, @@ -1094,6 +1101,7 @@ export const prepareVaultManagerKit = ( state.lockedQuote = undefined; if (vaultData.getSize() === 0) { + void helper.writeMetrics(); return; } trace( @@ -1157,7 +1165,7 @@ export const prepareVaultManagerKit = ( liquidatingVaults.delete(vault); } - await facets.helper.writeMetrics(); + void helper.writeMetrics(); }, }, }, @@ -1167,11 +1175,11 @@ export const prepareVaultManagerKit = ( helper.start(); void state.assetTopicKit.recorder.write( harden({ - compoundedStabilityFee: state.compoundedStabilityFee, - stabilityFee: factoryPowers + compoundedInterest: state.compoundedInterest, + interestRate: factoryPowers .getGovernedParams(state.collateralBrand) - .getStabilityFee(), - latestStabilityFeeUpdate: state.latestStabilityFeeUpdate, + .getInterestRate(), + latestInterestUpdate: state.latestInterestUpdate, }), ); @@ -1181,7 +1189,12 @@ export const prepareVaultManagerKit = ( }, ); - /** @param {Omit[0], 'metricsStorageNode'>} externalParams */ + /** + * @param {Omit< + * Parameters[0], + * 'metricsStorageNode' + * >} externalParams + */ const makeVaultManagerKit = async externalParams => { const metricsStorageNode = await E( externalParams.storageNode, @@ -1194,15 +1207,13 @@ export const prepareVaultManagerKit = ( return makeVaultManagerKit; }; +/** @typedef {Awaited>>} VaultManagerKit */ /** - * @typedef {Awaited>>} VaultManagerKit - */ -/** - * @typedef {VaultManagerKit['self']} VaultManager - * Each VaultManager manages a single collateral type. + * @typedef {VaultManagerKit['self']} VaultManager Each VaultManager manages a + * single collateral type. * - * It manages some number of outstanding debt positions, each called a Vault, - * for which the collateral is provided in exchange for borrowed Minted. + * It manages some number of outstanding debt positions, each called a Vault, + * for which the collateral is provided in exchange for borrowed Minted. */ /** @typedef {VaultManagerKit['collateral']} CollateralManager */ diff --git a/packages/inter-protocol/test/auction/test-auctionContract.js b/packages/inter-protocol/test/auction/test-auctionContract.js index 6c6cde42d83..16960075028 100644 --- a/packages/inter-protocol/test/auction/test-auctionContract.js +++ b/packages/inter-protocol/test/auction/test-auctionContract.js @@ -39,14 +39,20 @@ const test = anyTest; /** * @typedef {Record & { - * bid: IssuerKit & import('../supports.js').AmountUtils, - * collateral: IssuerKit & import('../supports.js').AmountUtils, - * zoe: ZoeService, + * bid: IssuerKit & import('../supports.js').AmountUtils; + * collateral: IssuerKit & import('../supports.js').AmountUtils; + * zoe: ZoeService; * }} Context */ /** - * @typedef {Awaited>>} BookDataTracker + * @typedef {Awaited< + * ReturnType< + * subscriptionTracker< + * import('../../src/auction/auctionBook.js').BookDataNotification + * > + * > + * >} BookDataTracker */ const trace = makeTracer('Test AuctContract', false); @@ -86,8 +92,10 @@ test.before(async t => { }); /** - * @param {import('ava').ExecutionContext>>} t - * @param {*} params + * @param {import('ava').ExecutionContext< + * Awaited> + * >} t + * @param {any} params */ export const setupServices = async (t, params = defaultParams) => { const { @@ -122,7 +130,9 @@ export const setupServices = async (t, params = defaultParams) => { }; /** - * @param {import('ava').ExecutionContext>>} t + * @param {import('ava').ExecutionContext< + * Awaited> + * >} t * @param {any} [params] */ const makeAuctionDriver = async (t, params = defaultParams) => { @@ -208,7 +218,7 @@ const makeAuctionDriver = async (t, params = defaultParams) => { return seat; }; - /** @type {MapStore} */ + /** @type {MapStore} */ const bookDataTrackers = makeScalarMapStore('trackers'); /** diff --git a/packages/inter-protocol/test/auction/test-proportionalDist.js b/packages/inter-protocol/test/auction/test-proportionalDist.js index 433ddc016ec..8583d205f57 100644 --- a/packages/inter-protocol/test/auction/test-proportionalDist.js +++ b/packages/inter-protocol/test/auction/test-proportionalDist.js @@ -29,13 +29,14 @@ test.before(async t => { }); /** - * @see {distributeProportionalSharesWithLimits} for logical cases A-E - * - * @param {import('ava').ExecutionContext>>} t + * @param {import('ava').ExecutionContext< + * Awaited> + * >} t * @param {[collateralReturned: bigint, bidRaise: bigint]} amountsReturned - * @param {Array<{deposit: number, goal?: number}>} rawDeposits - * @param {[transfers: Array<[bigint, bigint]>, leftovers: [bigint, bigint]]} rawExpected + * @param {{ deposit: number; goal?: number }[]} rawDeposits + * @param {[transfers: [bigint, bigint][], leftovers: [bigint, bigint]]} rawExpected * @param {string} kwd + * @see {distributeProportionalSharesWithLimits} for logical cases A-E */ const checkProportions = ( t, @@ -191,7 +192,7 @@ test( ], ); -const transferSharing20 = /** @type {Array<[bigint, bigint]>} */ ([ +const transferSharing20 = /** @type {[bigint, bigint][]} */ ([ [20n, 4n], [60n, 12n], [20n, 4n], diff --git a/packages/inter-protocol/test/auction/test-scheduleMath.js b/packages/inter-protocol/test/auction/test-scheduleMath.js index 3ce414d2ecc..96b3a35f225 100644 --- a/packages/inter-protocol/test/auction/test-scheduleMath.js +++ b/packages/inter-protocol/test/auction/test-scheduleMath.js @@ -37,7 +37,7 @@ const makeDefaultParams = ({ /** * @param {any} t - * @param {*} params + * @param {any} params * @param {number} baseTime * @param {any} rawExpect */ @@ -58,7 +58,7 @@ const checkSchedule = (t, params, baseTime, rawExpect) => { /** * @param {any} t - * @param {*} params + * @param {any} params * @param {number} baseTime * @param {string | RegExp} message */ diff --git a/packages/inter-protocol/test/auction/test-scheduler.js b/packages/inter-protocol/test/auction/test-scheduler.js index 707f849ef68..e33d5bddf7f 100644 --- a/packages/inter-protocol/test/auction/test-scheduler.js +++ b/packages/inter-protocol/test/auction/test-scheduler.js @@ -27,7 +27,7 @@ import { test('schedule start to finish', async t => { const { zcf, zoe } = await setupZCFTest(); const installations = await setUpInstallations(zoe); - /** @type {TimerService & { advanceTo: (when: Timestamp) => bigint; }} */ + /** @type {TimerService & { advanceTo: (when: Timestamp) => bigint }} */ const timer = buildManualTimer(); const timerBrand = await timer.getTimerBrand(); @@ -258,7 +258,7 @@ test('schedule start to finish', async t => { test('lowest >= starting', async t => { const { zcf, zoe } = await setupZCFTest(); const installations = await setUpInstallations(zoe); - /** @type {TimerService & { advanceTo: (when: Timestamp) => void; }} */ + /** @type {TimerService & { advanceTo: (when: Timestamp) => void }} */ const timer = buildManualTimer(); const timerBrand = await timer.getTimerBrand(); @@ -306,7 +306,7 @@ test('lowest >= starting', async t => { test('zero time for auction', async t => { const { zcf, zoe } = await setupZCFTest(); const installations = await setUpInstallations(zoe); - /** @type {TimerService & { advanceTo: (when: Timestamp) => void; }} */ + /** @type {TimerService & { advanceTo: (when: Timestamp) => void }} */ const timer = buildManualTimer(); const timerBrand = await timer.getTimerBrand(); @@ -355,7 +355,7 @@ test('zero time for auction', async t => { test('discountStep 0', async t => { const { zcf, zoe } = await setupZCFTest(); const installations = await setUpInstallations(zoe); - /** @type {TimerService & { advanceTo: (when: Timestamp) => void; }} */ + /** @type {TimerService & { advanceTo: (when: Timestamp) => void }} */ const timer = buildManualTimer(); const timerBrand = await timer.getTimerBrand(); @@ -401,7 +401,7 @@ test('discountStep 0', async t => { test('discountStep larger than starting rate', async t => { const { zcf, zoe } = await setupZCFTest(); const installations = await setUpInstallations(zoe); - /** @type {TimerService & { advanceTo: (when: Timestamp) => void; }} */ + /** @type {TimerService & { advanceTo: (when: Timestamp) => void }} */ const timer = buildManualTimer(); const timerBrand = await timer.getTimerBrand(); @@ -448,7 +448,7 @@ test('discountStep larger than starting rate', async t => { test('start Freq 0', async t => { const { zcf, zoe } = await setupZCFTest(); const installations = await setUpInstallations(zoe); - /** @type {TimerService & { advanceTo: (when: Timestamp) => void; }} */ + /** @type {TimerService & { advanceTo: (when: Timestamp) => void }} */ const timer = buildManualTimer(); const timerBrand = await timer.getTimerBrand(); @@ -494,7 +494,7 @@ test('start Freq 0', async t => { test('delay > freq', async t => { const { zcf, zoe } = await setupZCFTest(); const installations = await setUpInstallations(zoe); - /** @type {TimerService & { advanceTo: (when: Timestamp) => void; }} */ + /** @type {TimerService & { advanceTo: (when: Timestamp) => void }} */ const timer = buildManualTimer(); const timerBrand = await timer.getTimerBrand(); @@ -541,7 +541,7 @@ test('delay > freq', async t => { test('lockPeriod > freq', async t => { const { zcf, zoe } = await setupZCFTest(); const installations = await setUpInstallations(zoe); - /** @type {TimerService & { advanceTo: (when: Timestamp) => void; }} */ + /** @type {TimerService & { advanceTo: (when: Timestamp) => void }} */ const timer = buildManualTimer(); const timerBrand = await timer.getTimerBrand(); @@ -590,7 +590,7 @@ test('lockPeriod > freq', async t => { test('duration = freq', async t => { const { zcf, zoe } = await setupZCFTest(); const installations = await setUpInstallations(zoe); - /** @type {TimerService & { advanceTo: (when: Timestamp) => void; }} */ + /** @type {TimerService & { advanceTo: (when: Timestamp) => void }} */ const timer = buildManualTimer(); const timerBrand = await timer.getTimerBrand(); @@ -671,7 +671,7 @@ test('duration = freq', async t => { test('change Schedule', async t => { const { zcf, zoe } = await setupZCFTest(); const installations = await setUpInstallations(zoe); - /** @type {TimerService & { advanceTo: (when: Timestamp) => void; }} */ + /** @type {TimerService & { advanceTo: (when: Timestamp) => void }} */ const timer = buildManualTimer(); const timerBrand = await timer.getTimerBrand(); @@ -864,7 +864,7 @@ test('change Schedule', async t => { test('change Schedule late', async t => { const { zcf, zoe } = await setupZCFTest(); const installations = await setUpInstallations(zoe); - /** @type {TimerService & { advanceTo: (when: Timestamp) => void; }} */ + /** @type {TimerService & { advanceTo: (when: Timestamp) => void }} */ const timer = buildManualTimer(); const timerBrand = await timer.getTimerBrand(); @@ -1087,7 +1087,7 @@ test('change Schedule late', async t => { test('schedule anomalies', async t => { const { zcf, zoe } = await setupZCFTest(); const installations = await setUpInstallations(zoe); - /** @type {TimerService & { advanceTo: (when: Timestamp) => bigint; }} */ + /** @type {TimerService & { advanceTo: (when: Timestamp) => bigint }} */ const timer = buildManualTimer(); const timerBrand = await timer.getTimerBrand(); const timestamp = time => TimeMath.coerceTimestampRecord(time, timerBrand); diff --git a/packages/inter-protocol/test/auction/tools.js b/packages/inter-protocol/test/auction/tools.js index 886698dc8fa..04405e5cfb5 100644 --- a/packages/inter-protocol/test/auction/tools.js +++ b/packages/inter-protocol/test/auction/tools.js @@ -12,16 +12,18 @@ import { resolve as importMetaResolve } from 'import-meta-resolve'; /** * @typedef {{ - * autoRefund: Installation, - * auctioneer: Installation, - * governor: Installation, - * reserve: Installation, + * autoRefund: Installation< + * import('@agoric/zoe/src/contracts/automaticRefund').start + * >; + * auctioneer: Installation; + * governor: Installation< + * import('@agoric/governance/src/contractGovernor.js')['start'] + * >; + * reserve: Installation; * }} AuctionTestInstallations */ -/** - * @param {ZoeService} zoe - */ +/** @param {ZoeService} zoe */ export const setUpInstallations = async zoe => { const autoRefund = '@agoric/zoe/src/contracts/automaticRefund.js'; const autoRefundUrl = await importMetaResolve(autoRefund, import.meta.url); diff --git a/packages/inter-protocol/test/metrics.js b/packages/inter-protocol/test/metrics.js index faba927a1d6..8f9d8520357 100644 --- a/packages/inter-protocol/test/metrics.js +++ b/packages/inter-protocol/test/metrics.js @@ -15,7 +15,8 @@ const trace = makeTracer('TestMetrics', false); /** * @template {object} N - * @param {AsyncIterable | import('@agoric/zoe/src/contractSupport/topics.js').PublicTopic} mixed + * @param {| AsyncIterable + * | import('@agoric/zoe/src/contractSupport/topics.js').PublicTopic} mixed */ const asNotifier = mixed => { if ('subscriber' in mixed) { @@ -27,7 +28,8 @@ const asNotifier = mixed => { /** * @template {object} N * @param {import('ava').ExecutionContext} t - * @param {AsyncIterable | import('@agoric/zoe/src/contractSupport/topics.js').PublicTopic} subscription + * @param {| AsyncIterable + * | import('@agoric/zoe/src/contractSupport/topics.js').PublicTopic} subscription */ export const subscriptionTracker = async (t, subscription) => { const metrics = asNotifier(subscription); @@ -76,7 +78,9 @@ export const subscriptionTracker = async (t, subscription) => { * * @template {object} N * @param {import('ava').ExecutionContext} t - * @param {ERef<{getPublicTopics?: () => {metrics: {subscriber: Subscriber}}}>} publicFacet + * @param {ERef<{ + * getPublicTopics?: () => { metrics: { subscriber: Subscriber } }; + * }>} publicFacet */ export const metricsTracker = async (t, publicFacet) => { const publicTopics = await E(publicFacet).getPublicTopics(); @@ -89,7 +93,15 @@ export const metricsTracker = async (t, publicFacet) => { */ export const vaultManagerMetricsTracker = async (t, publicFacet) => { let totalDebtEver = 0n; - /** @type {Awaited>>} */ + /** + * @type {Awaited< + * ReturnType< + * typeof subscriptionTracker< + * import('../src/vaultFactory/vaultManager').MetricsNotification + * > + * > + * >} + */ const m = await metricsTracker(t, publicFacet); /** @returns {bigint} Proceeds - overage + shortfall */ diff --git a/packages/inter-protocol/test/psm/gov-add-psm.js b/packages/inter-protocol/test/psm/gov-add-psm.js index 41e33e5394a..aad39a4194c 100644 --- a/packages/inter-protocol/test/psm/gov-add-psm.js +++ b/packages/inter-protocol/test/psm/gov-add-psm.js @@ -3,10 +3,10 @@ /** * @typedef {{ - * denom: string, - * keyword?: string, - * proposedName?: string, - * decimalPlaces?: number + * denom: string; + * keyword?: string; + * proposedName?: string; + * decimalPlaces?: number; * }} AnchorOptions */ diff --git a/packages/inter-protocol/test/psm/gov-replace-committee.js b/packages/inter-protocol/test/psm/gov-replace-committee.js index cd8ed4bb761..36be6a6023b 100644 --- a/packages/inter-protocol/test/psm/gov-replace-committee.js +++ b/packages/inter-protocol/test/psm/gov-replace-committee.js @@ -1,6 +1,9 @@ /* global E */ // @ts-nocheck -/** @file Script to replace the econ governance committee in a SwingSet Core Eval (aka big hammer) */ +/** + * @file Script to replace the econ governance committee in a SwingSet Core Eval + * (aka big hammer) + */ const { Fail } = assert; @@ -19,7 +22,7 @@ const trace = (...args) => console.log('GovReplaceCommitee', ...args); const { values } = Object; -/** @type { (xs: X[], ys: Y[]) => [X, Y][]} */ +/** @type {(xs: X[], ys: Y[]) => [X, Y][]} */ const zip = (xs, ys) => xs.map((x, i) => [x, ys[i]]); /** @@ -28,7 +31,6 @@ const zip = (xs, ys) => xs.map((x, i) => [x, ys[i]]); */ const reserveThenGetNamePaths = async (nameAdmin, paths) => { /** - * * @param {ERef} nextAdmin * @param {string[]} path */ @@ -90,9 +92,7 @@ const invitePSMCommitteeMembers = async ( ).getVoterInvitations(); assert.equal(invitations.length, values(voterAddresses).length); - /** - * @param {[string, Promise][]} addrInvitations - */ + /** @param {[string, Promise][]} addrInvitations */ const distributeInvitations = async addrInvitations => { await Promise.all( addrInvitations.map(async ([addr, invitationP]) => { @@ -233,9 +233,9 @@ const main = async permittedPowers => { /** * How to test on chain * - * Execute core eval with a dictorator (electorate n=1) - * Have the old electorate and new electorate vote for different PSM param changes - * Verify the old's were ignored and the new's were enacted + * Execute core eval with a dictorator (electorate n=1) Have the old electorate + * and new electorate vote for different PSM param changes Verify the old's were + * ignored and the new's were enacted */ // "export" from script diff --git a/packages/inter-protocol/test/psm/psm-storage-fixture.js b/packages/inter-protocol/test/psm/psm-storage-fixture.js index 3c12512e912..ad6bf2aae78 100644 --- a/packages/inter-protocol/test/psm/psm-storage-fixture.js +++ b/packages/inter-protocol/test/psm/psm-storage-fixture.js @@ -3,9 +3,10 @@ * * Taken from mainnet; for example, the 1st value comes from... * - * `agd --node https://main.rpc.agoric.net:443 query vstorage data published.agoricNames.brand -o json | jq .value` + * `agd --node https://main.rpc.agoric.net:443 query vstorage data + * published.agoricNames.brand -o json | jq .value` * - * @type {Array<[key: string, value: string]>} + * @type {[key: string, value: string][]} */ export const chainStorageEntries = [ [ diff --git a/packages/inter-protocol/test/psm/setupPsm.js b/packages/inter-protocol/test/psm/setupPsm.js index a21b5f6c8a4..55b0d5aa8bb 100644 --- a/packages/inter-protocol/test/psm/setupPsm.js +++ b/packages/inter-protocol/test/psm/setupPsm.js @@ -22,9 +22,7 @@ import { startPSM, startEconCharter } from '../../src/proposals/startPSM.js'; const psmRoot = './src/psm/psm.js'; // package relative const charterRoot = './src/econCommitteeCharter.js'; // package relative -/** - * @typedef {ReturnType} FarZoeKit - */ +/** @typedef {ReturnType} FarZoeKit */ /** * @param {import('@agoric/time/src/types').TimerService} timer @@ -39,7 +37,7 @@ export const setupPsmBootstrap = async ( const space = /** @type {any} */ (makePromiseSpace()); const { produce, consume } = - /** @type { import('../../src/proposals/econ-behaviors.js').EconomyBootstrapPowers } */ ( + /** @type {import('../../src/proposals/econ-behaviors.js').EconomyBootstrapPowers} */ ( space ); @@ -63,8 +61,8 @@ export const setupPsmBootstrap = async ( }; /** - * @param {*} t - * @param {{ committeeName: string, committeeSize: number}} electorateTerms + * @param {any} t + * @param {{ committeeName: string; committeeSize: number }} electorateTerms * @param {ManualTimer} [timer] * @param {FarZoeKit} [farZoeKit] */ diff --git a/packages/inter-protocol/test/psm/test-psm.js b/packages/inter-protocol/test/psm/test-psm.js index 4aa98c34c96..26fb8ae7d9a 100644 --- a/packages/inter-protocol/test/psm/test-psm.js +++ b/packages/inter-protocol/test/psm/test-psm.js @@ -30,7 +30,7 @@ import { } from '@agoric/vats/src/core/basic-behaviors.js'; import { E, Far } from '@endo/far'; import path from 'path'; -import { heapZone } from '@agoric/zone'; +import { makeHeapZone } from '@agoric/zone'; import { Stable } from '../../src/tokens.js'; import { makeAnchorAsset, startPSM } from '../../src/proposals/startPSM.js'; import { @@ -179,7 +179,9 @@ test.before(async t => { }); /** - * @param {import('ava').ExecutionContext>>} t + * @param {import('ava').ExecutionContext< + * Awaited> + * >} t * @param {{}} [customTerms] */ async function makePsmDriver(t, customTerms) { @@ -195,7 +197,7 @@ async function makePsmDriver(t, customTerms) { // Each driver needs its own to avoid state pollution between tests const mockChainStorage = makeMockChainStorageRoot(); - /** @type {Awaited>} */ + /** @type {Awaited>} */ const { creatorFacet, publicFacet } = await E(zoe).startInstance( psmInstall, harden({ AUSD: anchor.issuer }), @@ -396,7 +398,15 @@ test('limit is for minted', async t => { ); }); -/** @type {[kind: 'want' | 'give', give: number, want: number, ok: boolean, wants?: number][]} */ +/** + * @type {[ + * kind: 'want' | 'give', + * give: number, + * want: number, + * ok: boolean, + * wants?: number, + * ][]} + */ const trades = [ ['give', 200, 190, false], ['want', 101, 100, true, 1], @@ -740,7 +750,7 @@ const makeMockBankManager = t => { }; test('restore PSM: startPSM with previous metrics, params', async t => { - /** @type { import('../../src/proposals/econ-behaviors').EconomyBootstrapPowers } */ + /** @type {import('../../src/proposals/econ-behaviors').EconomyBootstrapPowers} */ // @ts-expect-error mock const { produce, consume } = makePromiseSpace(); const { agoricNames, agoricNamesAdmin, spaces } = @@ -749,9 +759,10 @@ test('restore PSM: startPSM with previous metrics, params', async t => { // Prep bootstrap space { + const zone = makeHeapZone(); await produceDiagnostics({ produce }); // @ts-expect-error Doesnt actually require all bootstrap powers - await produceStartUpgradable({ zone: heapZone, consume, produce }); + await produceStartUpgradable({ zone, consume, produce }); const { installs, diff --git a/packages/inter-protocol/test/reserve/setup.js b/packages/inter-protocol/test/reserve/setup.js index 9512a122f2c..b74b9637f86 100644 --- a/packages/inter-protocol/test/reserve/setup.js +++ b/packages/inter-protocol/test/reserve/setup.js @@ -17,21 +17,19 @@ import { startEconomicCommittee } from '../../src/proposals/startEconCommittee.j const reserveRoot = './src/reserve/assetReserve.js'; // package relative const faucetRoot = './test/vaultFactory/faucet.js'; -/** - * @typedef {ReturnType} FarZoeKit - */ +/** @typedef {ReturnType} FarZoeKit */ /** * NOTE: called separately by each test so zoe/priceAuthority don't interfere * - * @param {*} t + * @param {any} t * @param {ManualTimer | undefined} timer * @param {FarZoeKit} farZoeKit */ const setupReserveBootstrap = async (t, timer, farZoeKit) => { const space = /** @type {any} */ (makePromiseSpace()); const { produce, consume } = - /** @type { import('../../src/proposals/econ-behaviors.js').EconomyBootstrapPowers } */ ( + /** @type {import('../../src/proposals/econ-behaviors.js').EconomyBootstrapPowers} */ ( space ); @@ -56,17 +54,17 @@ const setupReserveBootstrap = async (t, timer, farZoeKit) => { /** * @typedef {{ - * reserveCreatorFacet: import('../../src/reserve/assetReserve').AssetReserveLimitedCreatorFacet, - * reservePublicFacet: import('../../src/reserve/assetReserve').AssetReservePublicFacet, - * instance: Instance, + * reserveCreatorFacet: import('../../src/reserve/assetReserve').AssetReserveLimitedCreatorFacet; + * reservePublicFacet: import('../../src/reserve/assetReserve').AssetReservePublicFacet; + * instance: Instance; * }} ReserveKit */ /** * NOTE: called separately by each test so contracts don't interfere * - * @param {import("ava").ExecutionContext} t - * @param {{ committeeName: string, committeeSize: number}} electorateTerms + * @param {import('ava').ExecutionContext} t + * @param {{ committeeName: string; committeeSize: number }} electorateTerms * @param {ManualTimer} [timer] */ export const setupReserveServices = async ( diff --git a/packages/inter-protocol/test/reserve/test-reserve.js b/packages/inter-protocol/test/reserve/test-reserve.js index d2fac17c8da..c66918b6e9f 100644 --- a/packages/inter-protocol/test/reserve/test-reserve.js +++ b/packages/inter-protocol/test/reserve/test-reserve.js @@ -12,8 +12,8 @@ import { setupReserveServices } from './setup.js'; /** * @param {ERef} zoe * @param {ERef} feeMintAccessP - * @param {*} faucetInstallation - * @param {*} stableInitialLiquidity + * @param {any} faucetInstallation + * @param {any} stableInitialLiquidity */ const getRunFromFaucet = async ( zoe, diff --git a/packages/inter-protocol/test/smartWallet/boot-psm.js b/packages/inter-protocol/test/smartWallet/boot-psm.js index 0b9be9f88ef..1aefeda8773 100644 --- a/packages/inter-protocol/test/smartWallet/boot-psm.js +++ b/packages/inter-protocol/test/smartWallet/boot-psm.js @@ -33,7 +33,7 @@ import { WALLET_FACTORY_MANIFEST, } from '@agoric/vats/src/core/startWalletFactory.js'; import * as utils from '@agoric/vats/src/core/utils.js'; -import { heapZone } from '@agoric/zone'; +import { makeHeapZone } from '@agoric/zone'; import { Stable, Stake } from '../../src/tokens.js'; import { ECON_COMMITTEE_MANIFEST, @@ -91,8 +91,7 @@ export const installGovAndPSMContracts = async ({ }; /** - * PSM and gov contracts are available as - * named swingset bundles only in + * PSM and gov contracts are available as named swingset bundles only in * decentral-psm-config.json * * @type {import('@agoric/vats/src/core/lib-boot.js').BootstrapManifest} @@ -113,9 +112,7 @@ export const PSM_GOV_MANIFEST = { }, }; -/** - * We reserve these keys in name hubs. - */ +/** We reserve these keys in name hubs. */ export const agoricNamesReserved = harden( /** @type {const} */ ({ issuer: { @@ -157,10 +154,10 @@ export const agoricNamesReserved = harden( /** * @typedef {{ - * denom: string, - * keyword?: string, - * proposedName?: string, - * decimalPlaces?: number + * denom: string; + * keyword?: string; + * proposedName?: string; + * decimalPlaces?: number; * }} AnchorOptions */ const AnchorOptionsShape = M.splitRecord( @@ -184,12 +181,12 @@ export const ParametersShape = M.splitRecord( * Build root object of the PSM-only bootstrap vat. * * @param {{ - * D: DProxy - * logger?: (msg: string) => void + * D: DProxy; + * logger?: (msg: string) => void; * }} vatPowers * @param {{ - * economicCommitteeAddresses: Record, - * anchorAssets: { denom: string, keyword?: string }[], + * economicCommitteeAddresses: Record; + * anchorAssets: { denom: string; keyword?: string }[]; * }} vatParameters */ export const buildRootObject = async (vatPowers, vatParameters) => { @@ -207,7 +204,7 @@ export const buildRootObject = async (vatPowers, vatParameters) => { const runBootstrapParts = async (vats, devices) => { /** TODO: BootstrapPowers type puzzle */ - /** @type { any } */ + /** @type {any} */ const allPowers = harden({ vatPowers, vatParameters, @@ -215,7 +212,7 @@ export const buildRootObject = async (vatPowers, vatParameters) => { devices, produce, consume, - zone: heapZone, + zone: makeHeapZone(), ...spaces, // ISSUE: needed? runBehaviors, // These module namespaces might be useful for core eval governance. diff --git a/packages/inter-protocol/test/smartWallet/contexts.js b/packages/inter-protocol/test/smartWallet/contexts.js index f0491aacb82..f4d12d6a5a5 100644 --- a/packages/inter-protocol/test/smartWallet/contexts.js +++ b/packages/inter-protocol/test/smartWallet/contexts.js @@ -7,7 +7,7 @@ import { produceStartGovernedUpgradable, produceDiagnostics, } from '@agoric/vats/src/core/basic-behaviors.js'; -import { heapZone } from '@agoric/zone'; +import { makeHeapZone } from '@agoric/zone'; import { E } from '@endo/far'; import path from 'path'; import { @@ -43,6 +43,7 @@ export const makeDefaultTestContext = async (t, makeSpace) => { const log = () => null; const bundleCache = await unsafeMakeBundleCache('bundles/'); + const zone = makeHeapZone(); // @ts-expect-error xxx const { consume, produce, instance } = await makeSpace(log, bundleCache); @@ -52,7 +53,7 @@ export const makeDefaultTestContext = async (t, makeSpace) => { // @ts-expect-error Doesnt actually require all bootstrap powers await produceDiagnostics({ consume, produce }); // @ts-expect-error Doesnt actually require all bootstrap powers - await produceStartUpgradable({ zone: heapZone, consume, produce }); + await produceStartUpgradable({ zone, consume, produce }); //#region Installs const pathname = new URL(import.meta.url).pathname; @@ -62,7 +63,11 @@ export const makeDefaultTestContext = async (t, makeSpace) => { `${dirname}/../../../smart-wallet/src/walletFactory.js`, 'walletFactory', ); - /** @type {Promise>} */ + /** + * @type {Promise< + * Installation + * >} + */ const installation = E(zoe).install(bundle); const contractGovernorBundle = await bundleCache.load( @@ -78,7 +83,7 @@ export const makeDefaultTestContext = async (t, makeSpace) => { consume, // @ts-expect-error Doesnt actually require all bootstrap powers produce, - zone: heapZone, + zone, installation: { // @ts-expect-error Doesnt actually require all bootstrap powers consume: { contractGovernor }, @@ -135,7 +140,6 @@ export const makeDefaultTestContext = async (t, makeSpace) => { provideWalletAndBalances(address).then(({ wallet }) => wallet); /** - * * @param {string[]} oracleAddresses * @param {string} inBrandName * @param {string} outBrandName @@ -154,7 +158,13 @@ export const makeDefaultTestContext = async (t, makeSpace) => { '../inter-protocol/src/price/fluxAggregatorContract.js', 'priceAggregator', ); - /** @type {Promise>} */ + /** + * @type {Promise< + * Installation< + * import('@agoric/inter-protocol/src/price/fluxAggregatorContract.js').start + * > + * >} + */ const paInstallation = E(zoe).install(paBundle); await E(installAdmin).update('priceAggregator', paInstallation); @@ -221,11 +231,14 @@ export const currentPurseBalance = (record, brand) => { }; /** - * Voting yes (first position) on the one open question using the continuing offer. + * Voting yes (first position) on the one open question using the continuing + * offer. * * @param {ERef} committeePublic * @param {string} voterAcceptanceOID - * @returns {Promise} + * @returns {Promise< + * import('@agoric/smart-wallet/src/invitations').ContinuingInvitationSpec + * >} */ export const voteForOpenQuestion = async ( committeePublic, diff --git a/packages/inter-protocol/test/smartWallet/test-oracle-integration.js b/packages/inter-protocol/test/smartWallet/test-oracle-integration.js index 81ec5ffeee5..584d5023373 100644 --- a/packages/inter-protocol/test/smartWallet/test-oracle-integration.js +++ b/packages/inter-protocol/test/smartWallet/test-oracle-integration.js @@ -23,11 +23,11 @@ import { } from './contexts.js'; /** - * @typedef {Awaited> - & { consume: import('@agoric/inter-protocol/src/proposals/econ-behaviors.js').EconomyBootstrapPowers['consume'] } } TestContext */ -/** - * @type {import('ava').TestFn} + * @typedef {Awaited> & { + * consume: import('@agoric/inter-protocol/src/proposals/econ-behaviors.js').EconomyBootstrapPowers['consume']; + * }} TestContext */ +/** @type {import('ava').TestFn} */ const test = anyTest; const committeeAddress = 'econCommitteeMemberA'; @@ -75,9 +75,8 @@ const makeTestSpace = async (log, bundleCache) => { OUT_BRAND_DECIMALS: '6', }; /** - * * @param {string} name - * @param {number|string} decimals + * @param {number | string} decimals */ const ensureOracleBrand = (name, decimals) => { const { brand } = makeIssuerKit(name, AssetKind.NAT, { @@ -120,7 +119,11 @@ const setupFeedWithWallets = async (t, oracleAddresses) => { await t.context.simpleCreatePriceFeed(oracleAddresses, 'ATOM', 'USD'); - /** @type {import('@agoric/zoe/src/zoeService/utils.js').Instance} */ + /** + * @type {import('@agoric/zoe/src/zoeService/utils.js').Instance< + * import('@agoric/inter-protocol/src/price/fluxAggregatorContract.js').start + * >} + */ const governedPriceAggregator = await E(agoricNames).lookup( 'instance', instanceNameFor('ATOM', 'USD'), @@ -151,7 +154,7 @@ const acceptInvitation = async (wallet, priceAggregator) => { let pushPriceCounter = 0; /** - * @param {*} wallet + * @param {any} wallet * @param {string} adminOfferId * @param {import('@agoric/inter-protocol/src/price/roundsManager.js').PriceRound} priceRound * @returns {Promise} offer id @@ -195,7 +198,7 @@ test.serial('invitations', async t => { * @param {string} desc * @param {number} len * @param {any} balances XXX please improve this - * @returns {Promise<[{description: string, instance: Instance}]>} + * @returns {Promise<[{ description: string; instance: Instance }]>} */ const getInvitationFor = async (desc, len, balances) => { await eventLoopIteration(); @@ -368,7 +371,11 @@ test.serial('govern oracles list', async t => { 'instance', 'econCommitteeCharter', ); - /** @type {import('@agoric/zoe/src/zoeService/utils').Instance } */ + /** + * @type {import('@agoric/zoe/src/zoeService/utils').Instance< + * import('@agoric/governance/src/committee.js')['start'] + * >} + */ const economicCommittee = await E(agoricNames).lookup( 'instance', 'economicCommittee', @@ -380,8 +387,8 @@ test.serial('govern oracles list', async t => { * * @param {string} desc * @param {number} len - * @param {{get: (b: Brand) => Amount | undefined}} balances - * @returns {Promise<[{description: string, instance: Instance}]>} + * @param {{ get: (b: Brand) => Amount | undefined }} balances + * @returns {Promise<[{ description: string; instance: Instance }]>} */ const getInvitationFor = async (desc, len, balances) => E(E(zoe).getInvitationIssuer()) diff --git a/packages/inter-protocol/test/smartWallet/test-psm-integration.js b/packages/inter-protocol/test/smartWallet/test-psm-integration.js index d3dad62e170..864c60e372e 100644 --- a/packages/inter-protocol/test/smartWallet/test-psm-integration.js +++ b/packages/inter-protocol/test/smartWallet/test-psm-integration.js @@ -19,9 +19,11 @@ import { import { headValue, sequenceCurrents, withAmountUtils } from '../supports.js'; /** - * @type {import('ava').TestFn> - * & {consume: import('@agoric/inter-protocol/src/proposals/econ-behaviors.js').EconomyBootstrapPowers['consume']}> - * } + * @type {import('ava').TestFn< + * Awaited> & { + * consume: import('@agoric/inter-protocol/src/proposals/econ-behaviors.js').EconomyBootstrapPowers['consume']; + * } + * >} */ const test = anyTest; @@ -233,7 +235,7 @@ test('govern offerFilter', async t => { * @param {string} desc * @param {number} len * @param {any} balances XXX please improve this - * @returns {Promise<[{description: string, instance: Instance}]>} + * @returns {Promise<[{ description: string; instance: Instance }]>} */ const getInvitationFor = async (desc, len, balances) => // @ts-expect-error TS can't tell that it's going to satisfy the @returns. diff --git a/packages/inter-protocol/test/supports.js b/packages/inter-protocol/test/supports.js index de2b71aa21e..33db77e4a49 100644 --- a/packages/inter-protocol/test/supports.js +++ b/packages/inter-protocol/test/supports.js @@ -26,7 +26,7 @@ export { makeMockChainStorageRoot }; export const DENOM_UNIT = 1_000_000n; /** - * @param {*} t + * @param {any} t * @param {string} sourceRoot * @param {string} bundleName * @returns {Promise} @@ -54,16 +54,16 @@ export const setUpZoeForTest = async (setJig = () => {}) => harden(setUpZoeForTest); /** - * @param {*} t + * @param {any} t * @param {import('@agoric/time/src/types').TimerService} [optTimer] */ export const setupBootstrap = async (t, optTimer) => { const trace = makeTracer('PromiseSpace', false); const space = /** @type {any} */ (makePromiseSpace(trace)); - const { produce, consume } = - /** @type { import('../src/proposals/econ-behaviors.js').EconomyBootstrapPowers & BootstrapPowers } */ ( - space - ); + const { produce, consume } = /** + * @type {import('../src/proposals/econ-behaviors.js').EconomyBootstrapPowers & + * BootstrapPowers} + */ (space); await produceDiagnostics(space); @@ -112,9 +112,11 @@ export const installPuppetGovernance = (zoe, produce) => { /** * @param {bigint} value * @param {{ - * centralSupply: ERef>, - * feeMintAccess: ERef, - * zoe: ERef, + * centralSupply: ERef< + * Installation + * >; + * feeMintAccess: ERef; + * zoe: ERef; * }} powers * @returns {Promise>} */ @@ -135,9 +137,11 @@ export const mintRunPayment = async ( /** * @typedef {import('../src/proposals/econ-behaviors.js').EconomyBootstrapPowers} Space - * * @param {Space} space - * @param {Record>} installations + * @param {Record< + * keyof Space['installation']['produce'], + * Promise + * >} installations */ export const produceInstallations = (space, installations) => { for (const [key, installation] of Object.entries(installations)) { @@ -147,16 +151,12 @@ export const produceInstallations = (space, installations) => { export const scale6 = x => BigInt(Math.round(x * 1_000_000)); -/** - * @param {Pick, 'brand' | 'issuer' | 'mint'>} kit - */ +/** @param {Pick, 'brand' | 'issuer' | 'mint'>} kit */ export const withAmountUtils = kit => { const decimalPlaces = kit.issuer.getDisplayInfo?.()?.decimalPlaces ?? 6; return { ...kit, - /** - * @param {NatValue} v - */ + /** @param {NatValue} v */ make: v => AmountMath.make(kit.brand, v), makeEmpty: () => AmountMath.makeEmpty(kit.brand), /** @@ -164,18 +164,14 @@ export const withAmountUtils = kit => { * @param {NatValue} [d] */ makeRatio: (n, d) => makeRatio(n, kit.brand, d), - /** - * @param {number} n - */ + /** @param {number} n */ units: n => AmountMath.make(kit.brand, BigInt(Math.round(n * 10 ** decimalPlaces))), }; }; /** @typedef {ReturnType} AmountUtils */ -/** - * @param {ERef | StoredSubscriber>} subscription - */ +/** @param {ERef | StoredSubscriber>} subscription */ export const subscriptionKey = subscription => { return E(subscription) .getStoreKey() @@ -190,7 +186,9 @@ export const subscriptionKey = subscription => { }; /** - * @param {ERef<{getPublicTopics: () => import('@agoric/zoe/src/contractSupport').TopicsRecord}>} hasTopics + * @param {ERef<{ + * getPublicTopics: () => import('@agoric/zoe/src/contractSupport').TopicsRecord; + * }>} hasTopics * @param {string} subscriberName */ export const topicPath = (hasTopics, subscriberName) => { @@ -208,9 +206,10 @@ export const headValue = async subscriber => { }; /** - * CAVEAT: the head may lag and you need to explicitly getUpdateSince(lastUpdateCount) - * - @type {(subscription: ERef>) => Promise} + * CAVEAT: the head may lag and you need to explicitly + * getUpdateSince(lastUpdateCount) + * + * @type {(subscription: ERef>) => Promise} */ export const headValueLegacy = async subscription => { await eventLoopIteration(); @@ -222,7 +221,9 @@ export const headValueLegacy = async subscription => { /** * @param {import('ava').ExecutionContext} t - * @param {ERef<{getPublicTopics: () => import('@agoric/zoe/src/contractSupport').TopicsRecord}>} hasTopics + * @param {ERef<{ + * getPublicTopics: () => import('@agoric/zoe/src/contractSupport').TopicsRecord; + * }>} hasTopics * @param {string} topicName * @param {string} path * @param {string[]} [dataKeys] @@ -248,14 +249,20 @@ export const assertTopicPathData = async ( }; /** - * Sequence currents from a wallet UpdateRecord publication feed. Note that local - * state may not reflect the wallet's state if the initial currents are missed. + * Sequence currents from a wallet UpdateRecord publication feed. Note that + * local state may not reflect the wallet's state if the initial currents are + * missed. * * If this proves to be a problem we can add an option to this or a related * utility to reset state from RPC. * - * @param {ERef>} currents - * @returns {Array} array that grows as the subscription feeds + * @param {ERef< + * Subscriber< + * import('@agoric/smart-wallet/src/smartWallet.js').CurrentWalletRecord + * > + * >} currents + * @returns {import('@agoric/smart-wallet/src/smartWallet.js').CurrentWalletRecord[]} + * array that grows as the subscription feeds */ export const sequenceCurrents = currents => { const sequence = []; diff --git a/packages/inter-protocol/test/swingsetTests/fluxAggregator/bootstrap-fluxAggregator-service-upgrade.js b/packages/inter-protocol/test/swingsetTests/fluxAggregator/bootstrap-fluxAggregator-service-upgrade.js index c74b4415dce..4a1aa61fcfc 100644 --- a/packages/inter-protocol/test/swingsetTests/fluxAggregator/bootstrap-fluxAggregator-service-upgrade.js +++ b/packages/inter-protocol/test/swingsetTests/fluxAggregator/bootstrap-fluxAggregator-service-upgrade.js @@ -39,17 +39,29 @@ export const buildRootObject = async () => { // for startInstance /** * @type {{ - * committee?: Installation, - * fluxAggregatorV1?: Installation, - * puppetContractGovernor?: Installation, + * committee?: Installation< + * import('@agoric/governance/src/committee.js')['start'] + * >; + * fluxAggregatorV1?: Installation< + * import('../../../src/price/fluxAggregatorContract').start + * >; + * puppetContractGovernor?: Installation< + * import('@agoric/governance/tools/puppetContractGovernor').start + * >; * }} */ const installations = {}; - // @ts-expect-error TODO make fluxAggregator publicFacet support all governance methods (or pare down governance API) - /** @type {import('@agoric/governance/tools/puppetContractGovernor').PuppetContractGovernorKit} */ let governorFacets; - /** @type {ReturnType>['creatorFacet']['getLimitedCreatorFacet']>} */ + /** + * @type {ReturnType< + * Awaited< + * ReturnType< + * import('../../../src/price/fluxAggregatorContract.js').start + * > + * >['creatorFacet']['getLimitedCreatorFacet'] + * >} + */ let faLimitedFacet; /** @type {import('../../../src/price/priceOracleKit.js').OracleKit} */ @@ -59,7 +71,14 @@ export const buildRootObject = async () => { /** @type {UpdateRecord} */ let lastQuote; - /** @type {Omit['terms'], 'issuers' | 'brands'>} */ + /** + * @type {Omit< + * import('@agoric/zoe/src/zoeService/utils.js').StartParams< + * import('../../../src/price/fluxAggregatorContract.js').start + * >['terms'], + * 'issuers' | 'brands' + * >} + */ const faTerms = { // driven by one oracle maxSubmissionCount: 1, @@ -152,7 +171,6 @@ export const buildRootObject = async () => { // Complete round-trip without upgrade trace(`BOOT buildV1 startInstance`); - // @ts-expect-error governorFacets = await E(zoe).startInstance( NonNullish(installations.puppetContractGovernor), undefined, diff --git a/packages/inter-protocol/test/swingsetTests/psmUpgrade/bootstrap-psm-upgrade.js b/packages/inter-protocol/test/swingsetTests/psmUpgrade/bootstrap-psm-upgrade.js index c17073ce2b4..6ae41c3e567 100644 --- a/packages/inter-protocol/test/swingsetTests/psmUpgrade/bootstrap-psm-upgrade.js +++ b/packages/inter-protocol/test/swingsetTests/psmUpgrade/bootstrap-psm-upgrade.js @@ -24,7 +24,7 @@ const anchor = withAmountUtils(makeIssuerKit('bucks')); const firstGive = anchor.units(21); const secondGive = anchor.units(3); -/** @typedef {import('../../../src/psm/psm.js').prepare} PsmSF */ +/** @typedef {import('../../../src/psm/psm.js').start} PsmSF */ export const buildRootObject = async () => { const storageKit = makeFakeStorageKit('psmUpgradeTest'); @@ -44,9 +44,17 @@ export const buildRootObject = async () => { /** @type {PsmPublicFacet} */ let psmPublicFacet; - /** @type {Subscriber} */ + /** + * @type {Subscriber< + * import('../../../src/psm/psm.js').MetricsNotification + * >} + */ let metrics; - /** @type {UpdateRecord} */ + /** + * @type {UpdateRecord< + * import('../../../src/psm/psm.js').MetricsNotification + * >} + */ let metricsRecord; /** @type {VatAdminSvc} */ @@ -58,9 +66,13 @@ export const buildRootObject = async () => { // for startInstance /** * @type {{ - * committee?: Installation, - * psmV1?: Installation, - * puppetContractGovernor?: Installation, + * committee?: Installation< + * import('@agoric/governance/src/committee.js')['start'] + * >; + * psmV1?: Installation; + * puppetContractGovernor?: Installation< + * import('@agoric/governance/tools/puppetContractGovernor').start + * >; * }} */ const installations = {}; @@ -68,7 +80,12 @@ export const buildRootObject = async () => { /** @type {import('@agoric/governance/tools/puppetContractGovernor').PuppetContractGovernorKit} */ let governorFacets; - /** @type {Omit['terms'], 'issuers' | 'brands'>} */ + /** + * @type {Omit< + * import('@agoric/zoe/src/zoeService/utils.js').StartParams['terms'], + * 'issuers' | 'brands' + * >} + */ const psmTerms = { anchorBrand: anchor.brand, @@ -103,12 +120,13 @@ export const buildRootObject = async () => { return Far('root', { /** - * * @param {{ - * vatAdmin: ReturnType, - * zoe: ReturnType, + * vatAdmin: ReturnType< + * import('@agoric/swingset-vat/src/vats/vat-admin/vat-vat-admin')['buildRootObject'] + * >; + * zoe: ReturnType; * }} vats - * @param {*} devices + * @param {any} devices */ bootstrap: async (vats, devices) => { vatAdmin = await E(vats.vatAdmin).createVatAdminService(devices.vatAdmin); diff --git a/packages/inter-protocol/test/swingsetTests/reserve/bootstrap-assetReserve-upgrade.js b/packages/inter-protocol/test/swingsetTests/reserve/bootstrap-assetReserve-upgrade.js index 3b442c03f4b..d6da05f7832 100644 --- a/packages/inter-protocol/test/swingsetTests/reserve/bootstrap-assetReserve-upgrade.js +++ b/packages/inter-protocol/test/swingsetTests/reserve/bootstrap-assetReserve-upgrade.js @@ -33,9 +33,17 @@ export const buildRootObject = async () => { /** @type {FeeMintAccess} */ let feeMintAccess; - /** @type {Subscriber} */ + /** + * @type {Subscriber< + * import('../../../src/reserve/assetReserveKit.js').MetricsNotification + * >} + */ let metrics; - /** @type {UpdateRecord} */ + /** + * @type {UpdateRecord< + * import('../../../src/reserve/assetReserveKit.js').MetricsNotification + * >} + */ let metricsRecord; /** @type {VatAdminSvc} */ @@ -47,19 +55,42 @@ export const buildRootObject = async () => { // for startInstance /** * @type {{ - * committee?: Installation, - * assetReserveV1?: Installation, - * puppetContractGovernor?: Installation, + * committee?: Installation< + * import('@agoric/governance/src/committee')['start'] + * >; + * assetReserveV1?: Installation< + * import('../../../src/reserve/assetReserve')['start'] + * >; + * puppetContractGovernor?: Installation< + * import('@agoric/governance/tools/puppetContractGovernor')['start'] + * >; * }} */ const installations = {}; - /** @type {import('@agoric/governance/tools/puppetContractGovernor').PuppetContractGovernorKit} */ + /** + * @type {import('@agoric/governance/tools/puppetContractGovernor').PuppetContractGovernorKit< + * import('../../../src/reserve/assetReserve.js').start + * >} + */ let governorFacets; - /** @type {ReturnType>['creatorFacet']['getLimitedCreatorFacet']>} */ + /** + * @type {ReturnType< + * Awaited< + * ReturnType + * >['creatorFacet']['getLimitedCreatorFacet'] + * >} + */ let arLimitedFacet; - /** @type {Omit['terms'], 'issuers' | 'brands'>} */ + /** + * @type {Omit< + * import('@agoric/zoe/src/zoeService/utils.js').StartParams< + * import('../../../src/reserve/assetReserve.js').start + * >['terms'], + * 'issuers' | 'brands' + * >} + */ const arTerms = { governedParams: { // @ts-expect-error missing value @@ -74,9 +105,7 @@ export const buildRootObject = async () => { namesByAddressAdmin, }; - /** - * @param {Amount<'nat'>} amt - */ + /** @param {Amount<'nat'>} amt */ const addCollateral = async amt => { const arPublicFacet = await E(governorFacets.creatorFacet).getPublicFacet(); const seat = E(zoeService).offer( diff --git a/packages/inter-protocol/test/test-clientSupport.js b/packages/inter-protocol/test/test-clientSupport.js index 0e5678addea..a841b4d682f 100644 --- a/packages/inter-protocol/test/test-clientSupport.js +++ b/packages/inter-protocol/test/test-clientSupport.js @@ -9,7 +9,11 @@ const ist = withAmountUtils(makeIssuerKit('IST')); const atom = withAmountUtils(makeIssuerKit('ATOM')); // uses actual Brand objects instead of BoardRemote to make the test output more legible -/** @satisfies {Partial} */ +/** + * @satisfies {Partial< + * import('@agoric/vats/tools/board-utils.js').AgoricNamesRemotes + * >} + */ const agoricNames = { brand: { IST: /** @type {any} */ (ist.brand), diff --git a/packages/inter-protocol/test/test-feeDistributor.js b/packages/inter-protocol/test/test-feeDistributor.js index 3983c74d052..b1d14509271 100644 --- a/packages/inter-protocol/test/test-feeDistributor.js +++ b/packages/inter-protocol/test/test-feeDistributor.js @@ -8,11 +8,9 @@ import { setup } from '@agoric/zoe/test/unitTests/setupBasicMints.js'; import { assertPayoutAmount } from '@agoric/zoe/test/zoeTestHelpers.js'; import { E, Far } from '@endo/far'; import { mustMatch } from '@agoric/store'; -import { makeFeeDistributor, customTermsShape } from '../src/feeDistributor.js'; +import { makeFeeDistributor, meta } from '../src/feeDistributor.js'; -/** - * @param {Issuer} feeIssuer - */ +/** @param {Issuer} feeIssuer */ const makeFakeFeeDepositFacetKit = feeIssuer => { const depositPayments = []; @@ -40,10 +38,10 @@ const makeFakeFeeProducer = (makeEmptyPayment = () => {}) => { }); }; /** - * @param {*} t + * @param {any} t * @param {Promise} paymentsP * @param {number} count - * @param {*} values + * @param {any} values * @param {Issuer} issuer * @param {Brand} brand */ @@ -256,7 +254,7 @@ test('feeDistributor custom terms shape catches non-Nat bigint', t => { timerService, collectionInterval: 2n, }), - customTermsShape, + meta.customTermsShape, ), { message: 'keywordShares: Reserve: [1]: "[-1n]" - Must be non-negative' }, ); diff --git a/packages/inter-protocol/test/test-gov-collateral.js b/packages/inter-protocol/test/test-gov-collateral.js index e111fa63a07..cf71a904160 100644 --- a/packages/inter-protocol/test/test-gov-collateral.js +++ b/packages/inter-protocol/test/test-gov-collateral.js @@ -40,7 +40,11 @@ import { INVITATION_MAKERS_DESC } from '../src/econCommitteeCharter.js'; const { Fail } = assert; const dirname = url.fileURLToPath(new URL('.', import.meta.url)); -/** @type {import('ava').TestFn>>} */ +/** + * @type {import('ava').TestFn< + * Awaited> + * >} + */ const test = anyTest; const contractRoots = { @@ -76,7 +80,11 @@ const makeTestContext = async () => { bundleCache.load(src, dest).then(b => E(zoe).install(b)); const installation = { mintHolder: install(contractRoots.mintHolder, 'mintHolder'), - /** @type {Promise>} */ + /** + * @type {Promise< + * Installation + * >} + */ centralSupply: E(zoe).install(centralSupplyBundle), econCommitteeCharter: install( contractRoots.econCommitteeCharter, @@ -143,8 +151,10 @@ test.before(async t => { }); /** - * @param {import('ava').ExecutionContext>>} t - * @param {{ env?: Record }} [io] + * @param {import('ava').ExecutionContext< + * Awaited> + * >} t + * @param {{ env?: Record }} [io] */ const makeScenario = async (t, { env = process.env } = {}) => { const rawSpace = await setupBootstrap(t); @@ -175,7 +185,13 @@ const makeScenario = async (t, { env = process.env } = {}) => { ); }; - /** @type {PromiseKit<{ mint: ERef, issuer: ERef, brand: Brand}>} */ + /** + * @type {PromiseKit<{ + * mint: ERef; + * issuer: ERef; + * brand: Brand; + * }>} + */ const ibcKitP = makePromiseKit(); const startDevNet = async () => { @@ -273,9 +289,7 @@ const makeScenario = async (t, { env = process.env } = {}) => { ); }; - /** - * @param {string[]} proposals - */ + /** @param {string[]} proposals */ const evalProposals = async proposals => { const { code, bundleHandleToAbsolutePaths } = await extractCoreProposalBundles( @@ -329,15 +343,15 @@ const makeScenario = async (t, { env = process.env } = {}) => { /** * @param {{ - * agoricNames: ERef, - * board: ERef, - * zoe: ERef, + * agoricNames: ERef; + * board: ERef; + * zoe: ERef; * wallet: { * purses: { - * ist: ERef, - * atom: ERef, - * }, - * }, + * ist: ERef; + * atom: ERef; + * }; + * }; * }} home */ const makeBenefactor = home => { @@ -350,7 +364,11 @@ const makeScenario = async (t, { env = process.env } = {}) => { return Far('benefactor', { depositInReserve: async (qty = 10_000n) => { const atomBrand = await E(agoricNames).lookup('brand', 'ATOM'); - /** @type {ERef} */ + /** + * @type {ERef< + * import('../src/reserve/assetReserve').AssetReservePublicFacet + * >} + */ const reserveAPI = E(zoe).getPublicFacet( E(agoricNames).lookup('instance', 'reserve'), ); @@ -481,7 +499,11 @@ test.skip('assets are in Vaults', async t => { const brand = await E(agoricNames).lookup('brand', 'ATOM'); const stableBrand = await E(agoricNames).lookup('brand', Stable.symbol); - /** @type {ERef} */ + /** + * @type {ERef< + * import('../src/vaultFactory/vaultFactory').VaultFactoryContract['publicFacet'] + * >} + */ const vaultsAPI = instanceP.VaultFactory.then(i => E(zoe).getPublicFacet(i)); const params = await E(vaultsAPI).getGovernedParams({ @@ -542,8 +564,8 @@ test.skip('Committee can raise debt limit', async t => { const params = { DebtLimit: AmountMath.make(stableBrand, 100n) }; // We happen to know how the timer is implemented. - /** @type { ERef } */ - const timer = /** @type {any } */ (s.space.consume.chainTimerService); + /** @type {ERef} */ + const timer = /** @type {any} */ (s.space.consume.chainTimerService); const now = await E(timer).getCurrentTimestamp(); const deadline = TimeMath.addAbsRel(now, 3n); diff --git a/packages/inter-protocol/test/test-interest-labeled.js b/packages/inter-protocol/test/test-interest-labeled.js index b2b8028f6b4..ac63dbac354 100644 --- a/packages/inter-protocol/test/test-interest-labeled.js +++ b/packages/inter-protocol/test/test-interest-labeled.js @@ -22,11 +22,11 @@ const HUNDRED_THOUSAND = 100000n; // const TEN_MILLION = 10000000n; /** - * This file is originally an adaptation of test-interest.js to labeled - * time. The original often used values like ONE_DAY both as RelativeTime - * and as Timestamps, which this file can no longer get away with. We left - * the original duration constants as RelativeTime and use this adapter for - * those cases where it was used as a Timestamp. + * This file is originally an adaptation of test-interest.js to labeled time. + * The original often used values like ONE_DAY both as RelativeTime and as + * Timestamps, which this file can no longer get away with. We left the original + * duration constants as RelativeTime and use this adapter for those cases where + * it was used as a Timestamp. * * @param {RelativeTime} rel * @returns {Timestamp} @@ -50,12 +50,12 @@ test('too soon', async t => { ); const debtStatus = { newDebt: 1000n, - latestStabilityFeeUpdate: 10n, + latestInterestUpdate: 10n, interest: 0n, }; // no interest because the charging period hasn't elapsed t.deepEqual(calculator.calculate(debtStatus, 12n), { - latestStabilityFeeUpdate: 10n, + latestInterestUpdate: 10n, interest: 0n, newDebt: 1000n, }); @@ -67,12 +67,12 @@ test('basic charge 1 period', async t => { const calculator = makeInterestCalculator(annualRate, ONE_DAY, ONE_MONTH); const debtStatus = { newDebt: HUNDRED_THOUSAND, - latestStabilityFeeUpdate: 0n, + latestInterestUpdate: 0n, interest: 0n, }; // 7n is daily interest of 2.5% APR on 100k. Compounding is in the noise. t.deepEqual(calculator.calculate(debtStatus, dayN(1n)), { - latestStabilityFeeUpdate: dayN(1n), + latestInterestUpdate: dayN(1n), interest: 7n, newDebt: 100007n, }); @@ -84,13 +84,13 @@ test('basic 2 charge periods', async t => { const calculator = makeInterestCalculator(annualRate, ONE_DAY, ONE_MONTH); const debtStatus = { newDebt: HUNDRED_THOUSAND, - latestStabilityFeeUpdate: dayN(1n), + latestInterestUpdate: dayN(1n), interest: 0n, }; // 14n is 2x daily (from day 1 to day 3) interest of 2.5% APR on 100k. // Compounding is in the noise. t.deepEqual(calculator.calculate(debtStatus, dayN(3n)), { - latestStabilityFeeUpdate: dayN(3n), + latestInterestUpdate: dayN(3n), interest: 14n, newDebt: 100014n, }); @@ -102,14 +102,14 @@ test('partial periods', async t => { const calculator = makeInterestCalculator(annualRate, ONE_DAY, ONE_MONTH); const debtStatus = { newDebt: HUNDRED_THOUSAND, - latestStabilityFeeUpdate: 10n, + latestInterestUpdate: 10n, interest: 0n, }; // just less than three days gets two days of interest (7n/day) t.deepEqual( calculator.calculate(debtStatus, TimeMath.subtractAbsRel(dayN(3n), 1n)), { - latestStabilityFeeUpdate: TimeMath.addAbsRel(dayN(2n), 10n), + latestInterestUpdate: TimeMath.addAbsRel(dayN(2n), 10n), interest: 14n, newDebt: 100014n, }, @@ -122,7 +122,7 @@ test('reportingPeriod: partial', async t => { const calculator = makeInterestCalculator(annualRate, ONE_DAY, ONE_MONTH); const debtStatus = { newDebt: HUNDRED_THOUSAND, - latestStabilityFeeUpdate: 10n, + latestInterestUpdate: 10n, interest: 0n, }; @@ -130,7 +130,7 @@ test('reportingPeriod: partial', async t => { t.deepEqual( calculator.calculateReportingPeriod(debtStatus, fromZero(ONE_MONTH)), { - latestStabilityFeeUpdate: 10n, + latestInterestUpdate: 10n, interest: 0n, newDebt: HUNDRED_THOUSAND, }, @@ -142,7 +142,7 @@ test('reportingPeriod: partial', async t => { fromZero(TimeMath.addRelRel(ONE_DAY, ONE_MONTH)), ), { - latestStabilityFeeUpdate: TimeMath.addAbsRel(10n, ONE_MONTH), + latestInterestUpdate: TimeMath.addAbsRel(10n, ONE_MONTH), interest: 210n, newDebt: 100210n, }, @@ -155,7 +155,7 @@ test('reportingPeriod: longer', async t => { const calculator = makeInterestCalculator(annualRate, ONE_MONTH, ONE_DAY); const debtStatus = { newDebt: HUNDRED_THOUSAND, - latestStabilityFeeUpdate: 10n, + latestInterestUpdate: 10n, interest: 0n, }; // charge monthly, record daily. 2.5% APR compounded monthly rate is 204 BP. @@ -166,7 +166,7 @@ test('reportingPeriod: longer', async t => { fromZero(TimeMath.addRelRel(ONE_DAY, ONE_MONTH)), ), { - latestStabilityFeeUpdate: TimeMath.addAbsRel(10n, ONE_MONTH), + latestInterestUpdate: TimeMath.addAbsRel(10n, ONE_MONTH), interest: 204n, newDebt: 100204n, }, diff --git a/packages/inter-protocol/test/test-interest-math.js b/packages/inter-protocol/test/test-interest-math.js index 1672343c6e4..b4656de60c4 100644 --- a/packages/inter-protocol/test/test-interest-math.js +++ b/packages/inter-protocol/test/test-interest-math.js @@ -7,20 +7,20 @@ import { calculateCurrentDebt, reverseInterest } from '../src/interest-math.js'; const brand = makeIssuerKit('foo').brand; /** - * @param {*} t + * @param {any} t * @param {readonly [bigint, bigint, bigint]} input * @param {bigint} result */ function checkDebt(t, [debt, interest, compounded], result) { /** @type {Amount<'nat'>} */ const debtSnapshot = AmountMath.make(brand, debt); - const stabilityFeeSnapshot = makeRatio(100n + interest, brand); - const currentCompoundedStabilityFee = makeRatio(100n + compounded, brand); + const interestSnapshot = makeRatio(100n + interest, brand); + const currentCompoundedInterest = makeRatio(100n + compounded, brand); t.is( calculateCurrentDebt( debtSnapshot, - stabilityFeeSnapshot, - currentCompoundedStabilityFee, + interestSnapshot, + currentCompoundedInterest, ).value, result, ); diff --git a/packages/inter-protocol/test/test-interest.js b/packages/inter-protocol/test/test-interest.js index 76dfb362fce..91370248038 100644 --- a/packages/inter-protocol/test/test-interest.js +++ b/packages/inter-protocol/test/test-interest.js @@ -9,7 +9,7 @@ import { import { Far } from '@endo/marshal'; import { makeIssuerRecord } from '@agoric/zoe/src/issuerRecord.js'; import { - calculateCompoundedStabilityFee, + calculateCompoundedInterest, chargeInterest, makeInterestCalculator, SECONDS_PER_YEAR, @@ -34,12 +34,12 @@ test('too soon', async t => { ); const debtStatus = { newDebt: 1000n, - latestStabilityFeeUpdate: 10n, + latestInterestUpdate: 10n, interest: 0n, }; // no interest because the charging period hasn't elapsed t.deepEqual(calculator.calculate(debtStatus, 12n), { - latestStabilityFeeUpdate: 10n, + latestInterestUpdate: 10n, interest: 0n, newDebt: 1000n, }); @@ -51,12 +51,12 @@ test('basic charge 1 period', async t => { const calculator = makeInterestCalculator(annualRate, ONE_DAY, ONE_MONTH); const debtStatus = { newDebt: HUNDRED_THOUSAND, - latestStabilityFeeUpdate: 0n, + latestInterestUpdate: 0n, interest: 0n, }; // 7n is daily interest of 2.5% APR on 100k. Compounding is in the noise. t.deepEqual(calculator.calculate(debtStatus, ONE_DAY), { - latestStabilityFeeUpdate: ONE_DAY, + latestInterestUpdate: ONE_DAY, interest: 7n, newDebt: 100007n, }); @@ -68,13 +68,13 @@ test('basic 2 charge periods', async t => { const calculator = makeInterestCalculator(annualRate, ONE_DAY, ONE_MONTH); const debtStatus = { newDebt: HUNDRED_THOUSAND, - latestStabilityFeeUpdate: ONE_DAY, + latestInterestUpdate: ONE_DAY, interest: 0n, }; // 14n is 2x daily (from day 1 to day 3) interest of 2.5% APR on 100k. // Compounding is in the noise. t.deepEqual(calculator.calculate(debtStatus, ONE_DAY * 3n), { - latestStabilityFeeUpdate: ONE_DAY * 3n, + latestInterestUpdate: ONE_DAY * 3n, interest: 14n, newDebt: 100014n, }); @@ -86,12 +86,12 @@ test('partial periods', async t => { const calculator = makeInterestCalculator(annualRate, ONE_DAY, ONE_MONTH); const debtStatus = { newDebt: HUNDRED_THOUSAND, - latestStabilityFeeUpdate: 10n, + latestInterestUpdate: 10n, interest: 0n, }; // just less than three days gets two days of interest (7n/day) t.deepEqual(calculator.calculate(debtStatus, ONE_DAY * 3n - 1n), { - latestStabilityFeeUpdate: 10n + ONE_DAY * 2n, + latestInterestUpdate: 10n + ONE_DAY * 2n, interest: 14n, newDebt: 100014n, }); @@ -103,13 +103,13 @@ test('reportingPeriod: partial', async t => { const calculator = makeInterestCalculator(annualRate, ONE_DAY, ONE_MONTH); const debtStatus = { newDebt: HUNDRED_THOUSAND, - latestStabilityFeeUpdate: 10n, + latestInterestUpdate: 10n, interest: 0n, }; // charge at reporting period intervals t.deepEqual(calculator.calculateReportingPeriod(debtStatus, ONE_MONTH), { - latestStabilityFeeUpdate: 10n, + latestInterestUpdate: 10n, interest: 0n, newDebt: HUNDRED_THOUSAND, }); @@ -117,7 +117,7 @@ test('reportingPeriod: partial', async t => { t.deepEqual( calculator.calculateReportingPeriod(debtStatus, ONE_DAY + ONE_MONTH), { - latestStabilityFeeUpdate: 10n + ONE_MONTH, + latestInterestUpdate: 10n + ONE_MONTH, interest: 210n, newDebt: 100210n, }, @@ -130,7 +130,7 @@ test('reportingPeriod: longer', async t => { const calculator = makeInterestCalculator(annualRate, ONE_MONTH, ONE_DAY); const debtStatus = { newDebt: HUNDRED_THOUSAND, - latestStabilityFeeUpdate: 10n, + latestInterestUpdate: 10n, interest: 0n, }; // charge monthly, record daily. 2.5% APR compounded monthly rate is 204 BP. @@ -138,7 +138,7 @@ test('reportingPeriod: longer', async t => { t.deepEqual( calculator.calculateReportingPeriod(debtStatus, ONE_MONTH + ONE_DAY), { - latestStabilityFeeUpdate: ONE_MONTH + 10n, + latestInterestUpdate: ONE_MONTH + 10n, interest: 204n, newDebt: 100204n, }, @@ -151,18 +151,18 @@ test('start charging later', async t => { const calculator = makeInterestCalculator(annualRate, ONE_DAY, ONE_MONTH); const debtStatus = { newDebt: HUNDRED_THOUSAND, - latestStabilityFeeUpdate: 16n, + latestInterestUpdate: 16n, interest: 0n, }; // from a baseline of 16n, we don't charge interest until the timer gets to // ONE_DAY plus 16n. t.deepEqual(calculator.calculate(debtStatus, ONE_DAY), { - latestStabilityFeeUpdate: 16n, + latestInterestUpdate: 16n, interest: 0n, newDebt: HUNDRED_THOUSAND, }); t.deepEqual(calculator.calculate(debtStatus, ONE_DAY + 16n), { - latestStabilityFeeUpdate: ONE_DAY + 16n, + latestInterestUpdate: ONE_DAY + 16n, interest: 7n, newDebt: 100007n, }); @@ -174,7 +174,7 @@ test('simple compounding', async t => { const calculator = makeInterestCalculator(annualRate, ONE_DAY, ONE_MONTH); const debtStatus = { newDebt: HUNDRED_THOUSAND, - latestStabilityFeeUpdate: 10n, + latestInterestUpdate: 10n, interest: 0n, }; // 30 days of 7n interest per day. Compounding is in the noise. @@ -182,7 +182,7 @@ test('simple compounding', async t => { t.deepEqual( calculator.calculateReportingPeriod(debtStatus, ONE_MONTH + ONE_DAY), { - latestStabilityFeeUpdate: ONE_MONTH + 10n, + latestInterestUpdate: ONE_MONTH + 10n, interest: 210n, newDebt: 100210n, }, @@ -195,11 +195,11 @@ test('reportingPeriod shorter than charging', async t => { const calculator = makeInterestCalculator(annualRate, ONE_MONTH, ONE_DAY); let debtStatus = { newDebt: HUNDRED_THOUSAND, - latestStabilityFeeUpdate: 10n, + latestInterestUpdate: 10n, interest: 0n, }; const afterOneMonth = { - latestStabilityFeeUpdate: 10n, + latestInterestUpdate: 10n, interest: 0n, newDebt: HUNDRED_THOUSAND, }; @@ -210,7 +210,7 @@ test('reportingPeriod shorter than charging', async t => { t.deepEqual(calculator.calculate(debtStatus, 17n * ONE_DAY), afterOneMonth); t.deepEqual(calculator.calculate(debtStatus, 29n * ONE_DAY), afterOneMonth); t.deepEqual(calculator.calculate(debtStatus, ONE_MONTH + 10n), { - latestStabilityFeeUpdate: ONE_MONTH + 10n, + latestInterestUpdate: ONE_MONTH + 10n, interest: 204n, newDebt: 100204n, }); @@ -218,10 +218,10 @@ test('reportingPeriod shorter than charging', async t => { debtStatus = { newDebt: 100204n, interest: 204n, - latestStabilityFeeUpdate: ONE_MONTH, + latestInterestUpdate: ONE_MONTH, }; const afterTwoMonths = { - latestStabilityFeeUpdate: ONE_MONTH, + latestInterestUpdate: ONE_MONTH, interest: 204n, newDebt: 100204n, }; @@ -231,7 +231,7 @@ test('reportingPeriod shorter than charging', async t => { t.deepEqual(calculator.calculate(debtStatus, 50n * ONE_DAY), afterTwoMonths); t.deepEqual(calculator.calculate(debtStatus, 59n * ONE_DAY), afterTwoMonths); t.deepEqual(calculator.calculate(debtStatus, 60n * ONE_DAY), { - latestStabilityFeeUpdate: 2n * ONE_MONTH, + latestInterestUpdate: 2n * ONE_MONTH, interest: 408n, newDebt: 100408n, }); @@ -242,12 +242,12 @@ test('reportingPeriod shorter than charging; start day boundary', async t => { const annualRate = makeRatio(250n, brand, BASIS_POINTS); const calculator = makeInterestCalculator(annualRate, ONE_MONTH, ONE_DAY); const startOneDay = { - latestStabilityFeeUpdate: ONE_DAY, + latestInterestUpdate: ONE_DAY, newDebt: HUNDRED_THOUSAND, interest: 0n, }; const afterOneDay = { - latestStabilityFeeUpdate: ONE_DAY, + latestInterestUpdate: ONE_DAY, interest: 0n, newDebt: HUNDRED_THOUSAND, }; @@ -259,7 +259,7 @@ test('reportingPeriod shorter than charging; start day boundary', async t => { t.deepEqual(calculator.calculate(startOneDay, 29n * ONE_DAY), afterOneDay); const afterAMonth = { - latestStabilityFeeUpdate: ONE_MONTH + ONE_DAY, + latestInterestUpdate: ONE_MONTH + ONE_DAY, interest: 204n, newDebt: 100204n, }; @@ -275,12 +275,12 @@ test('reportingPeriod shorter than charging; start not even days', async t => { const annualRate = makeRatio(250n, brand, BASIS_POINTS); const calculator = makeInterestCalculator(annualRate, ONE_MONTH, ONE_DAY); const startPartialDay = { - latestStabilityFeeUpdate: 20n, + latestInterestUpdate: 20n, newDebt: 101000n, interest: 0n, }; const afterOneMonth = { - latestStabilityFeeUpdate: 20n, + latestInterestUpdate: 20n, interest: 0n, newDebt: 101000n, }; @@ -291,7 +291,7 @@ test('reportingPeriod shorter than charging; start not even days', async t => { ); // interest not charged until ONE_MONTH + 20n t.deepEqual(calculator.calculate(startPartialDay, ONE_MONTH + 20n), { - latestStabilityFeeUpdate: 20n + ONE_MONTH, + latestInterestUpdate: 20n + ONE_MONTH, interest: 206n, newDebt: 101206n, }); @@ -308,21 +308,21 @@ test('basic charge large numbers, compounding', async t => { const debtStatus = { newDebt: TEN_MILLION, interest: 0n, - latestStabilityFeeUpdate: START_TIME, + latestInterestUpdate: START_TIME, }; t.deepEqual(calculator.calculate(debtStatus, START_TIME), { - latestStabilityFeeUpdate: START_TIME, + latestInterestUpdate: START_TIME, interest: 0n, newDebt: TEN_MILLION, }); t.deepEqual(calculator.calculate(debtStatus, START_TIME + 1n), { - latestStabilityFeeUpdate: START_TIME, + latestInterestUpdate: START_TIME, interest: 0n, newDebt: TEN_MILLION, }); // 677n is one day's interest on TEN_MILLION at 2.5% APR, rounded up. t.deepEqual(calculator.calculate(debtStatus, START_TIME + ONE_DAY), { - latestStabilityFeeUpdate: START_TIME + ONE_DAY, + latestInterestUpdate: START_TIME + ONE_DAY, interest: 677n, newDebt: 10000677n, }); @@ -330,14 +330,14 @@ test('basic charge large numbers, compounding', async t => { t.deepEqual( calculator.calculate(debtStatus, START_TIME + ONE_DAY + ONE_DAY), { - latestStabilityFeeUpdate: START_TIME + ONE_DAY + ONE_DAY, + latestInterestUpdate: START_TIME + ONE_DAY + ONE_DAY, interest: 1354n, newDebt: 10001354n, }, ); // Notice that interest compounds 30 days * 677 = 20310 < 20329 t.deepEqual(calculator.calculate(debtStatus, START_TIME + ONE_MONTH), { - latestStabilityFeeUpdate: START_TIME + ONE_MONTH, + latestInterestUpdate: START_TIME + ONE_MONTH, interest: 20329n, newDebt: 10020329n, }); @@ -355,18 +355,18 @@ test('basic charge reasonable numbers monthly', async t => { const debtStatus = { newDebt: TEN_MILLION, interest: 0n, - latestStabilityFeeUpdate: START_TIME, + latestInterestUpdate: START_TIME, }; // don't charge, since a month hasn't elapsed t.deepEqual(calculator.calculateReportingPeriod(debtStatus, START_TIME), { - latestStabilityFeeUpdate: START_TIME, + latestInterestUpdate: START_TIME, interest: 0n, newDebt: TEN_MILLION, }); t.deepEqual( calculator.calculateReportingPeriod(debtStatus, START_TIME + 1n), { - latestStabilityFeeUpdate: START_TIME, + latestInterestUpdate: START_TIME, interest: 0n, newDebt: TEN_MILLION, }, @@ -374,7 +374,7 @@ test('basic charge reasonable numbers monthly', async t => { t.deepEqual( calculator.calculateReportingPeriod(debtStatus, START_TIME + ONE_DAY), { - latestStabilityFeeUpdate: START_TIME, + latestInterestUpdate: START_TIME, interest: 0n, newDebt: TEN_MILLION, }, @@ -385,7 +385,7 @@ test('basic charge reasonable numbers monthly', async t => { START_TIME + ONE_DAY + ONE_DAY, ), { - latestStabilityFeeUpdate: START_TIME, + latestInterestUpdate: START_TIME, interest: 0n, newDebt: TEN_MILLION, }, @@ -395,7 +395,7 @@ test('basic charge reasonable numbers monthly', async t => { t.deepEqual( calculator.calculateReportingPeriod(debtStatus, START_TIME + ONE_MONTH), { - latestStabilityFeeUpdate: START_TIME + ONE_MONTH, + latestInterestUpdate: START_TIME + ONE_MONTH, interest: 20329n, newDebt: 10020329n, }, @@ -406,7 +406,7 @@ test('basic charge reasonable numbers monthly', async t => { t.deepEqual( calculator.calculateReportingPeriod(debtStatus, START_TIME + HALF_YEAR), { - latestStabilityFeeUpdate: START_TIME + HALF_YEAR, + latestInterestUpdate: START_TIME + HALF_YEAR, interest: 122601n, newDebt: 10122601n, }, @@ -415,16 +415,16 @@ test('basic charge reasonable numbers monthly', async t => { t.deepEqual( calculator.calculateReportingPeriod(debtStatus, START_TIME + ONE_YEAR), { - latestStabilityFeeUpdate: START_TIME + ONE_YEAR, + latestInterestUpdate: START_TIME + ONE_YEAR, interest: 246705n, newDebt: 10246705n, }, ); }); -test('calculateCompoundedStabilityFee on zero debt', t => { +test('calculateCompoundedInterest on zero debt', t => { t.throws(() => - calculateCompoundedStabilityFee( + calculateCompoundedInterest( makeRatio(0n, mockBrand, 1n, mockBrand), 0n, 100n, @@ -435,8 +435,8 @@ test('calculateCompoundedStabilityFee on zero debt', t => { // -illions const M = 1_000_000n; -test('calculateCompoundedStabilityFee', t => { - /** @type {Array<[bigint, bigint, bigint, number, bigint, number]>} */ +test('calculateCompoundedInterest', t => { + /** @type {[bigint, bigint, bigint, number, bigint, number][]} */ const cases = [ [250n, BASIS_POINTS, M, 1, 1025000n, 10], // 2.5% APR over 1 year yields 2.5% [250n, BASIS_POINTS, M, 10, 1280090n, 5], // 2.5% APR over 10 year yields 28% @@ -455,15 +455,15 @@ test('calculateCompoundedStabilityFee', t => { const apr = makeRatio(rateNum, mockBrand, rateDen, mockBrand); const aprf = Number(rateNum) / Number(rateDen); - let compoundedStabilityFee = makeRatio(1n, mockBrand, 1n, mockBrand); + let compoundedInterest = makeRatio(1n, mockBrand, 1n, mockBrand); let compoundedFloat = 1.0; let totalDebt = startingDebt; for (let i = 0; i < charges; i += 1) { compoundedFloat *= 1 + aprf; const delta = ceilMultiplyBy(AmountMath.make(mockBrand, totalDebt), apr); - compoundedStabilityFee = calculateCompoundedStabilityFee( - compoundedStabilityFee, + compoundedInterest = calculateCompoundedInterest( + compoundedInterest, totalDebt, totalDebt + delta.value, ); @@ -472,8 +472,8 @@ test('calculateCompoundedStabilityFee', t => { t.is( compoundedFloat.toPrecision(floatMatch), ( - Number(compoundedStabilityFee.numerator.value) / - Number(compoundedStabilityFee.denominator.value) + Number(compoundedInterest.numerator.value) / + Number(compoundedInterest.denominator.value) ).toPrecision(floatMatch), `For ${startingDebt} at (${rateNum}/${rateDen})^${charges}, expected compounded ratio to match ${compoundedFloat}`, ); @@ -492,10 +492,10 @@ test('calculateCompoundedStabilityFee', t => { test('chargeInterest when no time elapsed', async t => { const { brand, issuer } = makeIssuerKit('ducats'); - const stabilityFee = makeRatio(250n, brand, BASIS_POINTS); + const interestRate = makeRatio(250n, brand, BASIS_POINTS); const now = BigInt(Date.now().toFixed()); - /** @type {*} */ + /** @type {any} */ const powers = { mint: { getIssuerRecord: () => @@ -503,18 +503,18 @@ test('chargeInterest when no time elapsed', async t => { }, }; const params = { - stabilityFee, + interestRate, chargingPeriod: ONE_DAY, recordingPeriod: ONE_DAY, }; const prior = { - latestStabilityFeeUpdate: now, - compoundedStabilityFee: makeRatio(100n, brand), + latestInterestUpdate: now, + compoundedInterest: makeRatio(100n, brand), /** @type {Amount<'nat'>} */ totalDebt: AmountMath.make(brand, 10_000n), }; const results = chargeInterest(powers, params, prior, now); - t.deepEqual(results.compoundedStabilityFee, prior.compoundedStabilityFee); - t.is(results.latestStabilityFeeUpdate, now); + t.deepEqual(results.compoundedInterest, prior.compoundedInterest); + t.is(results.latestInterestUpdate, now); t.deepEqual(results.totalDebt, prior.totalDebt); }); diff --git a/packages/inter-protocol/test/test-proposal-stuff.js b/packages/inter-protocol/test/test-proposal-stuff.js index 1e280a85349..9dc5fc269fd 100644 --- a/packages/inter-protocol/test/test-proposal-stuff.js +++ b/packages/inter-protocol/test/test-proposal-stuff.js @@ -22,7 +22,7 @@ const makeTestContext = t => { return JSON.parse(txt); }; - /** @param {{ module: string, entrypoint: string}} proposal */ + /** @param {{ module: string; entrypoint: string }} proposal */ const loadEntryPoint = async proposal => { const { module, entrypoint } = proposal; t.is(typeof module, 'string'); diff --git a/packages/inter-protocol/test/vaultFactory/driver.js b/packages/inter-protocol/test/vaultFactory/driver.js index f6d96541e9b..d35a87e2bf8 100644 --- a/packages/inter-protocol/test/vaultFactory/driver.js +++ b/packages/inter-protocol/test/vaultFactory/driver.js @@ -66,7 +66,7 @@ const defaultParamValues = debt => // penalty upon liquidation as proportion of debt liquidationPenalty: debt.makeRatio(10n), // periodic interest rate (per charging period) - stabilityFee: debt.makeRatio(100n, BASIS_POINTS), + interestRate: debt.makeRatio(100n, BASIS_POINTS), // charge to create or increase loan balance mintFee: debt.makeRatio(500n, BASIS_POINTS), // NB: liquidationPadding defaults to zero in contract @@ -74,21 +74,27 @@ const defaultParamValues = debt => /** * @typedef {{ - * aeth: IssuerKit & import('../supports.js').AmountUtils, - * aethInitialLiquidity: Amount<'nat'>, - * consume: import('../../src/proposals/econ-behaviors.js').EconomyBootstrapPowers['consume'], - * puppetGovernors: { [contractName: string]: undefined | ERef['creatorFacet']> }, - * electorateTerms: any, - * feeMintAccess: FeeMintAccess, - * installation: Record, - * interestTiming: any, - * minInitialDebt: bigint, - * reserveCreatorFacet: ERef, - * rates: any, - * run: IssuerKit & import('../supports.js').AmountUtils, - * stableInitialLiquidity: Amount<'nat'>, - * timer: ReturnType, - * zoe: ZoeService, + * aeth: IssuerKit & import('../supports.js').AmountUtils; + * aethInitialLiquidity: Amount<'nat'>; + * consume: import('../../src/proposals/econ-behaviors.js').EconomyBootstrapPowers['consume']; + * puppetGovernors: { + * [contractName: string]: + * | undefined + * | ERef< + * import('@agoric/governance/tools/puppetContractGovernor.js').PuppetContractGovernorKit['creatorFacet'] + * >; + * }; + * electorateTerms: any; + * feeMintAccess: FeeMintAccess; + * installation: Record; + * interestTiming: any; + * minInitialDebt: bigint; + * reserveCreatorFacet: ERef; + * rates: any; + * run: IssuerKit & import('../supports.js').AmountUtils; + * stableInitialLiquidity: Amount<'nat'>; + * timer: ReturnType; + * zoe: ZoeService; * }} DriverContext */ @@ -136,9 +142,7 @@ export const makeDriverContext = async ({ return { ...frozenCtx, bundleCache, run, aeth }; }; -/** - * @param {import('ava').ExecutionContext} t - */ +/** @param {import('ava').ExecutionContext} t */ const setupReserveAndElectorate = async t => { const { zoe, @@ -254,7 +258,14 @@ const setupServices = async (t, initialPrice, priceBase) => { aethKeyword, ); - /** @type {[any, VaultFactoryCreatorFacet, VFC['publicFacet'], VaultManager]} */ + /** + * @type {[ + * any, + * VaultFactoryCreatorFacet, + * VFC['publicFacet'], + * VaultManager, + * ]} + */ const [governorInstance, vaultFactory, vfPublic, aethVaultManager] = await Promise.all([ E(consume.agoricNames).lookup('instance', 'VaultFactoryGovernor'), @@ -310,7 +321,6 @@ export const makeManagerDriver = async ( let notification = {}; let currentOfferResult; /** - * * @param {Amount<'nat'>} [collateral] * @param {Amount<'nat'>} [debt] */ @@ -340,7 +350,6 @@ export const makeManagerDriver = async ( vaultSeat: () => vaultSeat, notification: () => notification, /** - * * @param {bigint} collValue * @param {import('../supports.js').AmountUtils} collUtils * @param {bigint} [mintedValue] @@ -362,7 +371,6 @@ export const makeManagerDriver = async ( return E(seat).getOfferResult(); }, /** - * * @param {bigint} mintedValue * @param {import('../supports.js').AmountUtils} collUtils * @param {bigint} [collValue] @@ -403,10 +411,10 @@ export const makeManagerDriver = async ( t.truthy(await E(vaultSeat).hasExited()); }, /** - * * @param {import('../../src/vaultFactory/vault.js').VaultPhase} phase * @param {object} [likeExpected] - * @param {AT_NEXT|number} [optSince] AT_NEXT is an alias for updateCount of the last update, forcing to wait for another + * @param {AT_NEXT | number} [optSince] AT_NEXT is an alias for + * updateCount of the last update, forcing to wait for another */ notified: async (phase, likeExpected, optSince) => { notification = await E(notifier).getUpdateSince( @@ -475,8 +483,9 @@ export const makeManagerDriver = async ( // and the director driver should `{ key: 'governedParams }` /** * @param {string} name - * @param {*} newValue - * @param {VaultFactoryParamPath} [paramPath] defaults to root path for the factory + * @param {any} newValue + * @param {VaultFactoryParamPath} [paramPath] defaults to root path for the + * factory */ setGovernedParam: ( name, @@ -492,18 +501,16 @@ export const makeManagerDriver = async ( }), ); }, - /** - * @param {string[]} filters - */ + /** @param {string[]} filters */ setGovernedFilters: filters => { trace(t, 'setGovernedFilters', filters); const vfGov = NonNullish(t.context.puppetGovernors.vaultFactory); return E(vfGov).setFilters(harden(filters)); }, /** - * * @param {object} [likeExpected] - * @param {AT_NEXT|number} [optSince] AT_NEXT is an alias for updateCount of the last update, forcing to wait for another + * @param {AT_NEXT | number} [optSince] AT_NEXT is an alias for updateCount + * of the last update, forcing to wait for another */ managerNotified: async (likeExpected, optSince) => { managerNotification = await E(managerNotifier).getUpdateSince( @@ -527,9 +534,7 @@ export const makeManagerDriver = async ( return driver; }; -/** - * @param {import('ava').ExecutionContext} t - */ +/** @param {import('ava').ExecutionContext} t */ export const makeAuctioneerDriver = async t => { const auctioneerKit = await t.context.consume.auctioneerKit; @@ -576,7 +581,7 @@ export const makeAuctioneerDriver = async t => { }, /** * @param {keyof import('../../src/auction/params.js').AuctionParams} name - * @param {*} newValue + * @param {any} newValue */ setGovernedParam: async (name, newValue) => { trace('setGovernedParam', name); diff --git a/packages/inter-protocol/test/vaultFactory/faucet.js b/packages/inter-protocol/test/vaultFactory/faucet.js index dd2cbdec95b..1edee2d1eaf 100644 --- a/packages/inter-protocol/test/vaultFactory/faucet.js +++ b/packages/inter-protocol/test/vaultFactory/faucet.js @@ -6,7 +6,7 @@ import { assertProposalShape } from '@agoric/zoe/src/contractSupport/index.js'; * needed. * * @param {ZCF} zcf - * @param {{feeMintAccess: FeeMintAccess}} privateArgs + * @param {{ feeMintAccess: FeeMintAccess }} privateArgs */ export async function start(zcf, { feeMintAccess }) { const stableMint = await zcf.registerFeeMint('RUN', feeMintAccess); diff --git a/packages/inter-protocol/test/vaultFactory/interestSupport.js b/packages/inter-protocol/test/vaultFactory/interestSupport.js index bcd170c0350..56640d403a7 100644 --- a/packages/inter-protocol/test/vaultFactory/interestSupport.js +++ b/packages/inter-protocol/test/vaultFactory/interestSupport.js @@ -6,13 +6,13 @@ import { import { Far } from '@endo/marshal'; import { reverseInterest } from '../../src/interest-math.js'; -export const makeCompoundedStabilityFeeProvider = brand => { - let compoundedStabilityFee = makeRatio(100n, brand); +export const makeCompoundedInterestProvider = brand => { + let compoundedInterest = makeRatio(100n, brand); return { - getCompoundedStabilityFee: () => compoundedStabilityFee, + getCompoundedInterest: () => compoundedInterest, chargeHundredPercentInterest: () => { - compoundedStabilityFee = makeRatio( - compoundedStabilityFee.numerator.value * 2n, + compoundedInterest = makeRatio( + compoundedInterest.numerator.value * 2n, brand, ); }, @@ -22,19 +22,19 @@ export const makeCompoundedStabilityFeeProvider = brand => { * @param {VaultId} vaultId * @param {Amount<'nat'>} initDebt * @param {Amount<'nat'>} [initCollateral] - * @param {*} [manager] - * @returns {Vault & {setDebt: (Amount) => void}} + * @param {any} [manager] + * @returns {Vault & { setDebt: (Amount) => void }} */ export const makeFakeVault = ( vaultId, initDebt, initCollateral = AmountMath.make(initDebt.brand, 100n), - manager = makeCompoundedStabilityFeeProvider(initDebt.brand), + manager = makeCompoundedInterestProvider(initDebt.brand), ) => { let normalizedDebt = reverseInterest( initDebt, - manager.getCompoundedStabilityFee(), + manager.getCompoundedInterest(), ); let collateral = initCollateral; const fakeSeat = {}; @@ -42,11 +42,11 @@ export const makeFakeVault = ( getCollateralAmount: () => collateral, getNormalizedDebt: () => normalizedDebt, getCurrentDebt: () => - floorMultiplyBy(normalizedDebt, manager.getCompoundedStabilityFee()), + floorMultiplyBy(normalizedDebt, manager.getCompoundedInterest()), setDebt: newDebt => (normalizedDebt = reverseInterest( newDebt, - manager.getCompoundedStabilityFee(), + manager.getCompoundedInterest(), )), setCollateral: newCollateral => (collateral = newCollateral), getIdInManager: () => vaultId, diff --git a/packages/inter-protocol/test/vaultFactory/snapshots/test-vaultFactory.js.md b/packages/inter-protocol/test/vaultFactory/snapshots/test-vaultFactory.js.md index 03c50af779c..aed2a1c4ec3 100644 --- a/packages/inter-protocol/test/vaultFactory/snapshots/test-vaultFactory.js.md +++ b/packages/inter-protocol/test/vaultFactory/snapshots/test-vaultFactory.js.md @@ -69,7 +69,7 @@ Generated by [AVA](https://avajs.dev). [ 'published.vaultFactory.managers.manager0', { - compoundedStabilityFee: { + compoundedInterest: { denominator: { brand: Object @Alleged: IST brand {}, value: 100000000000000000000n, @@ -79,11 +79,7 @@ Generated by [AVA](https://avajs.dev). value: 101967213114754098360n, }, }, - latestStabilityFeeUpdate: { - absValue: 3024000n, - timerBrand: Object @Alleged: timerBrand {}, - }, - stabilityFee: { + interestRate: { denominator: { brand: Object @Alleged: IST brand {}, value: 100n, @@ -93,6 +89,10 @@ Generated by [AVA](https://avajs.dev). value: 20n, }, }, + latestInterestUpdate: { + absValue: 3024000n, + timerBrand: Object @Alleged: timerBrand {}, + }, }, ], [ @@ -106,6 +106,19 @@ Generated by [AVA](https://avajs.dev). value: 1000000n, }, }, + InterestRate: { + type: 'ratio', + value: { + denominator: { + brand: Object @Alleged: IST brand {}, + value: 100n, + }, + numerator: { + brand: Object @Alleged: IST brand {}, + value: 20n, + }, + }, + }, LiquidationMargin: { type: 'ratio', value: { @@ -158,19 +171,6 @@ Generated by [AVA](https://avajs.dev). }, }, }, - StabilityFee: { - type: 'ratio', - value: { - denominator: { - brand: Object @Alleged: IST brand {}, - value: 100n, - }, - numerator: { - brand: Object @Alleged: IST brand {}, - value: 20n, - }, - }, - }, }, }, ], @@ -254,7 +254,7 @@ Generated by [AVA](https://avajs.dev). brand: Object @Alleged: IST brand {}, value: 473n, }, - stabilityFee: { + interest: { denominator: { brand: Object @Alleged: IST brand {}, value: 100n, @@ -280,7 +280,7 @@ Generated by [AVA](https://avajs.dev). brand: Object @Alleged: IST brand {}, value: 473n, }, - stabilityFee: { + interest: { denominator: { brand: Object @Alleged: IST brand {}, value: 100n, @@ -306,7 +306,7 @@ Generated by [AVA](https://avajs.dev). brand: Object @Alleged: IST brand {}, value: 53n, }, - stabilityFee: { + interest: { denominator: { brand: Object @Alleged: IST brand {}, value: 100n, @@ -332,7 +332,7 @@ Generated by [AVA](https://avajs.dev). brand: Object @Alleged: IST brand {}, value: 53n, }, - stabilityFee: { + interest: { denominator: { brand: Object @Alleged: IST brand {}, value: 100n, @@ -358,7 +358,7 @@ Generated by [AVA](https://avajs.dev). brand: Object @Alleged: IST brand {}, value: 473n, }, - stabilityFee: { + interest: { denominator: { brand: Object @Alleged: IST brand {}, value: 100n, @@ -384,7 +384,7 @@ Generated by [AVA](https://avajs.dev). brand: Object @Alleged: IST brand {}, value: 53n, }, - stabilityFee: { + interest: { denominator: { brand: Object @Alleged: IST brand {}, value: 100000000000000000000n, @@ -410,7 +410,7 @@ Generated by [AVA](https://avajs.dev). brand: Object @Alleged: IST brand {}, value: 0n, }, - stabilityFee: { + interest: { denominator: { brand: Object @Alleged: IST brand {}, value: 100000000000000000000n, diff --git a/packages/inter-protocol/test/vaultFactory/snapshots/test-vaultFactory.js.snap b/packages/inter-protocol/test/vaultFactory/snapshots/test-vaultFactory.js.snap index 2866104c107..21a5482e71a 100644 Binary files a/packages/inter-protocol/test/vaultFactory/snapshots/test-vaultFactory.js.snap and b/packages/inter-protocol/test/vaultFactory/snapshots/test-vaultFactory.js.snap differ diff --git a/packages/inter-protocol/test/vaultFactory/test-auction.js b/packages/inter-protocol/test/vaultFactory/test-auction.js index 2ea88d20e83..1e8674a42a7 100644 --- a/packages/inter-protocol/test/vaultFactory/test-auction.js +++ b/packages/inter-protocol/test/vaultFactory/test-auction.js @@ -9,10 +9,7 @@ import { makeManagerDriver, } from './driver.js'; -/** - * @typedef {import('./driver.js').DriverContext & { - * }} Context - */ +/** @typedef {import('./driver.js').DriverContext & {}} Context */ /** @type {import('ava').TestFn} */ const test = unknownTest; diff --git a/packages/inter-protocol/test/vaultFactory/test-collatRatio.js b/packages/inter-protocol/test/vaultFactory/test-collatRatio.js index 19b025aa760..fb67b32629e 100644 --- a/packages/inter-protocol/test/vaultFactory/test-collatRatio.js +++ b/packages/inter-protocol/test/vaultFactory/test-collatRatio.js @@ -21,7 +21,7 @@ test('normalizedCollRatio grows with coll margin', t => { /** @type {PriceQuote} */ // @ts-expect-error fake for tests. const quote = makeFakeQuote(minted.make(5n), collateral.make(20n)); - const compoundedStabilityFee = makeRatioFromAmounts( + const compoundedInterest = makeRatioFromAmounts( minted.make(1n), collateral.make(1n), ); @@ -36,13 +36,13 @@ test('normalizedCollRatio grows with coll margin', t => { const lowRate = normalizedCollRatio( quote, - compoundedStabilityFee, + compoundedInterest, lowCollateralizationMargin, ); t.deepEqual(lowRate, (105 * 5) / (20 * 100)); const highRate = normalizedCollRatio( quote, - compoundedStabilityFee, + compoundedInterest, highCollateralizationMargin, ); t.deepEqual(highRate, (150 * 5) / (20 * 100)); @@ -78,19 +78,15 @@ test('CollRatio grows with price', t => { // @ts-expect-error fake for tests. const highQuote = makeFakeQuote(minted.make(15n), collateral.make(20n)); - const compoundedStabilityFee = makeRatioFromAmounts( + const compoundedInterest = makeRatioFromAmounts( minted.make(12n), collateral.make(10n), ); const margin = makeRatioFromAmounts(minted.make(105n), collateral.make(100n)); - const lowRate = normalizedCollRatio(lowQuote, compoundedStabilityFee, margin); + const lowRate = normalizedCollRatio(lowQuote, compoundedInterest, margin); t.deepEqual(lowRate, (105 * 5 * 12) / (20 * 100 * 10)); - const highRate = normalizedCollRatio( - highQuote, - compoundedStabilityFee, - margin, - ); + const highRate = normalizedCollRatio(highQuote, compoundedInterest, margin); t.deepEqual(highRate, (105 * 15 * 12) / (20 * 100 * 10)); t.true(highRate > lowRate); }); diff --git a/packages/inter-protocol/test/vaultFactory/test-liquidation-plans.js b/packages/inter-protocol/test/vaultFactory/test-liquidation-plans.js index c922efea2e6..5abf6680b57 100644 --- a/packages/inter-protocol/test/vaultFactory/test-liquidation-plans.js +++ b/packages/inter-protocol/test/vaultFactory/test-liquidation-plans.js @@ -8,10 +8,7 @@ import { makeManagerDriver, } from './driver.js'; -/** - * @typedef {import('./driver.js').DriverContext & { - * }} Context - */ +/** @typedef {import('./driver.js').DriverContext & {}} Context */ /** @type {import('ava').TestFn} */ const test = unknownTest; @@ -75,15 +72,17 @@ test('basic', async t => { * TODO consider having "test.skip" with directions for what throws to insert * * These are the cases we tested manually: + * * - Failure at the start of a flow * - Failure within the 2b flow * * These are the states we verified: + * * - All vaults to be liquidated are liquidated (none reinstated) * - Metrics of liquidation counts update correctly * * Failure to return a plan is not handled because `calculateDistributionPlan` - * has a try/catch within it that ensures it returns *some* plan. We + * has a try/catch within it that ensures it returns _some_ plan. We * considered falling back if it does fail, but the fallback would have to do * the same work that had just failed. */ diff --git a/packages/inter-protocol/test/vaultFactory/test-math.js b/packages/inter-protocol/test/vaultFactory/test-math.js index 16809de2ec5..153306b5eea 100644 --- a/packages/inter-protocol/test/vaultFactory/test-math.js +++ b/packages/inter-protocol/test/vaultFactory/test-math.js @@ -15,7 +15,7 @@ const aeth = withAmountUtils(makeIssuerKit('Aeth')); /** * Max debt for a fixed collateral of 1_000 aeth * - * @param {*} t + * @param {any} t * @param {readonly [Number, Number, Number]} input * @param {bigint} result */ @@ -75,9 +75,14 @@ test('negative liquidationPadding throws', t => { /** * Max debt for a fixed collateral of 1_000 aeth * - * @param {*} t + * @param {any} t * @param {readonly [Number, Number, Number]} input - * @param {{ fee: number, newDebt: number, toMint: number, surplus: number }} result + * @param {{ + * fee: number; + * newDebt: number; + * toMint: number; + * surplus: number; + * }} result */ function checkDebtCosts( t, diff --git a/packages/inter-protocol/test/vaultFactory/test-orderedVaultStore.js b/packages/inter-protocol/test/vaultFactory/test-orderedVaultStore.js index ea25b030ad8..49f7a8e6e7f 100644 --- a/packages/inter-protocol/test/vaultFactory/test-orderedVaultStore.js +++ b/packages/inter-protocol/test/vaultFactory/test-orderedVaultStore.js @@ -20,9 +20,10 @@ const mockVault = (vaultId, runCount, collateralCount) => { const BIGGER_INT = BigInt(Number.MAX_VALUE) + 1n; /** - * Records to be inserted in this order. Jumbled to verify insertion order invariance. + * Records to be inserted in this order. Jumbled to verify insertion order + * invariance. * - * @type {Array<[string, bigint, bigint]>} + * @type {[string, bigint, bigint][]} */ const fixture = [ ['vault-E', 40n, 100n], diff --git a/packages/inter-protocol/test/vaultFactory/test-prioritizedVaults.js b/packages/inter-protocol/test/vaultFactory/test-prioritizedVaults.js index 3955e79f049..0b211427545 100644 --- a/packages/inter-protocol/test/vaultFactory/test-prioritizedVaults.js +++ b/packages/inter-protocol/test/vaultFactory/test-prioritizedVaults.js @@ -13,7 +13,7 @@ import { makePrioritizedVaults, } from '../../src/vaultFactory/prioritizedVaults.js'; import { - makeCompoundedStabilityFeeProvider, + makeCompoundedInterestProvider, makeFakeVault, } from './interestSupport.js'; @@ -29,10 +29,7 @@ const makeCollector = () => { /** @type {Ratio[]} */ const ratios = []; - /** - * - * @param {[string, Vault]} record - */ + /** @param {[string, Vault]} record */ function lookForRatio([_, vault]) { ratios.push(currentDebtToCollateral(vault)); } @@ -199,7 +196,7 @@ test('stable ordering as interest accrues', async t => { const vaults = makePrioritizedVaults(store); const fakeVaultID1 = 'id-fakeVault1'; - const m = makeCompoundedStabilityFeeProvider(stableBrand); + const m = makeCompoundedInterestProvider(stableBrand); // ACTUAL DEBTS AFTER 100% DAILY INTEREST // day 0 diff --git a/packages/inter-protocol/test/vaultFactory/test-storage.js b/packages/inter-protocol/test/vaultFactory/test-storage.js index b51cd7a1968..c5652f6e577 100644 --- a/packages/inter-protocol/test/vaultFactory/test-storage.js +++ b/packages/inter-protocol/test/vaultFactory/test-storage.js @@ -9,10 +9,7 @@ import { makeDriverContext, makeManagerDriver } from './driver.js'; import '../../src/vaultFactory/types.js'; -/** - * @typedef {import('./driver.js').DriverContext & { - * }} Context - */ +/** @typedef {import('./driver.js').DriverContext & {}} Context */ /** @type {import('ava').TestFn} */ const test = unknownTest; @@ -48,7 +45,7 @@ test.only('storage keys', async t => { managerA, 'asset', 'mockChainStorageRoot.vaultFactory.managers.manager0', - ['compoundedStabilityFee', 'latestStabilityFeeUpdate', 'stabilityFee'], + ['compoundedInterest', 'interestRate', 'latestInterestUpdate'], ); await assertTopicPathData( t, diff --git a/packages/inter-protocol/test/vaultFactory/test-vault-collateralization.js b/packages/inter-protocol/test/vaultFactory/test-vault-collateralization.js index cf68de702db..7157de31682 100644 --- a/packages/inter-protocol/test/vaultFactory/test-vault-collateralization.js +++ b/packages/inter-protocol/test/vaultFactory/test-vault-collateralization.js @@ -4,10 +4,7 @@ import { makeTracer } from '@agoric/internal'; import { E } from '@endo/eventual-send'; import { makeDriverContext, makeManagerDriver } from './driver.js'; -/** - * @typedef {import('./driver.js').DriverContext & { - * }} Context - */ +/** @typedef {import('./driver.js').DriverContext & {}} Context */ /** @type {import('ava').TestFn} */ const test = unknownTest; diff --git a/packages/inter-protocol/test/vaultFactory/test-vault-interest.js b/packages/inter-protocol/test/vaultFactory/test-vault-interest.js index 9db316064cc..ce2c938f430 100644 --- a/packages/inter-protocol/test/vaultFactory/test-vault-interest.js +++ b/packages/inter-protocol/test/vaultFactory/test-vault-interest.js @@ -23,7 +23,7 @@ const trace = makeTracer('TestVaultInterest', false); * @property {IssuerKit} collateralKit * @property {Vault} vault * @property {Function} advanceRecordingPeriod - * @property {Function} setStabilityFee + * @property {Function} setInterestRate */ let testJig; /** @param {TestContext} jig */ @@ -137,7 +137,7 @@ test('charges', async t => { AmountMath.make(stableBrand, startingDebt - normalizedPaybackValue), ); - testJig.setStabilityFee(25n); + testJig.setInterestRate(25n); for (const [i, charge] of [22n, 27n, 34n].entries()) { // XXX https://github.com/Agoric/agoric-sdk/issues/5527 diff --git a/packages/inter-protocol/test/vaultFactory/test-vault-pause.js b/packages/inter-protocol/test/vaultFactory/test-vault-pause.js index 18f721ab58a..a64ee2723e3 100644 --- a/packages/inter-protocol/test/vaultFactory/test-vault-pause.js +++ b/packages/inter-protocol/test/vaultFactory/test-vault-pause.js @@ -3,10 +3,7 @@ import { test as unknownTest } from '@agoric/zoe/tools/prepare-test-env-ava.js'; import { makeTracer } from '@agoric/internal'; import { makeDriverContext, makeManagerDriver } from './driver.js'; -/** - * @typedef {import('./driver.js').DriverContext & { - * }} Context - */ +/** @typedef {import('./driver.js').DriverContext & {}} Context */ /** @type {import('ava').TestFn} */ const test = unknownTest; diff --git a/packages/inter-protocol/test/vaultFactory/test-vault.js b/packages/inter-protocol/test/vaultFactory/test-vault.js index 4d4fba3bda3..9cdeb7fae50 100644 --- a/packages/inter-protocol/test/vaultFactory/test-vault.js +++ b/packages/inter-protocol/test/vaultFactory/test-vault.js @@ -23,7 +23,7 @@ const trace = makeTracer('TestVault', false); * @property {IssuerKit} collateralKit * @property {Vault} vault * @property {Function} advanceRecordingPeriod - * @property {Function} setStabilityFee + * @property {Function} setInterestRate */ let testJig; /** @param {TestContext} jig */ diff --git a/packages/inter-protocol/test/vaultFactory/test-vaultFactory.js b/packages/inter-protocol/test/vaultFactory/test-vaultFactory.js index 598941588b4..80bc0cb63dc 100644 --- a/packages/inter-protocol/test/vaultFactory/test-vaultFactory.js +++ b/packages/inter-protocol/test/vaultFactory/test-vaultFactory.js @@ -43,12 +43,12 @@ import { /** * @typedef {Record & { - * aeth: IssuerKit & import('../supports.js').AmountUtils, - * run: IssuerKit & import('../supports.js').AmountUtils, - * bundleCache: Awaited>, - * rates: VaultManagerParamValues, - * interestTiming: InterestTiming, - * zoe: ZoeService, + * aeth: IssuerKit & import('../supports.js').AmountUtils; + * run: IssuerKit & import('../supports.js').AmountUtils; + * bundleCache: Awaited>; + * rates: VaultManagerParamValues; + * interestTiming: InterestTiming; + * zoe: ZoeService; * }} Context */ /** @type {import('ava').TestFn} */ @@ -126,7 +126,7 @@ test.before(async t => { * NOTE: called separately by each test so zoe/priceAuthority don't interfere * * @param {import('ava').ExecutionContext} t - * @param {Array | Ratio} priceOrList + * @param {NatValue[] | Ratio} priceOrList * @param {Amount | undefined} unitAmountIn * @param {import('@agoric/time/src/types').TimerService} timer * @param {RelativeTime} quoteInterval @@ -217,7 +217,16 @@ const setupServices = async ( 'AEth', rates, ); - /** @type {[any, VaultFactoryCreatorFacet, VFC['publicFacet'], VaultManager, PriceAuthority, CollateralManager]} */ + /** + * @type {[ + * any, + * VaultFactoryCreatorFacet, + * VFC['publicFacet'], + * VaultManager, + * PriceAuthority, + * CollateralManager, + * ]} + */ const [ governorInstance, vaultFactory, // creator @@ -375,7 +384,7 @@ test('interest on multiple vaults', async t => { const { zoe, aeth, run, rates: defaultRates } = t.context; const rates = { ...defaultRates, - stabilityFee: makeRatio(5n, run.brand), + interestRate: makeRatio(5n, run.brand), }; t.context.rates = rates; // charging period is 1 week. Clock ticks by days @@ -489,24 +498,24 @@ test('interest on multiple vaults', async t => { const aliceUpdate = await E(aliceNotifier).getUpdateSince(); const bobUpdate = await E(bobNotifier).getUpdateSince(); - // 160n is initial fee. stabilityFee is ~3n/week. compounding is in the noise. + // 160n is initial fee. interest is ~3n/week. compounding is in the noise. const bobAddedDebt = 160n + 3n; t.deepEqual( calculateCurrentDebt( bobUpdate.value.debtSnapshot.debt, - bobUpdate.value.debtSnapshot.stabilityFee, - assetUpdate.value.compoundedStabilityFee, + bobUpdate.value.debtSnapshot.interest, + assetUpdate.value.compoundedInterest, ), run.make(3200n + bobAddedDebt), ); - // 236 is the initial fee. stabilityFee is ~4n/week + // 236 is the initial fee. Interest is ~4n/week const aliceAddedDebt = 236n + 4n; t.deepEqual( calculateCurrentDebt( aliceUpdate.value.debtSnapshot.debt, - aliceUpdate.value.debtSnapshot.stabilityFee, - assetUpdate.value.compoundedStabilityFee, + aliceUpdate.value.debtSnapshot.interest, + assetUpdate.value.compoundedInterest, ), run.make(4700n + aliceAddedDebt), `should have collected ${aliceAddedDebt}`, @@ -514,7 +523,7 @@ test('interest on multiple vaults', async t => { // but no change to the snapshot t.deepEqual(aliceUpdate.value.debtSnapshot, { debt: run.make(4935n), - stabilityFee: makeRatio(100n, run.brand, 100n), + interest: makeRatio(100n, run.brand, 100n), }); const rewardAllocation = await E(vaultFactory).getRewardAllocation(); @@ -522,7 +531,7 @@ test('interest on multiple vaults', async t => { t.is( rewardAllocation.Minted.value, rewardRunCount, - // reward includes 5% fees on two loans plus 1% stabilityFee three times on each + // reward includes 5% fees on two loans plus 1% interest three times on each `Should be ${rewardRunCount}, was ${rewardAllocation.Minted.value}`, ); @@ -543,7 +552,7 @@ test('interest on multiple vaults', async t => { // Advance another 7 days, past one charging and recording period await manualTimer.tickN(8); - // open a vault when manager's stabilityFee already compounded + // open a vault when manager's interest already compounded const wantedRun = 1_000n; /** @type {UserSeat} */ const danVaultSeat = await E(zoe).offer( @@ -631,7 +640,7 @@ test('adjust balances', async t => { t.deepEqual(aliceUpdate.value.debtSnapshot.debt, debtLevel); t.deepEqual(aliceUpdate.value.debtSnapshot, { debt: run.make(5250n), - stabilityFee: makeRatio(100n, run.brand), + interest: makeRatio(100n, run.brand), }); // increase collateral 1 ///////////////////////////////////// (give both) @@ -728,7 +737,7 @@ test('adjust balances', async t => { t.deepEqual(aliceUpdate.value.debtSnapshot.debt, debtLevel); t.deepEqual(aliceUpdate.value.debtSnapshot, { debt: run.make(5253n), - stabilityFee: run.makeRatio(100n), + interest: run.makeRatio(100n), }); // reduce collateral ///////////////////////////////////// (want both) @@ -889,12 +898,12 @@ test('adjust balances - withdraw RUN', async t => { t.deepEqual(aliceUpdate.value.debtSnapshot.debt, debtLevel); }); -test('adjust balances after stabilityFee charges', async t => { +test('adjust balances after interest charges', async t => { const OPEN1 = 450n; const AMPLE = 100_000n; const { aeth, run } = t.context; - // charge stabilityFee on every tick + // charge interest on every tick const manualTimer = buildManualTimer(trace, 0n, { timeStep: SECONDS_PER_DAY, }); @@ -904,7 +913,7 @@ test('adjust balances after stabilityFee charges', async t => { }; t.context.rates = { ...t.context.rates, - stabilityFee: run.makeRatio(20n), + interestRate: run.makeRatio(20n), }; const services = await setupServices( @@ -931,7 +940,7 @@ test('adjust balances after stabilityFee charges', async t => { ); const { vault } = await E(vaultSeat).getOfferResult(); - trace('1. Charge stabilityFee'); + trace('1. Charge interest'); await manualTimer.tick(); await manualTimer.tick(); @@ -1022,7 +1031,7 @@ test('transfer vault', async t => { customDetails: { debtSnapshot: { debt: debtAmount, - stabilityFee: aliceFinish.value.debtSnapshot.stabilityFee, + interest: aliceFinish.value.debtSnapshot.interest, }, locked: collateralAmount, vaultState: 'active', @@ -1217,7 +1226,7 @@ test('collect fees from vault', async t => { recordingPeriod: SECONDS_PER_WEEK, }; - // charge stabilityFee on every tick + // charge interest on every tick const manualTimer = buildManualTimer(t.log, 0n, { timeStep: SECONDS_PER_WEEK, eventLoopIteration, @@ -1515,11 +1524,12 @@ test('debt too small - MinInitialDebt', async t => { }); /** - * Each vaultManager manages one collateral type and has a governed parameter, `debtLimit`, - * that specifies a cap on the amount of debt the manager will allow. + * Each vaultManager manages one collateral type and has a governed parameter, + * `debtLimit`, that specifies a cap on the amount of debt the manager will + * allow. * - * Attempts to adjust balances on vaults beyond the debt limit fail. - * In other words, minting for anything other than charging stabilityFee fails. + * Attempts to adjust balances on vaults beyond the debt limit fail. In other + * words, minting for anything other than charging interest fails. */ test('excessive debt on collateral type - debtLimit', async t => { const { zoe, aeth, run } = t.context; @@ -1603,7 +1613,7 @@ test('addVaultType: extra, unexpected params', async t => { const params = { ...defaultParamValues(aeth.brand), shoeSize: 10 }; const extraParams = { ...params, shoeSize: 10 }; - const { stabilityFee: _1, ...missingParams } = { + const { interestRate: _1, ...missingParams } = { ...defaultParamValues(aeth.brand), shoeSize: 10, }; @@ -1613,7 +1623,7 @@ test('addVaultType: extra, unexpected params', async t => { E(vaultFactory).addVaultType(chit.issuer, 'Chit', missingParams), { message: - /initialParamValues: .* - Must have missing properties \["stabilityFee"\]/, + /initialParamValues: .* - Must have missing properties \["interestRate"\]/, }, ); @@ -1679,7 +1689,7 @@ test('manager notifiers, with snapshot', async t => { }; t.context.rates = { ...t.context.rates, - stabilityFee: run.makeRatio(20n), + interestRate: run.makeRatio(20n), }; const services = await setupServices( @@ -1815,7 +1825,7 @@ test('manager notifiers, with snapshot', async t => { ); ({ vault } = await E(vaultSeat).getOfferResult()); - trace('6. Loan stabilityFee'); + trace('6. Loan interest'); vaultSeat = await E(services.zoe).offer( await E(E(vfPublic).getCollateralManager(aeth.brand)).makeVaultInvitation(), harden({ @@ -1836,9 +1846,9 @@ test('manager notifiers, with snapshot', async t => { }); m.addDebt(DEBT2); await manualTimer.tickN(5); - const stabilityFeeAccrued = (await E(vault).getCurrentDebt()).value - DEBT1; - m.addDebt(stabilityFeeAccrued); - t.is(stabilityFeeAccrued, 9n); + const interestAccrued = (await E(vault).getCurrentDebt()).value - DEBT1; + m.addDebt(interestAccrued); + t.is(interestAccrued, 9n); trace('7. make another loan to trigger a publish'); vaultSeat = await E(services.zoe).offer( @@ -1938,7 +1948,11 @@ test('manager notifiers, with snapshot', async t => { totalDebt: { value: totalDebt }, }); - /** @type {ReturnType} */ + /** + * @type {ReturnType< + * import('@agoric/internal/src/storage-test-utils.js').makeMockChainStorageRoot + * >} + */ // @ts-expect-error mock const storage = await services.space.consume.chainStorage; const doc = { @@ -2000,15 +2014,15 @@ test('governance publisher', async t => { // can't deepEqual because of non-literal objects so check keys and then partial shapes t.deepEqual(Object.keys(current), [ 'DebtLimit', + 'InterestRate', 'LiquidationMargin', 'LiquidationPadding', 'LiquidationPenalty', 'MintFee', - 'StabilityFee', ]); t.like(current, { DebtLimit: { type: 'amount' }, - StabilityFee: { type: 'ratio' }, + InterestRate: { type: 'ratio' }, LiquidationMargin: { type: 'ratio' }, LiquidationPadding: { type: 'ratio' }, LiquidationPenalty: { type: 'ratio' }, diff --git a/packages/inter-protocol/test/vaultFactory/test-vaultLiquidation.js b/packages/inter-protocol/test/vaultFactory/test-vaultLiquidation.js index 284e68c8a91..42cbc9cbc81 100644 --- a/packages/inter-protocol/test/vaultFactory/test-vaultLiquidation.js +++ b/packages/inter-protocol/test/vaultFactory/test-vaultLiquidation.js @@ -42,12 +42,12 @@ import { /** * @typedef {Record & { - * aeth: IssuerKit & import('../supports.js').AmountUtils, - * run: IssuerKit & import('../supports.js').AmountUtils, - * bundleCache: Awaited>, - * rates: VaultManagerParamValues, - * interestTiming: InterestTiming, - * zoe: ZoeService, + * aeth: IssuerKit & import('../supports.js').AmountUtils; + * run: IssuerKit & import('../supports.js').AmountUtils; + * bundleCache: Awaited>; + * rates: VaultManagerParamValues; + * interestTiming: InterestTiming; + * zoe: ZoeService; * }} Context */ @@ -124,7 +124,7 @@ test.before(async t => { * NOTE: called separately by each test so zoe/priceAuthority don't interfere * * @param {import('ava').ExecutionContext} t - * @param {Array | Ratio} priceOrList + * @param {NatValue[] | Ratio} priceOrList * @param {Amount | undefined} unitAmountIn * @param {import('@agoric/time/src/types').TimerService} timer * @param {RelativeTime} quoteInterval @@ -194,7 +194,17 @@ const setupServices = async ( ); /** @typedef {import('../../src/proposals/econ-behaviors.js').AuctioneerKit} AuctioneerKit */ /** @typedef {import('@agoric/zoe/tools/manualPriceAuthority.js').ManualPriceAuthority} ManualPriceAuthority */ - /** @type {[any, VaultFactoryCreatorFacet, VFC['publicFacet'], VaultManager, AuctioneerKit, ManualPriceAuthority, CollateralManager]} */ + /** + * @type {[ + * any, + * VaultFactoryCreatorFacet, + * VFC['publicFacet'], + * VaultManager, + * AuctioneerKit, + * ManualPriceAuthority, + * CollateralManager, + * ]} + */ const [ governorInstance, vaultFactory, // creator @@ -416,7 +426,7 @@ test('price drop', async t => { t.is(notification.value.vaultState, Phase.ACTIVE); t.deepEqual((await notification.value).debtSnapshot, { debt: AmountMath.add(wantMinted, fee), - stabilityFee: makeRatio(100n, run.brand), + interest: makeRatio(100n, run.brand), }); const { Minted: lentAmount } = await E(vaultSeat).getFinalAllocation(); t.truthy(AmountMath.isEqual(lentAmount, wantMinted), 'received 470 Minted'); @@ -653,7 +663,7 @@ test('liquidate two loans', async t => { const rates = harden({ ...defaultRates, // charge 40% interest / year - stabilityFee: run.makeRatio(40n), + interestRate: run.makeRatio(40n), liquidationMargin: run.makeRatio(103n), }); t.context.rates = rates; @@ -939,8 +949,17 @@ test('liquidate two loans', async t => { manualTimer, ); - totalDebt += 7n; + totalDebt += 6n; + await aethVaultMetrics.assertChange({ + lockedQuote: null, + totalDebt: { value: totalDebt }, + }); + totalDebt += 1n; await aethVaultMetrics.assertChange({ + lockedQuote: makeRatioFromAmounts( + aeth.make(1_000_000n), + run.make(7_000_000n), + ), totalDebt: { value: totalDebt }, }); totalDebt += 6n; @@ -1004,7 +1023,7 @@ test('sell goods at auction', async t => { const rates = harden({ ...defaultRates, // charge 200% interest - stabilityFee: run.makeRatio(200n), + interestRate: run.makeRatio(200n), liquidationMargin: run.makeRatio(103n), }); t.context.rates = rates; @@ -1423,7 +1442,7 @@ test('Auction sells all collateral w/shortfall', async t => { const rates = harden({ ...defaultRates, // charge 40% interest / year - stabilityFee: run.makeRatio(40n), + interestRate: run.makeRatio(40n), liquidationMargin: run.makeRatio(130n), }); t.context.rates = rates; @@ -1643,7 +1662,7 @@ test('liquidation Margin matters', async t => { const rates = harden({ ...defaultRates, - stabilityFee: run.makeRatio(0n), + interestRate: run.makeRatio(0n), liquidationMargin: run.makeRatio(150n), }); t.context.rates = rates; @@ -1747,7 +1766,7 @@ test('reinstate vault', async t => { const rates = harden({ ...defaultRates, - stabilityFee: run.makeRatio(0n), + interestRate: run.makeRatio(0n), liquidationMargin: run.makeRatio(150n), }); t.context.rates = rates; @@ -2623,7 +2642,7 @@ test('refund to one of two loans', async t => { t.is(aliceNotification.value.vaultState, Phase.ACTIVE); t.deepEqual((await aliceNotification.value).debtSnapshot, { debt: AmountMath.add(aliceWantMinted, aliceFee), - stabilityFee: makeRatio(100n, run.brand), + interest: makeRatio(100n, run.brand), }); const { Minted: lentAmount } = await E(aliceVaultSeat).getFinalAllocation(); t.truthy(AmountMath.isEqual(lentAmount, aliceWantMinted)); @@ -3146,7 +3165,13 @@ test('Bug 7796 missing lockedPrice', async t => { const penaltyAeth = 309_850n; await aethVaultMetrics.assertChange({ - lockedQuote: { denominator: { value: 9_990_000n } }, + lockedQuote: null, + }); + await aethVaultMetrics.assertChange({ + lockedQuote: makeRatioFromAmounts( + aeth.make(1_000_000n), + run.make(9_990_000n), + ), }); await aethVaultMetrics.assertChange({ liquidatingDebt: { value: totalDebt }, @@ -3336,7 +3361,13 @@ test('Bug 7851 & no bidders', async t => { ); await aethVaultMetrics.assertChange({ - lockedQuote: { denominator: { value: 9_990_000n } }, + lockedQuote: null, + }); + await aethVaultMetrics.assertChange({ + lockedQuote: makeRatioFromAmounts( + aeth.make(1_000_000n), + run.make(9_990_000n), + ), }); await aethVaultMetrics.assertChange({ liquidatingDebt: { value: aliceDebt }, diff --git a/packages/inter-protocol/test/vaultFactory/vault-contract-wrapper.js b/packages/inter-protocol/test/vaultFactory/vault-contract-wrapper.js index bf039f6ef1f..e403f71029f 100644 --- a/packages/inter-protocol/test/vaultFactory/vault-contract-wrapper.js +++ b/packages/inter-protocol/test/vaultFactory/vault-contract-wrapper.js @@ -33,7 +33,7 @@ const marshaller = makeFakeMarshaller(); /** * @param {ZCF} zcf - * @param {{feeMintAccess: FeeMintAccess}} privateArgs + * @param {{ feeMintAccess: FeeMintAccess }} privateArgs * @param {import('@agoric/ertp').Baggage} baggage */ export async function start(zcf, privateArgs, baggage) { @@ -57,7 +57,7 @@ export async function start(zcf, privateArgs, baggage) { let vaultCounter = 0; let currentInterest = makeRatio(5n, stableBrand); // 5% - let compoundedStabilityFee = makeRatio(100n, stableBrand); // starts at 1.0, no interest + let compoundedInterest = makeRatio(100n, stableBrand); // starts at 1.0, no interest const { zcfSeat: mintSeat } = zcf.makeEmptySeatKit(); @@ -134,7 +134,7 @@ export async function start(zcf, privateArgs, baggage) { getMintFee() { return makeRatio(500n, stableBrand, BASIS_POINTS); }, - getStabilityFee() { + getInterestRate() { return currentInterest; }, getChargingPeriod() { @@ -164,7 +164,7 @@ export async function start(zcf, privateArgs, baggage) { getCollateralQuote() { return Promise.reject(Error('Not implemented')); }, - getCompoundedStabilityFee: () => compoundedStabilityFee, + getCompoundedInterest: () => compoundedInterest, scopeDescription: base => `VCW: ${base}`, handleBalanceChange: () => { console.warn('mock handleBalanceChange does nothing'); @@ -193,13 +193,13 @@ export async function start(zcf, privateArgs, baggage) { 100n + currentInterest.numerator.value, currentInterest.numerator.brand, ); - compoundedStabilityFee = multiplyRatios( - compoundedStabilityFee, + compoundedInterest = multiplyRatios( + compoundedInterest, currentInterestAsMultiplicand, ); }; - const setStabilityFee = percent => { + const setInterestRate = percent => { currentInterest = makeRatio(percent, stableBrand); }; @@ -207,7 +207,7 @@ export async function start(zcf, privateArgs, baggage) { advanceRecordingPeriod, collateralKit, stableMint, - setStabilityFee, + setInterestRate, vault, })); diff --git a/packages/inter-protocol/test/vaultFactory/vaultFactoryUtils.js b/packages/inter-protocol/test/vaultFactory/vaultFactoryUtils.js index c466ee6ed6e..16592960c9f 100644 --- a/packages/inter-protocol/test/vaultFactory/vaultFactoryUtils.js +++ b/packages/inter-protocol/test/vaultFactory/vaultFactoryUtils.js @@ -24,12 +24,16 @@ export const BASIS_POINTS = 10000n; /** * @typedef {Record & { - * aeth: IssuerKit & import('../supports.js').AmountUtils, - * run: IssuerKit & import('../supports.js').AmountUtils, - * bundleCache: Awaited>, - * rates: VaultManagerParamValues, - * interestTiming: InterestTiming, - * zoe: ZoeService, + * aeth: IssuerKit & import('../supports.js').AmountUtils; + * run: IssuerKit & import('../supports.js').AmountUtils; + * bundleCache: Awaited< + * ReturnType< + * typeof import('@agoric/swingset-vat/tools/bundleTool.js').unsafeMakeBundleCache + * > + * >; + * rates: VaultManagerParamValues; + * interestTiming: InterestTiming; + * zoe: ZoeService; * }} Context */ @@ -46,7 +50,7 @@ export const defaultParamValues = debtBrand => // penalty upon liquidation as proportion of debt liquidationPenalty: makeRatio(10n, debtBrand), // periodic interest rate (per charging period) - stabilityFee: makeRatio(100n, debtBrand, BASIS_POINTS), + interestRate: makeRatio(100n, debtBrand, BASIS_POINTS), // charge to create or increase loan balance mintFee: makeRatio(500n, debtBrand, BASIS_POINTS), // NB: liquidationPadding defaults to zero in contract @@ -56,7 +60,7 @@ export const defaultParamValues = debtBrand => * @param {import('ava').ExecutionContext} t * @param {IssuerKit<'nat'>} run * @param {IssuerKit<'nat'>} aeth - * @param {Array | Ratio} priceOrList + * @param {NatValue[] | Ratio} priceOrList * @param {RelativeTime} quoteInterval * @param {Amount | undefined} unitAmountIn * @param {Partial} actionParamArgs @@ -160,7 +164,8 @@ export const getRunFromFaucet = async (t, amount) => { }; /** - * Vault offer result used to include `publicNotifiers` but now is `publicSubscribers`. + * Vault offer result used to include `publicNotifiers` but now is + * `publicSubscribers`. * * @param {UserSeat} vaultSeat */ diff --git a/packages/internal/package.json b/packages/internal/package.json index ab56ed3cc98..4dd238a06be 100755 --- a/packages/internal/package.json +++ b/packages/internal/package.json @@ -21,16 +21,16 @@ }, "dependencies": { "@agoric/zone": "^0.2.2", - "@endo/far": "^0.2.18", - "@endo/marshal": "^0.8.5", - "@endo/patterns": "^0.2.2", - "@endo/promise-kit": "^0.2.56", - "@endo/stream": "^0.3.25", + "@endo/far": "^0.2.19", + "@endo/marshal": "^0.8.6", + "@endo/patterns": "^0.2.3", + "@endo/promise-kit": "^0.2.57", + "@endo/stream": "^0.3.26", "anylogger": "^0.21.0", "jessie.js": "^0.3.2" }, "devDependencies": { - "@endo/init": "^0.5.56", + "@endo/init": "^0.5.57", "ava": "^5.3.0", "tsd": "^0.28.1" }, diff --git a/packages/internal/src/callback.js b/packages/internal/src/callback.js index 18b5fa82ef8..d645b63745d 100644 --- a/packages/internal/src/callback.js +++ b/packages/internal/src/callback.js @@ -265,7 +265,7 @@ export const prepareAttenuator = ( /** * @param {object} opts * @param {any} [opts.target] - * @param {boolean} [opts.isSync=false] + * @param {boolean} [opts.isSync] * @param {Overrides} [opts.overrides] */ ({ diff --git a/packages/internal/src/lib-chainStorage.js b/packages/internal/src/lib-chainStorage.js index 9f0e53f10db..0d978249d07 100644 --- a/packages/internal/src/lib-chainStorage.js +++ b/packages/internal/src/lib-chainStorage.js @@ -1,7 +1,8 @@ // @ts-check import { E } from '@endo/far'; -import { M, heapZone } from '@agoric/zone'; +import { M } from '@endo/patterns'; +import { makeHeapZone } from '@agoric/zone'; import * as cb from './callback.js'; const { Fail } = assert; @@ -207,7 +208,7 @@ export const prepareChainStorageNode = zone => { return makeChainStorageNode; }; -const makeHeapChainStorageNode = prepareChainStorageNode(heapZone); +const makeHeapChainStorageNode = prepareChainStorageNode(makeHeapZone()); /** * Create a heap-based root storage node for a given backing function and root path. diff --git a/packages/internal/src/marshal.js b/packages/internal/src/marshal.js index d4e65bca780..34278ba2035 100644 --- a/packages/internal/src/marshal.js +++ b/packages/internal/src/marshal.js @@ -65,7 +65,7 @@ harden(assertCapData); * @param {Map} data * @param {string} key * @param {ReturnType['fromCapData']} fromCapData - * @param {number} [index=-1] index of the desired value in a deserialized stream cell + * @param {number} [index] index of the desired value in a deserialized stream cell */ export const unmarshalFromVstorage = (data, key, fromCapData, index = -1) => { const serialized = data.get(key) || Fail`no data for ${key}`; diff --git a/packages/internal/test/test-callback.js b/packages/internal/test/test-callback.js index 6b020632608..687156ec2c8 100644 --- a/packages/internal/test/test-callback.js +++ b/packages/internal/test/test-callback.js @@ -3,7 +3,7 @@ import '@endo/init'; import test from 'ava'; import { Far } from '@endo/far'; -import { heapZone } from '@agoric/zone'; +import { makeHeapZone } from '@agoric/zone'; import * as cb from '../src/callback.js'; test('near function callbacks', t => { @@ -266,12 +266,8 @@ test('isCallback', t => { }); test('makeAttenuator', async t => { - const makeAttenuator = cb.prepareAttenuator(heapZone, [ - 'm0', - 'm1', - 'm2', - 'm4', - ]); + const zone = makeHeapZone(); + const makeAttenuator = cb.prepareAttenuator(zone, ['m0', 'm1', 'm2', 'm4']); const target = Far('original', { m0() { return 'return original.m0'; diff --git a/packages/notifier/package.json b/packages/notifier/package.json index 6f804bc2ea6..5f7e60bb651 100644 --- a/packages/notifier/package.json +++ b/packages/notifier/package.json @@ -36,16 +36,16 @@ "@agoric/assert": "^0.6.0", "@agoric/internal": "^0.3.2", "@agoric/vat-data": "^0.5.2", - "@endo/far": "^0.2.18", - "@endo/marshal": "^0.8.5", - "@endo/patterns": "^0.2.2", - "@endo/promise-kit": "^0.2.56" + "@endo/far": "^0.2.19", + "@endo/marshal": "^0.8.6", + "@endo/patterns": "^0.2.3", + "@endo/promise-kit": "^0.2.57" }, "devDependencies": { "@agoric/swing-store": "^0.9.1", "@agoric/swingset-vat": "^0.32.2", - "@endo/init": "^0.5.56", - "@endo/ses-ava": "^0.2.40", + "@endo/init": "^0.5.57", + "@endo/ses-ava": "^0.2.41", "ava": "^5.3.0", "c8": "^7.13.0" }, diff --git a/packages/notifier/src/publish-kit.js b/packages/notifier/src/publish-kit.js index 51fdc6f4e0f..180855dc742 100644 --- a/packages/notifier/src/publish-kit.js +++ b/packages/notifier/src/publish-kit.js @@ -209,7 +209,7 @@ const DurablePublishKitStateShape = harden({ /** * @param {object} [options] - * @param {DurablePublishKitValueDurability & 'mandatory'} [options.valueDurability='mandatory'] + * @param {DurablePublishKitValueDurability & 'mandatory'} [options.valueDurability] * @returns {DurablePublishKitState} */ const initDurablePublishKitState = (options = {}) => { diff --git a/packages/pegasus/package.json b/packages/pegasus/package.json index 86b26a7fbdf..0adc12f73b6 100644 --- a/packages/pegasus/package.json +++ b/packages/pegasus/package.json @@ -37,12 +37,12 @@ "@agoric/swingset-vat": "^0.32.2", "@agoric/vats": "^0.15.1", "@agoric/zoe": "^0.26.2", - "@endo/bundle-source": "^2.5.1", - "@endo/captp": "^3.1.1", - "@endo/far": "^0.2.18", - "@endo/init": "^0.5.56", - "@endo/nat": "^4.1.27", - "@endo/promise-kit": "^0.2.56" + "@endo/bundle-source": "^2.5.2", + "@endo/captp": "^3.1.2", + "@endo/far": "^0.2.19", + "@endo/init": "^0.5.57", + "@endo/nat": "^4.1.28", + "@endo/promise-kit": "^0.2.57" }, "devDependencies": { "@agoric/deploy-script-support": "^0.10.3", diff --git a/packages/pegasus/src/pegasus.js b/packages/pegasus/src/pegasus.js index 43a434012ee..4f074f0b11e 100644 --- a/packages/pegasus/src/pegasus.js +++ b/packages/pegasus/src/pegasus.js @@ -316,8 +316,8 @@ const makePegasus = (zcf, board, namesByAddress) => { /** * Return a handler that can be used with the Network API. * - * @param {ERef} [transferProtocol=DEFAULT_TRANSFER_PROTOCOL] - * @param {ERef} [denomTransformer=DEFAULT_DENOM_TRANSFORMER] + * @param {ERef} [transferProtocol] + * @param {ERef} [denomTransformer] * @returns {PegasusConnectionKit} */ makePegasusConnectionKit( diff --git a/packages/same-structure/package.json b/packages/same-structure/package.json index 8d0005352aa..6d0a34ff8da 100644 --- a/packages/same-structure/package.json +++ b/packages/same-structure/package.json @@ -31,7 +31,7 @@ "dependencies": { "@agoric/assert": "^0.6.0", "@agoric/store": "^0.9.2", - "@endo/marshal": "^0.8.5" + "@endo/marshal": "^0.8.6" }, "files": [ "*.js", diff --git a/packages/sharing-service/package.json b/packages/sharing-service/package.json index 1c83a22a0eb..3427cb9ff0c 100644 --- a/packages/sharing-service/package.json +++ b/packages/sharing-service/package.json @@ -28,11 +28,11 @@ "homepage": "https://github.com/Agoric/agoric-sdk#readme", "dependencies": { "@agoric/assert": "^0.6.0", - "@endo/marshal": "^0.8.5" + "@endo/marshal": "^0.8.6" }, "devDependencies": { "@agoric/swingset-vat": "^0.32.2", - "@endo/eventual-send": "^0.17.2", + "@endo/eventual-send": "^0.17.3", "ava": "^5.3.0", "c8": "^7.13.0" }, diff --git a/packages/smart-wallet/package.json b/packages/smart-wallet/package.json index 0c7982b0e5f..055d347ef2b 100644 --- a/packages/smart-wallet/package.json +++ b/packages/smart-wallet/package.json @@ -17,8 +17,8 @@ }, "devDependencies": { "@agoric/cosmic-proto": "^0.3.0", - "@endo/captp": "^3.1.1", - "@endo/init": "^0.5.56", + "@endo/captp": "^3.1.2", + "@endo/init": "^0.5.57", "ava": "^5.3.0", "import-meta-resolve": "^2.2.1" }, @@ -33,11 +33,11 @@ "@agoric/vat-data": "^0.5.2", "@agoric/vats": "^0.15.1", "@agoric/zoe": "^0.26.2", - "@endo/eventual-send": "^0.17.2", - "@endo/far": "^0.2.18", - "@endo/marshal": "^0.8.5", - "@endo/nat": "^4.1.27", - "@endo/promise-kit": "^0.2.56" + "@endo/eventual-send": "^0.17.3", + "@endo/far": "^0.2.19", + "@endo/marshal": "^0.8.6", + "@endo/nat": "^4.1.28", + "@endo/promise-kit": "^0.2.57" }, "files": [ "src/" diff --git a/packages/smart-wallet/src/smartWallet.js b/packages/smart-wallet/src/smartWallet.js index c7a7e7893d6..39da99f88d3 100644 --- a/packages/smart-wallet/src/smartWallet.js +++ b/packages/smart-wallet/src/smartWallet.js @@ -520,7 +520,7 @@ export const prepareSmartWallet = (baggage, shared) => { * Umarshals the actionCapData and delegates to the appropriate action handler. * * @param {import('@endo/marshal').CapData} actionCapData of type BridgeAction - * @param {boolean} [canSpend=false] + * @param {boolean} [canSpend] * @returns {Promise} */ handleBridgeAction(actionCapData, canSpend = false) { diff --git a/packages/smart-wallet/src/walletFactory.js b/packages/smart-wallet/src/walletFactory.js index 39609a77de6..55a8de12c30 100644 --- a/packages/smart-wallet/src/walletFactory.js +++ b/packages/smart-wallet/src/walletFactory.js @@ -16,18 +16,20 @@ import { shape } from './typeGuards.js'; const trace = makeTracer('WltFct'); -export const privateArgsShape = harden( - M.splitRecord( +/** @type {ContractMeta} */ +export const meta = { + customTermsShape: { + agoricNames: M.eref(M.remotable('agoricNames')), + board: M.eref(M.remotable('board')), + assetPublisher: M.eref(M.remotable('Bank')), + }, + privateArgsShape: M.splitRecord( { storageNode: M.eref(M.remotable('StorageNode')) }, { walletBridgeManager: M.eref(M.remotable('walletBridgeManager')) }, ), -); - -export const customTermsShape = harden({ - agoricNames: M.eref(M.remotable('agoricNames')), - board: M.eref(M.remotable('board')), - assetPublisher: M.eref(M.remotable('Bank')), -}); + upgradability: 'canUpgrade', +}; +harden(meta); /** * Provide a NameHub for this address and insert depositFacet only if not @@ -141,7 +143,7 @@ export const makeAssetRegistry = assetPublisher => { * }} privateArgs * @param {import('@agoric/vat-data').Baggage} baggage */ -export const prepare = async (zcf, privateArgs, baggage) => { +export const start = async (zcf, privateArgs, baggage) => { const { agoricNames, board, assetPublisher } = zcf.getTerms(); const zoe = zcf.getZoeService(); @@ -299,3 +301,4 @@ export const prepare = async (zcf, privateArgs, baggage) => { creatorFacet, }; }; +harden(start); diff --git a/packages/smart-wallet/test/contexts.js b/packages/smart-wallet/test/contexts.js index 75621ad0723..7429634122a 100644 --- a/packages/smart-wallet/test/contexts.js +++ b/packages/smart-wallet/test/contexts.js @@ -24,7 +24,7 @@ export const makeDefaultTestContext = async (t, makeSpace) => { `${dirname}/../src/walletFactory.js`, 'walletFactory', ); - /** @type {Promise>} */ + /** @type {Promise>} */ const installation = E(zoe).install(bundle); //#endregion diff --git a/packages/smart-wallet/test/swingsetTests/upgradeWalletFactory/bootstrap-walletFactory-service-upgrade.js b/packages/smart-wallet/test/swingsetTests/upgradeWalletFactory/bootstrap-walletFactory-service-upgrade.js index a4a548ccb03..27772b09ed6 100644 --- a/packages/smart-wallet/test/swingsetTests/upgradeWalletFactory/bootstrap-walletFactory-service-upgrade.js +++ b/packages/smart-wallet/test/swingsetTests/upgradeWalletFactory/bootstrap-walletFactory-service-upgrade.js @@ -41,7 +41,7 @@ export const buildRootObject = async () => { let wallet; // for startInstance - /** @type {Installation} */ + /** @type {Installation} */ let installation; const terms = { agoricNames, diff --git a/packages/smart-wallet/test/swingsetTests/upgradeWalletFactory/walletFactory-V2.js b/packages/smart-wallet/test/swingsetTests/upgradeWalletFactory/walletFactory-V2.js index dba7ecc5369..983fd64171b 100644 --- a/packages/smart-wallet/test/swingsetTests/upgradeWalletFactory/walletFactory-V2.js +++ b/packages/smart-wallet/test/swingsetTests/upgradeWalletFactory/walletFactory-V2.js @@ -17,10 +17,16 @@ import { publishDepositFacet, } from '../../../src/walletFactory.js'; +/** @type {ContractMeta} */ +export const meta = { + upgradability: 'canUpgrade', +}; +harden(meta); + /** - * @type {typeof import('../../../src/walletFactory.js').prepare} + * @type {typeof import('../../../src/walletFactory.js').start} */ -export const prepare = async (zcf, privateArgs, baggage) => { +export const start = async (zcf, privateArgs, baggage) => { // copy paste from original contract, with type imports fixed and sayHelloUpgrade method added to creatorFacet) const { agoricNames, board, assetPublisher } = zcf.getTerms(); diff --git a/packages/smart-wallet/test/test-startWalletFactory.js b/packages/smart-wallet/test/test-startWalletFactory.js index 620b80ad48f..f0425b372a1 100644 --- a/packages/smart-wallet/test/test-startWalletFactory.js +++ b/packages/smart-wallet/test/test-startWalletFactory.js @@ -26,7 +26,7 @@ const makeTestContext = async () => { `${dirname}/../src/walletFactory.js`, 'walletFactory', ); - /** @type {Promise>} */ + /** @type {Promise>} */ const installation = E(zoe).install(bundle); //#endregion diff --git a/packages/solo/package.json b/packages/solo/package.json index cdc4119f218..46d4e81d0e5 100644 --- a/packages/solo/package.json +++ b/packages/solo/package.json @@ -36,12 +36,12 @@ "@agoric/time": "^0.3.2", "@agoric/vats": "^0.15.1", "@agoric/wallet": "^0.18.3", - "@endo/captp": "^3.1.1", - "@endo/eventual-send": "^0.17.2", - "@endo/import-bundle": "^0.3.4", - "@endo/init": "^0.5.56", - "@endo/marshal": "^0.8.5", - "@endo/promise-kit": "^0.2.56", + "@endo/captp": "^3.1.2", + "@endo/eventual-send": "^0.17.3", + "@endo/import-bundle": "^0.3.5", + "@endo/init": "^0.5.57", + "@endo/marshal": "^0.8.6", + "@endo/promise-kit": "^0.2.57", "anylogger": "^0.21.0", "deterministic-json": "^1.0.5", "esm": "agoric-labs/esm#Agoric-built", @@ -49,7 +49,7 @@ "http-proxy-middleware": "^2.0.6", "import-meta-resolve": "^2.2.1", "minimist": "^1.2.0", - "morgan": "^1.9.1", + "morgan": "^1.10.0", "node-fetch": "^2.6.0", "temp": "^0.9.1", "tmp": "^0.2.1", @@ -57,7 +57,7 @@ }, "devDependencies": { "@agoric/ertp": "^0.16.2", - "@endo/bundle-source": "^2.5.1", + "@endo/bundle-source": "^2.5.2", "ava": "^5.3.0", "c8": "^7.13.0" }, diff --git a/packages/solo/src/add-chain.js b/packages/solo/src/add-chain.js index 896fba368ec..cf549cdd1f8 100644 --- a/packages/solo/src/add-chain.js +++ b/packages/solo/src/add-chain.js @@ -13,7 +13,7 @@ const DEFAULT_CHAIN_CONFIG = 'https://testnet.agoric.com/network-config'; /** * @param {string} basedir * @param {string} [chainConfig] - * @param {boolean} [force=false] + * @param {boolean} [force] */ async function addChain(basedir, chainConfig, force = false) { let actualConfig = chainConfig; diff --git a/packages/solo/src/init-basedir.js b/packages/solo/src/init-basedir.js index e704e2e7346..384d81c3b84 100644 --- a/packages/solo/src/init-basedir.js +++ b/packages/solo/src/init-basedir.js @@ -55,7 +55,7 @@ export default function initBasedir( `${JSON.stringify(connections)}\n`, ); const dstHtmldir = path.join(basedir, 'html'); - fs.mkdirSync(dstHtmldir); + fs.mkdirSync(dstHtmldir, { recursive: true }); // Save the configuration options. fs.writeFileSync(path.join(basedir, 'options.json'), JSON.stringify(options)); diff --git a/packages/spawner/package.json b/packages/spawner/package.json index e2ef2ad360b..4db396e660b 100644 --- a/packages/spawner/package.json +++ b/packages/spawner/package.json @@ -31,15 +31,15 @@ "homepage": "https://github.com/Agoric/agoric-sdk#readme", "dependencies": { "@agoric/assert": "^0.6.0", - "@endo/eventual-send": "^0.17.2", - "@endo/import-bundle": "^0.3.4", - "@endo/marshal": "^0.8.5" + "@endo/eventual-send": "^0.17.3", + "@endo/import-bundle": "^0.3.5", + "@endo/marshal": "^0.8.6" }, "devDependencies": { "@agoric/internal": "^0.3.2", "@agoric/swingset-vat": "^0.32.2", - "@endo/bundle-source": "^2.5.1", - "@endo/init": "^0.5.56", + "@endo/bundle-source": "^2.5.2", + "@endo/init": "^0.5.57", "ava": "^5.3.0", "c8": "^7.13.0" }, diff --git a/packages/store/jsconfig.json b/packages/store/jsconfig.json index f6d24d3de00..f2b29dfa6ae 100644 --- a/packages/store/jsconfig.json +++ b/packages/store/jsconfig.json @@ -2,6 +2,7 @@ { "extends": "../../tsconfig.json", "include": [ + "exported.js", "src/**/*.js", "test/**/*.js", ], diff --git a/packages/store/package.json b/packages/store/package.json index 9a80e721fd2..b0b80cac004 100644 --- a/packages/store/package.json +++ b/packages/store/package.json @@ -31,16 +31,16 @@ "homepage": "https://github.com/Agoric/agoric-sdk#readme", "dependencies": { "@agoric/assert": "^0.6.0", - "@endo/exo": "^0.2.2", - "@endo/marshal": "^0.8.5", - "@endo/pass-style": "^0.1.3", - "@endo/patterns": "^0.2.2" + "@endo/exo": "^0.2.3", + "@endo/marshal": "^0.8.6", + "@endo/pass-style": "^0.1.4", + "@endo/patterns": "^0.2.3" }, "devDependencies": { "@agoric/swingset-vat": "^0.32.2", "@agoric/time": "^0.3.2", - "@endo/init": "^0.5.56", - "@endo/ses-ava": "^0.2.40", + "@endo/init": "^0.5.57", + "@endo/ses-ava": "^0.2.41", "ava": "^5.3.0" }, "files": [ diff --git a/packages/store/src/legacy/legacyMap.js b/packages/store/src/legacy/legacyMap.js index 78664c641c0..a0b9346acd4 100644 --- a/packages/store/src/legacy/legacyMap.js +++ b/packages/store/src/legacy/legacyMap.js @@ -30,7 +30,7 @@ import '../types.js'; * * @deprecated switch to ScalarMap if possible, Map otherwise * @template K,V - * @param {string} [tag='key'] - tag for debugging + * @param {string} [tag] - tag for debugging * @returns {LegacyMap} */ export const makeLegacyMap = (tag = 'key') => { diff --git a/packages/store/src/legacy/legacyWeakMap.js b/packages/store/src/legacy/legacyWeakMap.js index 5676f9c42d1..1f9e9a9241e 100644 --- a/packages/store/src/legacy/legacyWeakMap.js +++ b/packages/store/src/legacy/legacyWeakMap.js @@ -6,7 +6,7 @@ import '../types.js'; * * @deprecated switch to ScalarWeakMap if possible, WeakMap otherwise * @template K,V - * @param {string} [tag='key'] - tag for debugging + * @param {string} [tag] - tag for debugging * @returns {LegacyWeakMap} */ export const makeLegacyWeakMap = (tag = 'key') => { diff --git a/packages/store/src/stores/scalarMapStore.js b/packages/store/src/stores/scalarMapStore.js index ec4e70f8eb9..d9dd8a35cf3 100644 --- a/packages/store/src/stores/scalarMapStore.js +++ b/packages/store/src/stores/scalarMapStore.js @@ -129,7 +129,7 @@ export const makeMapStoreMethods = ( * * @template {Key} K * @template {Passable} V - * @param {string} [tag='key'] - the column name for the key + * @param {string} [tag] - the column name for the key * @param {StoreOptions} [options] * @returns {MapStore} */ diff --git a/packages/store/src/stores/scalarSetStore.js b/packages/store/src/stores/scalarSetStore.js index b981655a46b..eee55dd36fd 100644 --- a/packages/store/src/stores/scalarSetStore.js +++ b/packages/store/src/stores/scalarSetStore.js @@ -85,7 +85,7 @@ export const makeSetStoreMethods = ( * copyRecords, as keys and look them up based on equality of their contents. * * @template K - * @param {string} [tag='key'] - tag for debugging + * @param {string} [tag] - tag for debugging * @param {StoreOptions} [options] * @returns {SetStore} */ diff --git a/packages/store/src/stores/scalarWeakMapStore.js b/packages/store/src/stores/scalarWeakMapStore.js index 5ca4bc9bbf7..2634d878477 100644 --- a/packages/store/src/stores/scalarWeakMapStore.js +++ b/packages/store/src/stores/scalarWeakMapStore.js @@ -88,7 +88,7 @@ export const makeWeakMapStoreMethods = ( * remotables, since the other primitives may always reappear. * * @template K,V - * @param {string} [tag='key'] - tag for debugging + * @param {string} [tag] - tag for debugging * @param {StoreOptions} [options] * @returns {WeakMapStore} */ diff --git a/packages/store/src/stores/scalarWeakSetStore.js b/packages/store/src/stores/scalarWeakSetStore.js index 926f43edbee..6b99330446c 100644 --- a/packages/store/src/stores/scalarWeakSetStore.js +++ b/packages/store/src/stores/scalarWeakSetStore.js @@ -70,7 +70,7 @@ export const makeWeakSetStoreMethods = ( * remotables, since the other primitives may always appear. * * @template K - * @param {string} [tag='key'] - tag for debugging + * @param {string} [tag] - tag for debugging * @param {StoreOptions} [options] * @returns {WeakSetStore} */ diff --git a/packages/swing-store/package.json b/packages/swing-store/package.json index 7f975af6fe5..633d5245cd4 100644 --- a/packages/swing-store/package.json +++ b/packages/swing-store/package.json @@ -20,14 +20,14 @@ "dependencies": { "@agoric/assert": "^0.6.0", "@agoric/internal": "^0.3.2", - "@endo/base64": "^0.2.31", - "@endo/bundle-source": "^2.5.1", - "@endo/check-bundle": "^0.2.18", - "@endo/nat": "^4.1.27", + "@endo/base64": "^0.2.32", + "@endo/bundle-source": "^2.5.2", + "@endo/check-bundle": "^0.2.19", + "@endo/nat": "^4.1.28", "better-sqlite3": "^8.2.0" }, "devDependencies": { - "@endo/init": "^0.5.56", + "@endo/init": "^0.5.57", "@types/better-sqlite3": "^7.5.0", "ava": "^5.3.0", "c8": "^7.13.0", diff --git a/packages/swingset-liveslots/jsconfig.json b/packages/swingset-liveslots/jsconfig.json index e77ffa706b8..39a984af601 100644 --- a/packages/swingset-liveslots/jsconfig.json +++ b/packages/swingset-liveslots/jsconfig.json @@ -4,7 +4,7 @@ "*.js", "scripts/**/*.js", "src/**/*.js", - //"test/**/*.js", + "test/**/*.js", "tools/**/*.js", ], } diff --git a/packages/swingset-liveslots/package.json b/packages/swingset-liveslots/package.json index 8447ecfe13e..47a3caed094 100644 --- a/packages/swingset-liveslots/package.json +++ b/packages/swingset-liveslots/package.json @@ -21,15 +21,15 @@ "@agoric/internal": "^0.3.2", "@agoric/store": "^0.9.2", "@agoric/vat-data": "^0.5.2", - "@endo/eventual-send": "^0.17.2", - "@endo/exo": "^0.2.2", - "@endo/far": "^0.2.18", - "@endo/init": "^0.5.56", - "@endo/marshal": "^0.8.5", - "@endo/nat": "^4.1.27", - "@endo/pass-style": "^0.1.3", - "@endo/patterns": "^0.2.2", - "@endo/promise-kit": "^0.2.56" + "@endo/eventual-send": "^0.17.3", + "@endo/exo": "^0.2.3", + "@endo/far": "^0.2.19", + "@endo/init": "^0.5.57", + "@endo/marshal": "^0.8.6", + "@endo/nat": "^4.1.28", + "@endo/pass-style": "^0.1.4", + "@endo/patterns": "^0.2.3", + "@endo/promise-kit": "^0.2.57" }, "devDependencies": { "ava": "^5.3.0" diff --git a/packages/swingset-liveslots/src/collectionManager.js b/packages/swingset-liveslots/src/collectionManager.js index 95529e049eb..f2d2ea855a9 100644 --- a/packages/swingset-liveslots/src/collectionManager.js +++ b/packages/swingset-liveslots/src/collectionManager.js @@ -380,11 +380,11 @@ export function makeCollectionManager( currentGenerationNumber += 1; assertAcceptableSyscallCapdataSize([serializedValue]); if (durable) { - serializedValue.slots.forEach((vref, slotIndex) => { + for (const [slotIndex, vref] of serializedValue.slots.entries()) { if (!vrm.isDurable(vref)) { throwNotDurable(value, slotIndex, serializedValue); } - }); + } } if (passStyleOf(key) === 'remotable') { /** @type {string} */ @@ -400,7 +400,9 @@ export function makeCollectionManager( vrm.addReachableVref(vref); } } - serializedValue.slots.forEach(vrm.addReachableVref); + for (const vref of serializedValue.slots) { + vrm.addReachableVref(vref); + } syscall.vatstoreSet(keyToDBKey(key), JSON.stringify(serializedValue)); updateEntryCount(1); }; @@ -419,11 +421,11 @@ export function makeCollectionManager( const after = serializeValue(harden(value)); assertAcceptableSyscallCapdataSize([after]); if (durable) { - after.slots.forEach((vref, i) => { + for (const [i, vref] of after.slots.entries()) { if (!vrm.isDurable(vref)) { throwNotDurable(value, i, after); } - }); + } } const dbKey = keyToDBKey(key); const rawBefore = syscall.vatstoreGet(dbKey); @@ -793,13 +795,15 @@ export function makeCollectionManager( } const schemataCapData = serialize(harden(schemata)); if (isDurable) { - schemataCapData.slots.forEach((vref, slotIndex) => { + for (const [slotIndex, vref] of schemataCapData.slots.entries()) { if (!vrm.isDurable(vref)) { throwNotDurable(vref, slotIndex, schemataCapData); } - }); + } + } + for (const vref of schemataCapData.slots) { + vrm.addReachableVref(vref); } - schemataCapData.slots.forEach(vrm.addReachableVref); schemaCache.set( collectionID, @@ -896,7 +900,7 @@ export function makeCollectionManager( * Produce a big map. * * @template K,V - * @param {string} [label='map'] - diagnostic label for the store + * @param {string} [label] - diagnostic label for the store * @param {StoreOptions} [options] * @returns {MapStore} */ @@ -940,7 +944,7 @@ export function makeCollectionManager( * Produce a weak big map. * * @template K,V - * @param {string} [label='weakMap'] - diagnostic label for the store + * @param {string} [label] - diagnostic label for the store * @param {StoreOptions} [options] * @returns {WeakMapStore} */ @@ -969,7 +973,7 @@ export function makeCollectionManager( * Produce a big set. * * @template K - * @param {string} [label='set'] - diagnostic label for the store + * @param {string} [label] - diagnostic label for the store * @param {StoreOptions} [options] * @returns {SetStore} */ @@ -996,7 +1000,7 @@ export function makeCollectionManager( * Produce a weak big set. * * @template K - * @param {string} [label='weakSet'] - diagnostic label for the store + * @param {string} [label] - diagnostic label for the store * @param {StoreOptions} [options] * @returns {WeakSetStore} */ @@ -1073,7 +1077,7 @@ export function makeCollectionManager( * remotables. * * @template K,V - * @param {string} [label='map'] - diagnostic label for the store + * @param {string} [label] - diagnostic label for the store * @param {StoreOptions} [options] * @returns {MapStore} */ @@ -1085,7 +1089,7 @@ export function makeCollectionManager( * primitives, or remotables. * * @template K,V - * @param {string} [label='weakMap'] - diagnostic label for the store + * @param {string} [label] - diagnostic label for the store * @param {StoreOptions} [options] * @returns {WeakMapStore} */ @@ -1097,7 +1101,7 @@ export function makeCollectionManager( * remotables. * * @template K - * @param {string} [label='set'] - diagnostic label for the store + * @param {string} [label] - diagnostic label for the store * @param {StoreOptions} [options] * @returns {SetStore} */ @@ -1109,7 +1113,7 @@ export function makeCollectionManager( * primitives, or remotables. * * @template K - * @param {string} [label='weakSet'] - diagnostic label for the store + * @param {string} [label] - diagnostic label for the store * @param {StoreOptions} [options] * @returns {WeakSetStore} */ diff --git a/packages/swingset-liveslots/src/liveslots.js b/packages/swingset-liveslots/src/liveslots.js index 883b11c5ae6..9caea6515b7 100644 --- a/packages/swingset-liveslots/src/liveslots.js +++ b/packages/swingset-liveslots/src/liveslots.js @@ -497,54 +497,6 @@ function build( return Remotable(iface); } - /** - * Counters to track the next number for various categories of allocation. - * `exportID` starts at 1 because 'o+0' is always automatically - * pre-assigned to the root object. - * `promiseID` starts at 5 as a very minor aid to debugging: when puzzling - * over trace logs and the like, it helps for the numbers in various species - * of IDs that are jumbled together to be a little out of sync and thus a - * little less similar to each other. - */ - const initialIDCounters = { exportID: 1, collectionID: 1, promiseID: 5 }; - /** @type {Record} */ - let idCounters; - let idCountersAreDirty = false; - - function initializeIDCounters() { - if (!idCounters) { - // the saved value might be missing, or from an older liveslots - // (with fewer counters), so merge it with our initial values - const saved = JSON.parse(syscall.vatstoreGet('idCounters') || '{}'); - idCounters = { ...initialIDCounters, ...saved }; - idCountersAreDirty = true; - } - } - - function allocateNextID(name) { - if (!idCounters) { - // Normally `initializeIDCounters` would be called from startVat, but some - // tests bypass that so this is a backstop. Note that the invocation from - // startVat is there to make vatStore access patterns a bit more - // consistent from one vat to another, principally as a confusion - // reduction measure in service of debugging; it is not a correctness - // issue. - initializeIDCounters(); - } - const result = idCounters[name]; - result !== undefined || Fail`unknown idCounters[${name}]`; - idCounters[name] += 1; - idCountersAreDirty = true; - return result; - } - - function flushIDCounters() { - if (idCountersAreDirty) { - syscall.vatstoreSet('idCounters', JSON.stringify(idCounters)); - idCountersAreDirty = false; - } - } - // TODO: fix awkward non-orthogonality: allocateExportID() returns a number, // allocatePromiseID() returns a slot, registerPromise() uses the slot from // allocatePromiseID(), exportPassByPresence() generates a slot itself using @@ -553,15 +505,18 @@ function build( // use a slot from the corresponding allocateX function allocateExportID() { - return allocateNextID('exportID'); + // eslint-disable-next-line no-use-before-define + return vrm.allocateNextID('exportID'); } function allocateCollectionID() { - return allocateNextID('collectionID'); + // eslint-disable-next-line no-use-before-define + return vrm.allocateNextID('collectionID'); } function allocatePromiseID() { - const promiseID = allocateNextID('promiseID'); + // eslint-disable-next-line no-use-before-define + const promiseID = vrm.allocateNextID('promiseID'); return makeVatSlot('promise', true, promiseID); } @@ -756,9 +711,9 @@ function build( Fail`registerValue(${baseRef} should not receive individual facets`; slotToVal.set(baseRef, new WeakRef(val)); if (valIsCohort) { - vrm.getFacetNames(id).forEach((name, index) => { + for (const [index, name] of vrm.getFacetNames(id).entries()) { valToSlot.set(val[name], `${baseRef}:${index}`); - }); + } } else { valToSlot.set(val, baseRef); } @@ -980,12 +935,20 @@ function build( return null; } syscall.resolve(resolutions); - resolutions.forEach(([_xvpid, _isReject, resolutionCD]) => { - resolutionCD.slots.forEach(vref => maybeNewVPIDs.add(vref)); - }); - resolutions.forEach(([xvpid]) => maybeNewVPIDs.delete(xvpid)); + for (const resolution of resolutions) { + const [_xvpid, _isReject, resolutionCD] = resolution; + for (const vref of resolutionCD.slots) { + maybeNewVPIDs.add(vref); + } + } + for (const resolution of resolutions) { + const [xvpid] = resolution; + maybeNewVPIDs.delete(xvpid); + } + } + for (const newVPID of Array.from(maybeNewVPIDs).sort()) { + maybeExportPromise(newVPID); } - Array.from(maybeNewVPIDs).sort().forEach(maybeExportPromise); // ideally we'd wait until .then is called on p before subscribing, but // the current Promise API doesn't give us a way to discover this, so we @@ -1187,13 +1150,21 @@ function build( const maybeNewVPIDs = new Set(); // if we mention a vpid, we might need to track it - resolutions.forEach(([_xvpid, _isReject, resolutionCD]) => { - resolutionCD.slots.forEach(vref => maybeNewVPIDs.add(vref)); - }); + for (const resolution of resolutions) { + const [_xvpid, _isReject, resolutionCD] = resolution; + for (const vref of resolutionCD.slots) { + maybeNewVPIDs.add(vref); + } + } // but not if we just resolved it (including the primary) - resolutions.forEach(([xvpid]) => maybeNewVPIDs.delete(xvpid)); + for (const resolution of resolutions) { + const [xvpid] = resolution; + maybeNewVPIDs.delete(xvpid); + } // track everything that's left - Array.from(maybeNewVPIDs).sort().forEach(maybeExportPromise); + for (const newVPID of Array.from(maybeNewVPIDs).sort()) { + maybeExportPromise(newVPID); + } // only the primary can possibly be newly resolved unregisterUnreferencedVPID(vpid); @@ -1251,11 +1222,11 @@ function build( // 'imports' is an exclusively-owned Set that holds all new // promise vpids, both resolved and unresolved const imports = finishCollectingPromiseImports(); - retiredVPIDs.forEach(vpid => { + for (const vpid of retiredVPIDs) { unregisterUnreferencedVPID(vpid); // unregisters if not in vdata importedVPIDs.delete(vpid); imports.delete(vpid); // resolved, so don't subscribe() - }); + } for (const vpid of Array.from(imports).sort()) { syscall.subscribe(vpid); } @@ -1295,14 +1266,18 @@ function build( function retireExports(vrefs) { assert(Array.isArray(vrefs)); - vrefs.forEach(retireOneExport); + for (const vref of vrefs) { + retireOneExport(vref); + } } function retireImports(vrefs) { assert(Array.isArray(vrefs)); vrefs.map(vref => insistVatType('object', vref)); vrefs.map(vref => assert(!parseVatSlot(vref).allocatedByVat)); - vrefs.forEach(vrm.ceaseRecognition); + for (const vref of vrefs) { + vrm.ceaseRecognition(vref); + } } // TODO: when we add notifyForward, guard against cycles @@ -1447,7 +1422,7 @@ function build( } harden(vpow); - initializeIDCounters(); + vrm.initializeIDCounters(); vom.initializeKindHandleKind(); collectionManager.initializeStoreKindInfo(); @@ -1570,7 +1545,7 @@ function build( * dispatch has completed and user code has relinquished agency. */ function afterDispatchActions() { - flushIDCounters(); + vrm.flushIDCounters(); collectionManager.flushSchemaCache(); vom.flushStateCache(); } diff --git a/packages/swingset-liveslots/src/virtualReferences.js b/packages/swingset-liveslots/src/virtualReferences.js index 0f77334615d..71bdc328db4 100644 --- a/packages/swingset-liveslots/src/virtualReferences.js +++ b/packages/swingset-liveslots/src/virtualReferences.js @@ -682,6 +682,54 @@ export function makeVirtualReferenceManager( return size; } + /** + * Counters to track the next number for various categories of allocation. + * `exportID` starts at 1 because 'o+0' is always automatically + * pre-assigned to the root object. + * `promiseID` starts at 5 as a very minor aid to debugging: when puzzling + * over trace logs and the like, it helps for the numbers in various species + * of IDs that are jumbled together to be a little out of sync and thus a + * little less similar to each other. + */ + const initialIDCounters = { exportID: 1, collectionID: 1, promiseID: 5 }; + /** @type {Record} */ + let idCounters; + let idCountersAreDirty = false; + + function initializeIDCounters() { + if (!idCounters) { + // the saved value might be missing, or from an older liveslots + // (with fewer counters), so merge it with our initial values + const saved = JSON.parse(syscall.vatstoreGet('idCounters') || '{}'); + idCounters = { ...initialIDCounters, ...saved }; + idCountersAreDirty = true; + } + } + + function allocateNextID(name) { + if (!idCounters) { + // Normally `initializeIDCounters` would be called from startVat, but some + // tests bypass that so this is a backstop. Note that the invocation from + // startVat is there to make vatStore access patterns a bit more + // consistent from one vat to another, principally as a confusion + // reduction measure in service of debugging; it is not a correctness + // issue. + initializeIDCounters(); + } + const result = idCounters[name]; + result !== undefined || Fail`unknown idCounters[${name}]`; + idCounters[name] += 1; + idCountersAreDirty = true; + return result; + } + + function flushIDCounters() { + if (idCountersAreDirty) { + syscall.vatstoreSet('idCounters', JSON.stringify(idCounters)); + idCountersAreDirty = false; + } + } + const testHooks = { getReachableRefCount, countCollectionsForWeakKey, @@ -726,6 +774,9 @@ export function makeVirtualReferenceManager( ceaseRecognition, setDeleteCollectionEntry, getRetentionStats, + initializeIDCounters, + allocateNextID, + flushIDCounters, testHooks, }); } diff --git a/packages/swingset-liveslots/test/liveslots-helpers.js b/packages/swingset-liveslots/test/liveslots-helpers.js index 42b53deb5f6..1f101af07e6 100644 --- a/packages/swingset-liveslots/test/liveslots-helpers.js +++ b/packages/swingset-liveslots/test/liveslots-helpers.js @@ -16,8 +16,8 @@ import { kser } from './kmarshal.js'; /** * @param {object} [options] - * @param {boolean} [options.skipLogging = false] - * @param {Map} [options.kvStore = new Map()] + * @param {boolean} [options.skipLogging] + * @param {Map} [options.kvStore] */ export function buildSyscall(options = {}) { const { skipLogging = false, kvStore: fakestore = new Map() } = options; @@ -168,9 +168,9 @@ function makeRPMaker(nextNumber = 1) { * @param {string} vatName * @param {object} [options] * @param {boolean} [options.forceGC] - * @param {Map} [options.kvStore = new Map()] + * @param {Map} [options.kvStore] * @param {number} [options.nextPromiseImportNumber] - * @param {boolean} [options.skipLogging = false] + * @param {boolean} [options.skipLogging] */ export async function setupTestLiveslots( t, diff --git a/packages/swingset-liveslots/test/mock-gc.js b/packages/swingset-liveslots/test/mock-gc.js index 20b945e2d69..09a5171b0d0 100644 --- a/packages/swingset-liveslots/test/mock-gc.js +++ b/packages/swingset-liveslots/test/mock-gc.js @@ -1,3 +1,4 @@ +// @ts-nocheck import { waitUntilQuiescent } from './waitUntilQuiescent.js'; import { makeDummyMeterControl } from './dummyMeterControl.js'; diff --git a/packages/swingset-liveslots/test/storeGC/test-lifecycle.js b/packages/swingset-liveslots/test/storeGC/test-lifecycle.js index 58a78e02931..3433af7e7bc 100644 --- a/packages/swingset-liveslots/test/storeGC/test-lifecycle.js +++ b/packages/swingset-liveslots/test/storeGC/test-lifecycle.js @@ -1,3 +1,4 @@ +// @ts-nocheck import test from 'ava'; import '@endo/init/debug.js'; diff --git a/packages/swingset-liveslots/test/test-collections.js b/packages/swingset-liveslots/test/test-collections.js index ba536179e0d..19c656177fe 100644 --- a/packages/swingset-liveslots/test/test-collections.js +++ b/packages/swingset-liveslots/test/test-collections.js @@ -1,3 +1,4 @@ +// @ts-nocheck import test from 'ava'; import '@endo/init/debug.js'; @@ -489,7 +490,9 @@ test('map fail on concurrent modification', t => { const primeMap = makeScalarBigMapStore('fmap', { keyShape: M.number(), }); - primes.forEach((v, i) => primeMap.init(v, `${v} is prime #${i + 1}`)); + for (const [i, v] of primes.entries()) { + primeMap.init(v, `${v} is prime #${i + 1}`); + } let iter = primeMap.keys()[Symbol.iterator](); t.deepEqual(iter.next(), { done: false, value: 2 }); @@ -517,7 +520,9 @@ test('set fail on concurrent modification', t => { const primeSet = makeScalarBigSetStore('fset', { keyShape: M.number(), }); - primes.forEach(v => primeSet.add(v)); + for (const v of primes) { + primeSet.add(v); + } let iter = primeSet.keys()[Symbol.iterator](); t.deepEqual(iter.next(), { done: false, value: 2 }); @@ -545,7 +550,9 @@ test('map ok with concurrent deletion', t => { const primeMap = makeScalarBigMapStore('fmap', { keyShape: M.number(), }); - primes.forEach((v, i) => primeMap.init(v, `${v} is prime #${i + 1}`)); + for (const [i, v] of primes.entries()) { + primeMap.init(v, `${v} is prime #${i + 1}`); + } const iter = primeMap.keys()[Symbol.iterator](); t.deepEqual(iter.next(), { done: false, value: 2 }); primeMap.delete(3); @@ -560,7 +567,9 @@ test('set ok with concurrent deletion', t => { const primeSet = makeScalarBigSetStore('fset', { keyShape: M.number(), }); - primes.forEach(v => primeSet.add(v)); + for (const v of primes) { + primeSet.add(v); + } const iter = primeSet.keys()[Symbol.iterator](); t.deepEqual(iter.next(), { done: false, value: 2 }); @@ -875,7 +884,9 @@ test('complex map queries', t => { const primeStore = makeScalarBigMapStore('prime map', { keyShape: M.number(), }); - primes.forEach((v, i) => primeStore.init(v, `${v} is prime #${i + 1}`)); + for (const [i, v] of primes.entries()) { + primeStore.init(v, `${v} is prime #${i + 1}`); + } t.deepEqual(Array.from(primeStore.values()), [ '2 is prime #1', @@ -1050,7 +1061,9 @@ test('complex set queries', t => { const primeStore = makeScalarBigSetStore('prime set', { keyShape: M.number(), }); - primes.forEach(v => primeStore.add(v)); + for (const v of primes) { + primeStore.add(v); + } t.deepEqual( Array.from(primeStore.values()), diff --git a/packages/swingset-liveslots/test/test-gc-sensitivity.js b/packages/swingset-liveslots/test/test-gc-sensitivity.js index 332602d73b8..2564fb56b6b 100644 --- a/packages/swingset-liveslots/test/test-gc-sensitivity.js +++ b/packages/swingset-liveslots/test/test-gc-sensitivity.js @@ -1,3 +1,4 @@ +// @ts-nocheck import test from 'ava'; import '@endo/init/debug.js'; import { Far } from '@endo/marshal'; diff --git a/packages/swingset-liveslots/test/test-liveslots-mock-gc.js b/packages/swingset-liveslots/test/test-liveslots-mock-gc.js index 20e8a5274c1..d5698d0800b 100644 --- a/packages/swingset-liveslots/test/test-liveslots-mock-gc.js +++ b/packages/swingset-liveslots/test/test-liveslots-mock-gc.js @@ -1,3 +1,4 @@ +// @ts-nocheck import test from 'ava'; import '@endo/init/debug.js'; diff --git a/packages/swingset-liveslots/test/test-liveslots-real-gc.js b/packages/swingset-liveslots/test/test-liveslots-real-gc.js index 8dc0b161d34..21182c58bc5 100644 --- a/packages/swingset-liveslots/test/test-liveslots-real-gc.js +++ b/packages/swingset-liveslots/test/test-liveslots-real-gc.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* global WeakRef */ import test from 'ava'; import '@endo/init/debug.js'; diff --git a/packages/swingset-liveslots/test/test-liveslots.js b/packages/swingset-liveslots/test/test-liveslots.js index f73a0829779..d2350a5c516 100644 --- a/packages/swingset-liveslots/test/test-liveslots.js +++ b/packages/swingset-liveslots/test/test-liveslots.js @@ -1,3 +1,4 @@ +// @ts-nocheck import test from 'ava'; import '@endo/init/debug.js'; diff --git a/packages/swingset-liveslots/test/test-vpid-liveslots.js b/packages/swingset-liveslots/test/test-vpid-liveslots.js index 20a5750cf40..6e7f0872c3a 100644 --- a/packages/swingset-liveslots/test/test-vpid-liveslots.js +++ b/packages/swingset-liveslots/test/test-vpid-liveslots.js @@ -1,3 +1,4 @@ +// @ts-nocheck import test from 'ava'; import '@endo/init/debug.js'; diff --git a/packages/swingset-liveslots/test/virtual-objects/test-cease-recognition.js b/packages/swingset-liveslots/test/virtual-objects/test-cease-recognition.js index dffa7973a3f..2424ea23d30 100644 --- a/packages/swingset-liveslots/test/virtual-objects/test-cease-recognition.js +++ b/packages/swingset-liveslots/test/virtual-objects/test-cease-recognition.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* global FinalizationRegistry WeakRef */ import test from 'ava'; import '@endo/init/debug.js'; diff --git a/packages/swingset-liveslots/test/virtual-objects/test-kind-changes.js b/packages/swingset-liveslots/test/virtual-objects/test-kind-changes.js index dbf56bf0a36..c5b9e2c2f95 100644 --- a/packages/swingset-liveslots/test/virtual-objects/test-kind-changes.js +++ b/packages/swingset-liveslots/test/virtual-objects/test-kind-changes.js @@ -1,3 +1,4 @@ +// @ts-nocheck import test from 'ava'; import '@endo/init/debug.js'; import { Far } from '@endo/marshal'; diff --git a/packages/swingset-liveslots/test/virtual-objects/test-reachable-vrefs.js b/packages/swingset-liveslots/test/virtual-objects/test-reachable-vrefs.js index d772f5fdfd7..4c84d94d968 100644 --- a/packages/swingset-liveslots/test/virtual-objects/test-reachable-vrefs.js +++ b/packages/swingset-liveslots/test/virtual-objects/test-reachable-vrefs.js @@ -1,3 +1,4 @@ +// @ts-nocheck import test from 'ava'; import '@endo/init/debug.js'; diff --git a/packages/swingset-liveslots/test/virtual-objects/test-retain-remotable.js b/packages/swingset-liveslots/test/virtual-objects/test-retain-remotable.js index 84035f74d11..b3874491e20 100644 --- a/packages/swingset-liveslots/test/virtual-objects/test-retain-remotable.js +++ b/packages/swingset-liveslots/test/virtual-objects/test-retain-remotable.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* global WeakRef */ import test from 'ava'; import '@endo/init/debug.js'; diff --git a/packages/swingset-liveslots/test/virtual-objects/test-state-shape.js b/packages/swingset-liveslots/test/virtual-objects/test-state-shape.js index e8af616a3be..274aa8932b6 100644 --- a/packages/swingset-liveslots/test/virtual-objects/test-state-shape.js +++ b/packages/swingset-liveslots/test/virtual-objects/test-state-shape.js @@ -1,3 +1,4 @@ +// @ts-nocheck import test from 'ava'; import '@endo/init/debug.js'; diff --git a/packages/swingset-liveslots/test/virtual-objects/test-virtualObjectGC.js b/packages/swingset-liveslots/test/virtual-objects/test-virtualObjectGC.js index 1bcfc92acd0..5f8adb92de6 100644 --- a/packages/swingset-liveslots/test/virtual-objects/test-virtualObjectGC.js +++ b/packages/swingset-liveslots/test/virtual-objects/test-virtualObjectGC.js @@ -1,3 +1,4 @@ +// @ts-nocheck import test from 'ava'; import '@endo/init/debug.js'; diff --git a/packages/swingset-liveslots/test/virtual-objects/test-virtualObjectManager.js b/packages/swingset-liveslots/test/virtual-objects/test-virtualObjectManager.js index 4ac890b64cc..02e2491a0bc 100644 --- a/packages/swingset-liveslots/test/virtual-objects/test-virtualObjectManager.js +++ b/packages/swingset-liveslots/test/virtual-objects/test-virtualObjectManager.js @@ -1,3 +1,4 @@ +// @ts-nocheck import test from 'ava'; import '@endo/init/debug.js'; @@ -128,6 +129,7 @@ test('multifaceted virtual objects', t => { flushStateCache(); t.deepEqual(log.splice(0), [ `get kindIDID => undefined`, + `get idCounters => undefined`, `set kindIDID 1`, `set vom.vkind.2.descriptor {"kindID":"2","tag":"multithing"}`, `set vom.${kid}/1 ${multiThingVal('foo', 1)}`, @@ -203,6 +205,7 @@ test('virtual object operations', t => { const thing4 = makeThing('thing-4', 300); // [t4-0* t3-0* t2-0* t1-0*] // t4-0: 'thing-4' 300 0 t.is(log.shift(), `get kindIDID => undefined`); + t.is(log.shift(), `get idCounters => undefined`); t.is(log.shift(), `set kindIDID 1`); t.is(log.shift(), `set vom.vkind.2.descriptor {"kindID":"2","tag":"thing"}`); t.is(log.shift(), `set vom.vkind.3.descriptor {"kindID":"3","tag":"zot"}`); @@ -467,6 +470,7 @@ test('symbol named methods', t => { const thing2 = makeThing('thing-2', 100); // [t1-0* t2-0*] // t2-0: 'thing-2' 100 0 t.is(log.shift(), `get kindIDID => undefined`); + t.is(log.shift(), `get idCounters => undefined`); t.is(log.shift(), `set kindIDID 1`); t.is( log.shift(), @@ -647,6 +651,7 @@ test('virtual object gc', t => { }); t.is(log.shift(), `get kindIDID => undefined`); + t.is(log.shift(), `get idCounters => undefined`); t.is(log.shift(), `set kindIDID 1`); const skit = [ 'storeKindIDTable', diff --git a/packages/swingset-liveslots/test/virtual-objects/test-vo-real-gc.js b/packages/swingset-liveslots/test/virtual-objects/test-vo-real-gc.js index f4cd4fd9026..48254072660 100644 --- a/packages/swingset-liveslots/test/virtual-objects/test-vo-real-gc.js +++ b/packages/swingset-liveslots/test/virtual-objects/test-vo-real-gc.js @@ -1,3 +1,4 @@ +// @ts-nocheck /* global WeakRef */ import test from 'ava'; import '@endo/init/debug.js'; diff --git a/packages/swingset-liveslots/tools/fakeVirtualSupport.js b/packages/swingset-liveslots/tools/fakeVirtualSupport.js index 6280ec6c6f5..e2b5d95da17 100644 --- a/packages/swingset-liveslots/tools/fakeVirtualSupport.js +++ b/packages/swingset-liveslots/tools/fakeVirtualSupport.js @@ -1,4 +1,4 @@ -/* global WeakRef */ +/* global globalThis */ /* eslint-disable max-classes-per-file */ import { makeMarshal } from '@endo/marshal'; import { assert } from '@agoric/assert'; @@ -9,6 +9,14 @@ import { makeWatchedPromiseManager } from '../src/watchedPromises.js'; import { makeFakeVirtualObjectManager } from './fakeVirtualObjectManager.js'; import { makeFakeCollectionManager } from './fakeCollectionManager.js'; +const { Fail } = assert; + +const { + WeakRef: RealWeakRef, + WeakMap: RealWeakMap, + WeakSet: RealWeakSet, +} = globalThis; + class FakeFinalizationRegistry { // eslint-disable-next-line no-useless-constructor, no-empty-function constructor() {} @@ -30,8 +38,6 @@ class FakeWeakRef { } } -const RealWeakRef = WeakRef; - export function makeFakeLiveSlotsStuff(options = {}) { let vrm; function setVrm(vrmToUse) { @@ -45,6 +51,8 @@ export function makeFakeLiveSlotsStuff(options = {}) { log, FinalizationRegistry = FakeFinalizationRegistry, WeakRef = FakeWeakRef, // VRM uses this + WeakMap = RealWeakMap, + WeakSet = RealWeakSet, addToPossiblyDeadSet = () => {}, addToPossiblyRetiredSet = () => {}, } = options; @@ -151,18 +159,12 @@ export function makeFakeLiveSlotsStuff(options = {}) { }, }; - let nextExportID = 1; function allocateExportID() { - const exportID = nextExportID; - nextExportID += 1; - return exportID; + return vrm.allocateNextID('exportID'); } - let nextCollectionID = 1; function allocateCollectionID() { - const collectionID = nextCollectionID; - nextCollectionID += 1; - return collectionID; + return vrm.allocateNextID('collectionID'); } // note: The real liveslots slotToVal() maps slots (vrefs) to a WeakRef, @@ -212,17 +214,23 @@ export function makeFakeLiveSlotsStuff(options = {}) { } return val; } + let result; if (virtual || durable) { if (vrm) { val = vrm.reanimate(slot); if (facet !== undefined) { - return vrm.getFacet(id, val, facet); + result = vrm.getFacet(id, val, facet); } } else { assert.fail('fake liveSlots stuff configured without vrm'); } } - return val; + // eslint-disable-next-line no-use-before-define + registerEntry(baseRef, val, facet !== undefined); + if (!result) { + result = val; + } + return result; } const marshal = makeMarshal(convertValToSlot, convertSlotToVal, { @@ -230,12 +238,15 @@ export function makeFakeLiveSlotsStuff(options = {}) { }); function registerEntry(baseRef, val, valIsCohort) { + const { facet } = parseVatSlot(baseRef); + !facet || + Fail`registerEntry(${baseRef} should not receive individual facets`; setValForSlot(baseRef, val); if (valIsCohort) { const { id } = parseVatSlot(baseRef); - vrm.getFacetNames(id).forEach((name, index) => { + for (const [index, name] of vrm.getFacetNames(id).entries()) { valToSlot.set(val[name], `${baseRef}:${index}`); - }); + } } else { valToSlot.set(val, baseRef); } @@ -270,6 +281,8 @@ export function makeFakeLiveSlotsStuff(options = {}) { deleteEntry, FinalizationRegistry, WeakRef, + WeakMap, + WeakSet, addToPossiblyDeadSet, addToPossiblyRetiredSet, dumpStore, @@ -315,8 +328,12 @@ export function makeFakeWatchedPromiseManager( * Configure virtual stuff with relaxed durability rules and fake liveslots * * @param {object} [options] - * @param {number} [options.cacheSize=3] - * @param {boolean} [options.relaxDurabilityRules=true] + * @param {number} [options.cacheSize] + * @param {boolean} [options.relaxDurabilityRules] + * @param {Map} [options.fakeStore] + * @param {WeakMapConstructor} [options.WeakMap] + * @param {WeakSetConstructor} [options.WeakSet] + * @param {boolean} [options.weak] */ export function makeFakeVirtualStuff(options = {}) { const actualOptions = { @@ -326,9 +343,9 @@ export function makeFakeVirtualStuff(options = {}) { const { relaxDurabilityRules } = actualOptions; const fakeStuff = makeFakeLiveSlotsStuff(actualOptions); const vrm = makeFakeVirtualReferenceManager(fakeStuff, relaxDurabilityRules); + fakeStuff.setVrm(vrm); const vom = makeFakeVirtualObjectManager(vrm, fakeStuff); vom.initializeKindHandleKind(); - fakeStuff.setVrm(vrm); const cm = makeFakeCollectionManager(vrm, fakeStuff, actualOptions); const wpm = makeFakeWatchedPromiseManager(vrm, vom, cm, fakeStuff); return { fakeStuff, vrm, vom, cm, wpm }; @@ -338,9 +355,9 @@ export function makeStandaloneFakeVirtualObjectManager(options = {}) { const fakeStuff = makeFakeLiveSlotsStuff(options); const { relaxDurabilityRules = true } = options; const vrm = makeFakeVirtualReferenceManager(fakeStuff, relaxDurabilityRules); + fakeStuff.setVrm(vrm); const vom = makeFakeVirtualObjectManager(vrm, fakeStuff); vom.initializeKindHandleKind(); - fakeStuff.setVrm(vrm); return vom; } @@ -348,6 +365,7 @@ export function makeStandaloneFakeCollectionManager(options = {}) { const fakeStuff = makeFakeLiveSlotsStuff(options); const { relaxDurabilityRules = true } = options; const vrm = makeFakeVirtualReferenceManager(fakeStuff, relaxDurabilityRules); + fakeStuff.setVrm(vrm); return makeFakeCollectionManager(vrm, fakeStuff, options); } diff --git a/packages/swingset-runner/package.json b/packages/swingset-runner/package.json index 9af6d6d2d50..b004bb73918 100644 --- a/packages/swingset-runner/package.json +++ b/packages/swingset-runner/package.json @@ -28,11 +28,11 @@ "@agoric/telemetry": "^0.6.2", "@agoric/vat-data": "^0.5.2", "@agoric/zoe": "^0.26.2", - "@endo/bundle-source": "^2.5.1", - "@endo/eventual-send": "^0.17.2", - "@endo/init": "^0.5.56", - "@endo/marshal": "^0.8.5", - "@endo/nat": "^4.1.27", + "@endo/bundle-source": "^2.5.2", + "@endo/eventual-send": "^0.17.3", + "@endo/init": "^0.5.57", + "@endo/marshal": "^0.8.6", + "@endo/nat": "^4.1.28", "expose-gc": "^1.0.0", "n-readlines": "^1.0.1", "yargs": "^16.1.0" diff --git a/packages/swingset-xsnap-supervisor/jsconfig.json b/packages/swingset-xsnap-supervisor/jsconfig.json index b7cc9a19a3b..392fe1ed9f5 100644 --- a/packages/swingset-xsnap-supervisor/jsconfig.json +++ b/packages/swingset-xsnap-supervisor/jsconfig.json @@ -4,6 +4,7 @@ "include": [ "*.js", "lib/**/*.js", + "scripts/**/*.js", "src/**/*.d.ts", "src/**/*.js", "test/**/*.js", diff --git a/packages/swingset-xsnap-supervisor/package.json b/packages/swingset-xsnap-supervisor/package.json index ea481de4e02..3b685a24774 100644 --- a/packages/swingset-xsnap-supervisor/package.json +++ b/packages/swingset-xsnap-supervisor/package.json @@ -25,10 +25,10 @@ "devDependencies": { "@agoric/assert": "^0.6.0", "@agoric/swingset-liveslots": "^0.10.2", - "@endo/bundle-source": "^2.5.1", - "@endo/import-bundle": "^0.3.4", - "@endo/init": "^0.5.56", - "@endo/marshal": "^0.8.5", + "@endo/bundle-source": "^2.5.2", + "@endo/import-bundle": "^0.3.5", + "@endo/init": "^0.5.57", + "@endo/marshal": "^0.8.6", "ava": "^5.3.0", "c8": "^7.13.0" }, diff --git a/packages/swingset-xsnap-supervisor/scripts/build-bundle.js b/packages/swingset-xsnap-supervisor/scripts/build-bundle.js index dc3358a6a67..afb1d9d4ce2 100644 --- a/packages/swingset-xsnap-supervisor/scripts/build-bundle.js +++ b/packages/swingset-xsnap-supervisor/scripts/build-bundle.js @@ -8,7 +8,7 @@ import process from 'process'; import bundleSource from '@endo/bundle-source'; import { bundlePaths, hashPaths, entryPaths } from '../src/paths.js'; -/** @param {Uint8Array} bytes */ +/** @param {Uint8Array | string} bytes */ const computeSha256 = bytes => { const hash = crypto.createHash('sha256'); hash.update(bytes); diff --git a/packages/telemetry/package.json b/packages/telemetry/package.json index 7f391cc6cf9..49c771f5fb5 100644 --- a/packages/telemetry/package.json +++ b/packages/telemetry/package.json @@ -25,9 +25,9 @@ "@agoric/assert": "^0.6.0", "@agoric/internal": "^0.3.2", "@agoric/store": "^0.9.2", - "@endo/init": "^0.5.56", - "@endo/marshal": "^0.8.5", - "@endo/stream": "^0.3.25", + "@endo/init": "^0.5.57", + "@endo/marshal": "^0.8.6", + "@endo/stream": "^0.3.26", "@opentelemetry/api": "~1.3.0", "@opentelemetry/exporter-prometheus": "~0.35.0", "@opentelemetry/exporter-trace-otlp-http": "~0.35.0", @@ -41,8 +41,8 @@ "tmp": "^0.2.1" }, "devDependencies": { - "@endo/lockdown": "^0.1.28", - "@endo/ses-ava": "^0.2.40", + "@endo/lockdown": "^0.1.29", + "@endo/ses-ava": "^0.2.41", "ava": "^5.3.0", "c8": "^7.13.0", "tmp": "^0.2.1" diff --git a/packages/time/jsconfig.json b/packages/time/jsconfig.json index b2d019670f2..5b481f5932e 100644 --- a/packages/time/jsconfig.json +++ b/packages/time/jsconfig.json @@ -2,6 +2,7 @@ "extends": "../../tsconfig.json", "include": [ "build", + "index.js", "scripts", "src", "test", diff --git a/packages/time/package.json b/packages/time/package.json index 80dab5877c3..f6a39cc09bd 100644 --- a/packages/time/package.json +++ b/packages/time/package.json @@ -32,11 +32,11 @@ "dependencies": { "@agoric/assert": "^0.6.0", "@agoric/store": "^0.9.2", - "@endo/nat": "^4.1.27" + "@endo/nat": "^4.1.28" }, "devDependencies": { - "@endo/far": "^0.2.18", - "@endo/init": "^0.5.56", + "@endo/far": "^0.2.19", + "@endo/init": "^0.5.57", "ava": "^5.3.0" }, "files": [ diff --git a/packages/vats/decentral-itest-vaults-config.json b/packages/vats/decentral-itest-vaults-config.json index dd2b21a47df..fc8158160bb 100644 --- a/packages/vats/decentral-itest-vaults-config.json +++ b/packages/vats/decentral-itest-vaults-config.json @@ -22,7 +22,7 @@ "entrypoint": "defaultProposalBuilder", "args": [ { - "stabilityFeeValue": 1000, + "interestRateValue": 1000, "interchainAssetOptions": { "denom": "ibc/toyatom", "decimalPlaces": 6, diff --git a/packages/vats/package.json b/packages/vats/package.json index 20ffeca88ab..b38054b2d2b 100644 --- a/packages/vats/package.json +++ b/packages/vats/package.json @@ -43,12 +43,12 @@ "@agoric/vat-data": "^0.5.2", "@agoric/zoe": "^0.26.2", "@agoric/zone": "^0.2.2", - "@endo/far": "^0.2.18", - "@endo/import-bundle": "^0.3.4", - "@endo/init": "^0.5.56", - "@endo/marshal": "^0.8.5", - "@endo/nat": "^4.1.27", - "@endo/promise-kit": "^0.2.56", + "@endo/far": "^0.2.19", + "@endo/import-bundle": "^0.3.5", + "@endo/init": "^0.5.57", + "@endo/marshal": "^0.8.6", + "@endo/nat": "^4.1.28", + "@endo/promise-kit": "^0.2.57", "import-meta-resolve": "^2.2.1", "jessie.js": "^0.3.2" }, @@ -58,10 +58,10 @@ "@agoric/smart-wallet": "^0.5.3", "@agoric/swing-store": "^0.9.1", "@agoric/swingset-liveslots": "^0.10.2", - "@endo/bundle-source": "^2.5.1", - "@endo/captp": "^3.1.1", - "@endo/eventual-send": "^0.17.2", - "@endo/stream": "^0.3.25", + "@endo/bundle-source": "^2.5.2", + "@endo/captp": "^3.1.2", + "@endo/eventual-send": "^0.17.3", + "@endo/stream": "^0.3.26", "ava": "^5.3.0", "c8": "^7.13.0" }, diff --git a/packages/vats/src/bridge.js b/packages/vats/src/bridge.js index cffe285a408..ae21893141e 100644 --- a/packages/vats/src/bridge.js +++ b/packages/vats/src/bridge.js @@ -34,16 +34,16 @@ const BridgeManagerIKit = harden({ }), }); -/** - * @param {import('@agoric/zone').Zone} zone - */ +/** @param {import('@agoric/zone').Zone} zone */ const prepareScopedManager = zone => { const makeScopedManager = zone.exoClass( 'BridgeScopedManager', BridgeScopedManagerI, /** * @param {string} bridgeId - * @param {{ outbound: (bridgeId: string, obj: unknown) => Promise }} toBridge + * @param {{ + * outbound: (bridgeId: string, obj: unknown) => Promise; + * }} toBridge * @param {import('./types').BridgeHandler} [inboundHandler] */ (bridgeId, toBridge, inboundHandler) => ({ @@ -93,14 +93,16 @@ export const prepareBridgeManager = (zone, D) => { const makeScopedManager = prepareScopedManager(zone); /** - * Create a bridge manager for multiplexing messages to and from a bridge device - * using string-named channels. + * Create a bridge manager for multiplexing messages to and from a bridge + * device using string-named channels. * * @param {BridgeDevice} bridgeDevice The bridge to manage * @returns {{ - * manager: import('./types.js').BridgeManager, - * privateInbounder: { inbound(srcID: string, obj: unknown): void }, - * privateOutbounder: { outbound(dstID: string, obj: unknown): Promise }, + * manager: import('./types.js').BridgeManager; + * privateInbounder: { inbound(srcID: string, obj: unknown): void }; + * privateOutbounder: { + * outbound(dstID: string, obj: unknown): Promise; + * }; * }} */ const makeBridgeManagerKit = zone.exoClassKit( @@ -108,7 +110,12 @@ export const prepareBridgeManager = (zone, D) => { BridgeManagerIKit, /** @param {BridgeDevice} bridgeDevice */ bridgeDevice => ({ - /** @type {MapStore>>} */ + /** + * @type {MapStore< + * string, + * ReturnType> + * >} + */ scopedManagers: zone.detached().mapStore('scopedManagers'), bridgeDevice, }), @@ -156,7 +163,12 @@ export const prepareBridgeManager = (zone, D) => { }, ); - /** @type {MapStore>} */ + /** + * @type {MapStore< + * BridgeDevice, + * ReturnType + * >} + */ const bridgeToManagerKit = zone.mapStore('bridgeToManagerKit'); /** diff --git a/packages/vats/src/centralSupply.js b/packages/vats/src/centralSupply.js index 1f27e825e10..7a732736c37 100644 --- a/packages/vats/src/centralSupply.js +++ b/packages/vats/src/centralSupply.js @@ -4,11 +4,11 @@ import { AmountMath } from '@agoric/ertp'; import { E, Far } from '@endo/far'; /** - * The sole purpose of this contract is to mint the initial - * supply of the central currency, RUN. + * The sole purpose of this contract is to mint the initial supply of the + * central currency, RUN. * * @param {ZCF<{ - * bootstrapPaymentValue: bigint, + * bootstrapPaymentValue: bigint; * }>} zcf * @param {object} privateArgs * @param {FeeMintAccess} privateArgs.feeMintAccess diff --git a/packages/vats/src/core/basic-behaviors.js b/packages/vats/src/core/basic-behaviors.js index db45ba59a57..a5bff2ca69f 100644 --- a/packages/vats/src/core/basic-behaviors.js +++ b/packages/vats/src/core/basic-behaviors.js @@ -22,12 +22,11 @@ import { feeIssuerConfig, makeMyAddressNameAdminKit } from './utils.js'; const { details: X } = assert; /** - * In golang/cosmos/app/app.go, we define - * cosmosInitAction with type AG_COSMOS_INIT, - * with the following shape. + * In golang/cosmos/app/app.go, we define cosmosInitAction with type + * AG_COSMOS_INIT, with the following shape. * - * The uist supplyCoins value is taken from genesis, - * thereby authorizing the minting an initial supply of RUN. + * The uist supplyCoins value is taken from genesis, thereby authorizing the + * minting an initial supply of RUN. */ // eslint-disable-next-line no-unused-vars const bootMsgEx = { @@ -45,15 +44,16 @@ const bootMsgEx = { }; /** - * TODO: review behaviors carefully for powers that go out of scope, - * since we may want/need them later. + * TODO: review behaviors carefully for powers that go out of scope, since we + * may want/need them later. */ /** - * @param {BootstrapPowers & { - * }} powers + * @param {BootstrapPowers & {}} powers + * + * @typedef {import('@agoric/swingset-vat').CreateVatResults} CreateVatResults + * as from createVatByName * - * @typedef {import('@agoric/swingset-vat').CreateVatResults} CreateVatResults as from createVatByName * @typedef {MapStore} VatStore */ export const makeVatsFromBundles = async ({ @@ -78,7 +78,7 @@ export const makeVatsFromBundles = async ({ const vatInfoP = provideLazy(tmpStore, vatName, async _k => { if (bundleName) { console.info(`createVatByName(${bundleName})`); - /** @type { Promise } */ + /** @type {Promise} */ const vatInfo = E(svc).createVatByName(bundleName, { ...defaultVatCreationOptions, name: vatName, @@ -88,7 +88,7 @@ export const makeVatsFromBundles = async ({ console.info(`createVat(${bundleID})`); assert(bundleID); const bcap = await E(svc).getBundleCap(bundleID); - /** @type { Promise } */ + /** @type {Promise} */ const vatInfo = E(svc).createVat(bcap, { ...defaultVatCreationOptions, name: vatName, @@ -134,7 +134,7 @@ export const produceStartUpgradable = async ({ consume: { diagnostics, zoe }, produce, // startUpgradable, contractKits }) => { - /** @type {MapStore } */ + /** @type {MapStore} */ const contractKits = zone.mapStore('ContractKits'); /** @type {StartUpgradable} */ @@ -166,20 +166,19 @@ harden(produceStartUpgradable); /** * @template {GovernableStartFn} SF - * * @param {{ - * zoe: ERef, - * governedContractInstallation: ERef>, - * issuerKeywordRecord?: IssuerKeywordRecord, - * terms: Record, - * privateArgs: any, // TODO: connect with Installation type - * label: string, + * zoe: ERef; + * governedContractInstallation: ERef>; + * issuerKeywordRecord?: IssuerKeywordRecord; + * terms: Record; + * privateArgs: any; // TODO: connect with Installation type + * label: string; * }} zoeArgs * @param {{ - * governedParams: Record, - * timer: ERef, - * contractGovernor: ERef, - * economicCommitteeCreatorFacet: import('@agoric/inter-protocol/src/proposals/econ-behaviors.js').EconomyBootstrapPowers['consume']['economicCommitteeCreatorFacet'] + * governedParams: Record; + * timer: ERef; + * contractGovernor: ERef; + * economicCommitteeCreatorFacet: import('@agoric/inter-protocol/src/proposals/econ-behaviors.js').EconomyBootstrapPowers['consume']['economicCommitteeCreatorFacet']; * }} govArgs * @returns {Promise>} */ @@ -257,10 +256,10 @@ const startGovernedInstance = async ( /** * @param {BootstrapSpace & { - * zone: import('@agoric/zone').Zone, + * zone: import('@agoric/zone').Zone; * consume: { - * economicCommitteeCreatorFacet: import('@agoric/inter-protocol/src/proposals/econ-behaviors.js').EconomyBootstrapPowers['consume']['economicCommitteeCreatorFacet'] - * } + * economicCommitteeCreatorFacet: import('@agoric/inter-protocol/src/proposals/econ-behaviors.js').EconomyBootstrapPowers['consume']['economicCommitteeCreatorFacet']; + * }; * }} powers */ export const produceStartGovernedUpgradable = async ({ @@ -276,7 +275,12 @@ export const produceStartGovernedUpgradable = async ({ consume: { contractGovernor }, }, }) => { - /** @type {MapStore & {label: string}>} */ + /** + * @type {MapStore< + * Instance, + * GovernanceFacetKit & { label: string } + * >} + */ const contractKits = zone.mapStore('GovernedContractKits'); /** @type {startGovernedUpgradable} */ @@ -321,8 +325,8 @@ export const produceStartGovernedUpgradable = async ({ harden(produceStartGovernedUpgradable); /** - * @param { BootstrapPowers & { - * consume: { loadCriticalVat: ERef> } + * @param {BootstrapPowers & { + * consume: { loadCriticalVat: ERef> }; * }} powers * * @typedef {ERef>} ZoeVat @@ -355,10 +359,12 @@ harden(buildZoe); /** * @param {BootstrapPowers & { - * consume: { loadCriticalVat: ERef>}, + * consume: { loadCriticalVat: ERef> }; * }} powers * - * @typedef {ERef>} PriceAuthorityVat + * @typedef {ERef< + * ReturnType + * >} PriceAuthorityVat */ export const startPriceAuthorityRegistry = async ({ consume: { loadCriticalVat, client }, @@ -398,9 +404,7 @@ export const makeOracleBrands = async ({ }; harden(makeOracleBrands); -/** - * @param {BootstrapPowers & NamedVatPowers} powers - */ +/** @param {BootstrapPowers & NamedVatPowers} powers */ export const produceBoard = async ({ consume: { client }, produce: { board: pBoard }, @@ -416,10 +420,9 @@ harden(produceBoard); /** * @deprecated use produceBoard - * * @param {BootstrapPowers & { - * consume: { loadCriticalVat: ERef> - * }}} powers + * consume: { loadCriticalVat: ERef> }; + * }} powers */ export const makeBoard = async ({ consume: { loadCriticalVat, client }, @@ -436,12 +439,11 @@ harden(makeBoard); /** * Produce the remote namesByAddress hierarchy. * - * namesByAddress is a NameHub for each provisioned client, - * available, for example, as `E(home.namesByAddress).lookup('agoric1...')`. - * `depositFacet` as in `E(home.namesByAddress).lookup('agoric1...', 'depositFacet')` - * is reserved for use by the Agoric wallet. Each client - * is given `home.myAddressNameAdmin`, which they can use to - * assign (update / reserve) any other names they choose. + * namesByAddress is a NameHub for each provisioned client, available, for + * example, as `E(home.namesByAddress).lookup('agoric1...')`. `depositFacet` as + * in `E(home.namesByAddress).lookup('agoric1...', 'depositFacet')` is reserved + * for use by the Agoric wallet. Each client is given `home.myAddressNameAdmin`, + * which they can use to assign (update / reserve) any other names they choose. * * @param {BootstrapPowers} powers */ @@ -564,8 +566,8 @@ export const installBootContracts = async ({ /** * Mint IST genesis supply. * - * @param { BootstrapPowers & { - * vatParameters: { argv: { bootMsg?: typeof bootMsgEx }}, + * @param {BootstrapPowers & { + * vatParameters: { argv: { bootMsg?: typeof bootMsgEx } }; * }} powers */ export const mintInitialSupply = async ({ @@ -586,7 +588,11 @@ export const mintInitialSupply = async ({ ) || { amount: '0' }; const bootstrapPaymentValue = Nat(BigInt(centralBootstrapSupply.amount)); - /** @type {Awaited>} */ + /** + * @type {Awaited< + * ReturnType + * >} + */ const { creatorFacet } = await E(zoe).startInstance( centralSupply, {}, @@ -603,8 +609,8 @@ harden(mintInitialSupply); /** * Add IST (with initialSupply payment), BLD (with mint) to BankManager. * - * @param { BootstrapSpace & { - * consume: { loadCriticalVat: ERef> }, + * @param {BootstrapSpace & { + * consume: { loadCriticalVat: ERef> }; * }} powers */ export const addBankAssets = async ({ diff --git a/packages/vats/src/core/boot-chain.js b/packages/vats/src/core/boot-chain.js index e63a8ac255f..15f4198e33b 100644 --- a/packages/vats/src/core/boot-chain.js +++ b/packages/vats/src/core/boot-chain.js @@ -25,11 +25,11 @@ export const MANIFEST = CHAIN_BOOTSTRAP_MANIFEST; * Build root object of the bootstrap vat. * * @param {VatPowers & { - * D: DProxy, - * logger: (msg) => void, + * D: DProxy; + * logger: (msg) => void; * }} vatPowers * @param {{ - * coreProposalCode?: string, + * coreProposalCode?: string; * }} vatParameters * @param {import('@agoric/vat-data').Baggage} baggage */ diff --git a/packages/vats/src/core/boot-sim.js b/packages/vats/src/core/boot-sim.js index e5de1d9032a..0e0471d981f 100644 --- a/packages/vats/src/core/boot-sim.js +++ b/packages/vats/src/core/boot-sim.js @@ -27,11 +27,11 @@ const modules = harden({ behaviors: { ...behaviors }, utils: { ...utils } }); * Build root object of the bootstrap vat for the simulated chain. * * @param {VatPowers & { - * D: DProxy, - * logger: (msg) => void, + * D: DProxy; + * logger: (msg) => void; * }} vatPowers * @param {{ - * coreProposalCode?: string, + * coreProposalCode?: string; * }} vatParameters */ export const buildRootObject = (vatPowers, vatParameters) => { diff --git a/packages/vats/src/core/boot-solo.js b/packages/vats/src/core/boot-solo.js index 5528618b5cb..c9118cd8ae7 100644 --- a/packages/vats/src/core/boot-solo.js +++ b/packages/vats/src/core/boot-solo.js @@ -31,12 +31,12 @@ const modules = harden({ * Build root object of the bootstrap vat. * * @param {VatPowers & { - * D: DProxy, - * logger: (msg) => void, + * D: DProxy; + * logger: (msg) => void; * }} vatPowers * @param {{ - * bootstrapManifest?: Record>, - * coreProposalCode?: string, + * bootstrapManifest?: Record>; + * coreProposalCode?: string; * }} vatParameters */ export const buildRootObject = (vatPowers, vatParameters) => { diff --git a/packages/vats/src/core/chain-behaviors.js b/packages/vats/src/core/chain-behaviors.js index ed0fa645069..3b9e8a3cff6 100644 --- a/packages/vats/src/core/chain-behaviors.js +++ b/packages/vats/src/core/chain-behaviors.js @@ -23,7 +23,7 @@ const { keys } = Object; /** * This registers the code triggered by `agd tx gov submit-proposal - * swingset-core-eval permit.json code.js`. It is the "big hammer" governance + * swingset-core-eval permit.json code.js`. It is the "big hammer" governance * that allows code.js access to all powers permitted by permit.json. * * @param {BootstrapPowers} allPowers @@ -59,9 +59,11 @@ export const bridgeCoreEval = async allPowers => { switch (obj.type) { case 'CORE_EVAL': { /** - * Type defined by `agoric-sdk/golang/cosmos/proto/agoric/swingset/swingset.proto` CoreEval. + * Type defined by + * `agoric-sdk/golang/cosmos/proto/agoric/swingset/swingset.proto` + * CoreEval. * - * @type {{ evals: { json_permits: string, js_code: string }[]}} + * @type {{ evals: { json_permits: string; js_code: string }[] }} */ const { evals } = obj; return Promise.all( @@ -114,7 +116,7 @@ harden(bridgeCoreEval); /** * @param {BootstrapPowers & { - * consume: { loadCriticalVat: ERef> } + * consume: { loadCriticalVat: ERef> }; * }} powers */ export const makeProvisioner = async ({ @@ -128,9 +130,7 @@ export const makeProvisioner = async ({ }; harden(makeProvisioner); -/** - * @param {BootstrapPowers} powers - */ +/** @param {BootstrapPowers} powers */ export const noProvisioner = async ({ produce: { provisioning } }) => { provisioning.resolve(undefined); }; @@ -309,9 +309,10 @@ export const startTimerService = async ({ harden(startTimerService); /** - * @param {BootDevices & BootstrapSpace & { - * consume: { loadCriticalVat: ERef> } - * }} powers + * @param {BootDevices & + * BootstrapSpace & { + * consume: { loadCriticalVat: ERef> }; + * }} powers */ export const makeBridgeManager = async ({ consume: { loadCriticalVat }, @@ -348,7 +349,7 @@ harden(makeBridgeManager); /** * @param {BootstrapSpace & { - * consume: { loadCriticalVat: ERef> } + * consume: { loadCriticalVat: ERef> }; * }} powers */ export const makeChainStorage = async ({ @@ -380,7 +381,7 @@ export const makeChainStorage = async ({ /** * @param {BootstrapSpace & { - * consume: { loadCriticalVat: ERef> } + * consume: { loadCriticalVat: ERef> }; * }} powers */ export const produceHighPrioritySendersManager = async ({ @@ -405,14 +406,15 @@ export const produceHighPrioritySendersManager = async ({ ); /** - * NB: this is a non-durable Far object. If the bootstrap vat (where this object is made) - * were to be terminated, the object references to this would be severed. + * NB: this is a non-durable Far object. If the bootstrap vat (where this + * object is made) were to be terminated, the object references to this would + * be severed. * - * See {@link ./README.md bootstrap documentation} for implications. - * If the bootstrap vat is replaced, the new bootstrap config must be made - * using state extracted from IAVL. Contracts holding this manager will need - * to be updated with the new object, which can be done with an upgrade - * (regular or null) with the new object in privateArgs. + * See {@link ./README.md bootstrap documentation} for implications. If the + * bootstrap vat is replaced, the new bootstrap config must be made using + * state extracted from IAVL. Contracts holding this manager will need to be + * updated with the new object, which can be done with an upgrade (regular or + * null) with the new object in privateArgs. */ const manager = makePrioritySendersManager(sendersNode); @@ -441,11 +443,14 @@ export const publishAgoricNamesToChainStorage = async ({ /** * @deprecated use reflectAgoricNamesToChainStorage - * * @param {BootstrapPowers} powers - * @param {{ options?: {agoricNamesOptions?: { - * topLevel?: string[] - * }}}} config + * @param {{ + * options?: { + * agoricNamesOptions?: { + * topLevel?: string[]; + * }; + * }; + * }} config */ export const publishAgoricNames = async ( { consume: { agoricNamesAdmin, board, chainStorage: rootP } }, diff --git a/packages/vats/src/core/client-behaviors.js b/packages/vats/src/core/client-behaviors.js index 9b6873634b2..a8438fb81c4 100644 --- a/packages/vats/src/core/client-behaviors.js +++ b/packages/vats/src/core/client-behaviors.js @@ -84,10 +84,11 @@ async function createLocalBundle(vats, devices, vatAdminSvc, vatPowers) { } /** - * @param { BootDevices & BootstrapSpace & { - * vatParameters: BootstrapVatParams, - * vats: SwingsetVats & SoloVats, - * }} powers + * @param {BootDevices & + * BootstrapSpace & { + * vatParameters: BootstrapVatParams; + * vats: SwingsetVats & SoloVats; + * }} powers */ export const startClient = async ({ vatParameters: { diff --git a/packages/vats/src/core/demoIssuers.js b/packages/vats/src/core/demoIssuers.js index ff85b3b2d54..9829982797c 100644 --- a/packages/vats/src/core/demoIssuers.js +++ b/packages/vats/src/core/demoIssuers.js @@ -25,7 +25,7 @@ export const DecimalPlaces = { simolean: 0, }; -/** @type {Record} */ +/** @type {Record} */ const FaucetPurseDetail = { [Stake.symbol]: { proposedName: Stake.proposedName, @@ -86,25 +86,27 @@ const defaultConfig = /** @type {const} */ ({ initialMargin: [150n, PCT], liquidationMargin: [125n, PCT], liquidationPenalty: [10n, PCT], - stabilityFee: [250n, BASIS], + interestRate: [250n, BASIS], mintFee: [1n, BASIS], }); /** * @typedef {readonly [bigint, bigint]} Rational - * - * @type { Record - * }>} + * @type {Record< + * string, + * { + * config?: { + * collateralValue: bigint; + * initialMargin: Rational; + * liquidationMargin: Rational; + * liquidationPenalty: Rational; + * interestRate: Rational; + * mintFee: Rational; + * liquidationPadding?: Rational; + * }; + * trades: { central: number; collateral: bigint }[]; + * } + * >} */ export const AMMDemoState = { // TODO: getRUN makes BLD obsolete here @@ -182,9 +184,9 @@ const run2places = f => /** * @param {bigint} value * @param {{ - * centralSupplyInstall: ERef, - * feeMintAccess: ERef, - * zoe: ERef, + * centralSupplyInstall: ERef; + * feeMintAccess: ERef; + * zoe: ERef; * }} powers * @returns {Promise>} */ @@ -216,17 +218,15 @@ const provideCoin = async (name, mints) => { }; /** - * @param { BootstrapSpace & - * { consume: {loadVat: VatLoader} } - * } powers + * @param {BootstrapSpace & { consume: { loadVat: VatLoader } }} powers + * TODO: sync this type with end-user docs? * - * TODO: sync this type with end-user docs? * @typedef {{ - * issuer: ERef, - * issuerPetname: string, - * payment: Payment, - * brand: Brand, - * pursePetname: string, + * issuer: ERef; + * issuerPetname: string; + * payment: Payment; + * brand: Brand; + * pursePetname: string; * }} UserPaymentRecord */ export const connectFaucet = async ({ @@ -334,7 +334,7 @@ export const connectFaucet = async ({ /** * reap the spoils of our on-chain provisioning. * - * @returns {Promise>} + * @returns {Promise} */ tapFaucet: async () => faucetPaymentInfo, getFeePurse() { @@ -389,7 +389,7 @@ export const ammPoolRunDeposits = issuers => { /** * @param {Payment} bootstrapPayment * @param {Record} balances - * @param {{ issuer: ERef, brand: Brand }} central + * @param {{ issuer: ERef; brand: Brand }} central */ export const splitAllCentralPayments = async ( bootstrapPayment, @@ -421,9 +421,9 @@ export const splitAllCentralPayments = async ( /** * @param {string} issuerName - * @param {typeof AMMDemoState['ATOM']} record - * @param {Record, brand: Brand }>} kits - * @param {{ issuer: ERef>, brand: Brand<'nat'> }} central + * @param {(typeof AMMDemoState)['ATOM']} record + * @param {Record; brand: Brand }>} kits + * @param {{ issuer: ERef>; brand: Brand<'nat'> }} central */ export const poolRates = (issuerName, record, kits, central) => { /** @param {bigint} n */ @@ -451,7 +451,7 @@ export const poolRates = (issuerName, record, kits, central) => { initialMargin: toRatio(config.initialMargin, central.brand), liquidationMargin: toRatio(config.liquidationMargin, central.brand), liquidationPenalty: toRatio(config.liquidationPenalty, central.brand), - stabilityFee: toRatio(config.stabilityFee, central.brand), + interestRate: toRatio(config.interestRate, central.brand), mintFee: toRatio(config.mintFee, central.brand), // XXX not relevant to AMM pools but poolRates is also used for addVaultType liquidationPadding: @@ -462,7 +462,7 @@ export const poolRates = (issuerName, record, kits, central) => { }; /** - * @param { import('@agoric/inter-protocol/src/proposals/econ-behaviors.js').EconomyBootstrapPowers & { - * consume: { mints } - * }} powers + * @param {import('@agoric/inter-protocol/src/proposals/econ-behaviors.js').EconomyBootstrapPowers & { + * consume: { mints }; + * }} powers */ diff --git a/packages/vats/src/core/lib-boot.js b/packages/vats/src/core/lib-boot.js index d527bc5deaa..fe09be09654 100644 --- a/packages/vats/src/core/lib-boot.js +++ b/packages/vats/src/core/lib-boot.js @@ -1,7 +1,7 @@ // @ts-check import { E, Far } from '@endo/far'; import { makePassableEncoding } from '@agoric/swingset-vat/tools/passableEncoding.js'; -import { heapZone } from '@agoric/zone'; +import { makeHeapZone } from '@agoric/zone'; import { makeVatSpace, makeWellKnownSpaces, @@ -12,29 +12,36 @@ import { makePromiseSpace } from './promise-space.js'; const { Fail, quote: q } = assert; /** - * @typedef {true | string | { [key: string]: BootstrapManifestPermit | undefined }} BootstrapManifestPermit + * @typedef {| true + * | string + * | { [key: string]: BootstrapManifestPermit | undefined }} BootstrapManifestPermit */ /** - * A manifest is an object in which each key is the name of a function to run - * at bootstrap and the corresponding value is a "permit" describing an - * attenuation of allPowers that should be provided as its first argument - * (cf. packages/vats/src/core/boot.js). + * A manifest is an object in which each key is the name of a function to run at + * bootstrap and the corresponding value is a "permit" describing an attenuation + * of allPowers that should be provided as its first argument (cf. + * packages/vats/src/core/boot.js). * * A permit is either - * - `true` or a string (both meaning no attenuation, with a string serving - * as a grouping label for convenience and diagram generation), or - * - an object whose keys identify properties to preserve and whose values - * are themselves (recursive) permits. * - * @typedef {Record} BootstrapManifest + * - `true` or a string (both meaning no attenuation, with a string serving as a + * grouping label for convenience and diagram generation), or + * - an object whose keys identify properties to preserve and whose values are + * themselves (recursive) permits. * + * @typedef {Record} BootstrapManifest */ /** - * @typedef {(powers: *, config?: *) => Promise} BootBehavior + * @typedef {(powers: any, config?: any) => Promise} BootBehavior + * * @typedef {Record} ModuleNamespace - * @typedef {{ utils: typeof import('./utils.js') } & Record>} BootModules + * + * @typedef {{ utils: typeof import('./utils.js') } & Record< + * string, + * Record + * >} BootModules */ /** @type {(a: X[], b: X[]) => X[]} */ @@ -42,8 +49,8 @@ const setDiff = (a, b) => a.filter(x => !b.includes(x)); /** * @param {VatPowers & { - * D: DProxy, - * logger: (msg) => void, + * D: DProxy; + * logger: (msg) => void; * }} vatPowers * @param {Record} vatParameters * @param {BootstrapManifest} bootManifest @@ -57,7 +64,7 @@ export const makeBootstrap = ( bootManifest, behaviors, modules, - zone = heapZone, + zone = makeHeapZone(), ) => { const { keys } = Object; const extra = setDiff(keys(bootManifest), keys(behaviors)); @@ -147,7 +154,11 @@ export const makeBootstrap = ( }, ], }; - /** @type {{coreEvalBridgeHandler: Promise}} */ + /** + * @type {{ + * coreEvalBridgeHandler: Promise; + * }} + */ // @ts-expect-error cast const { coreEvalBridgeHandler } = consume; await E(coreEvalBridgeHandler).fromBridge(coreEvalMessage); diff --git a/packages/vats/src/core/promise-space.js b/packages/vats/src/core/promise-space.js index 309a3afb156..f0cca2537f9 100644 --- a/packages/vats/src/core/promise-space.js +++ b/packages/vats/src/core/promise-space.js @@ -6,17 +6,17 @@ import { makePromiseKit } from '@endo/promise-kit'; /** * @typedef {{ - * onAddKey: (key: string) => void, - * onResolve: (key: string, value: ERef) => void, - * onSettled: (key: string, remaining: Set) => void, - * onReset: (key: string) => void, + * onAddKey: (key: string) => void; + * onResolve: (key: string, value: ERef) => void; + * onSettled: (key: string, remaining: Set) => void; + * onReset: (key: string) => void; * }} PromiseSpaceHooks */ const noop = harden(() => {}); /** - * @param { typeof console.log } log + * @param {typeof console.log} log * @returns {PromiseSpaceHooks} */ export const makeLogHooks = log => @@ -29,11 +29,11 @@ export const makeLogHooks = log => }); /** - * Note: caller is responsible for synchronization - * in case of onResolve() called with a promise. + * Note: caller is responsible for synchronization in case of onResolve() called + * with a promise. * * @param {MapStore} store - * @param { typeof console.log } [log] + * @param {typeof console.log} [log] * @returns {PromiseSpaceHooks} */ export const makeStoreHooks = (store, log = noop) => { @@ -77,9 +77,11 @@ export const makeStoreHooks = (store, log = noop) => { * Note: repeated resolve()s without an intervening reset() are noops. * * @template {Record} [T=Record] - * @param {{ log?: typeof console.log } & ( - * { hooks?: PromiseSpaceHooks } | { store: MapStore } - * ) | (typeof console.log)} [optsOrLog] + * @param {| ({ log?: typeof console.log } & ( + * | { hooks?: PromiseSpaceHooks } + * | { store: MapStore } + * )) + * | typeof console.log} [optsOrLog] * @returns {PromiseSpaceOf} */ export const makePromiseSpace = (optsOrLog = {}) => { @@ -91,9 +93,7 @@ export const makePromiseSpace = (optsOrLog = {}) => { : opts.hooks || makeLogHooks(log); const { onAddKey, onSettled, onResolve, onReset } = hooks; - /** - * @typedef {{ pk: PromiseRecord, isSettling: boolean }} PromiseState - */ + /** @typedef {{ pk: PromiseRecord; isSettling: boolean }} PromiseState */ /** @type {Map} */ const nameToState = new Map(); /** @type {Set} */ diff --git a/packages/vats/src/core/startWalletFactory.js b/packages/vats/src/core/startWalletFactory.js index 67f212f05f0..325838c3884 100644 --- a/packages/vats/src/core/startWalletFactory.js +++ b/packages/vats/src/core/startWalletFactory.js @@ -17,7 +17,10 @@ const trace = makeTracer('StartWF'); /** * @param {ERef} zoe - * @param {Installation} inst + * @param {Installation< + * import('@agoric/smart-wallet/src/walletFactory').start + * >} inst + * * @typedef {Awaited>} WalletFactoryStartResult */ // eslint-disable-next-line no-unused-vars @@ -26,8 +29,8 @@ const startFactoryInstance = (zoe, inst) => E(zoe).startInstance(inst); const StableUnit = BigInt(10 ** Stable.displayInfo.decimalPlaces); /** - * Publish an arbitrary wallet state so that clients - * can tell that a wallet has been provisioned. + * Publish an arbitrary wallet state so that clients can tell that a wallet has + * been provisioned. * * @param {string[]} oldAddresses * @param {Marshaller} marshaller @@ -53,22 +56,28 @@ const publishRevivableWalletState = async ( }; /** - * Register for PLEASE_PROVISION bridge messages and handle - * them by providing a smart wallet from the wallet factory. + * Register for PLEASE_PROVISION bridge messages and handle them by providing a + * smart wallet from the wallet factory. * - * @param {BootstrapPowers & ChainStorageVatParams & PromiseSpaceOf<{ - * economicCommitteeCreatorFacet: import('@agoric/governance/src/committee.js').CommitteeElectorateCreatorFacet - * econCharterKit: { - * creatorFacet: Awaited>['creatorFacet'], - * adminFacet: AdminFacet, - * } , - * walletBridgeManager: import('../types.js').ScopedBridgeManager; - * provisionWalletBridgeManager: import('../types.js').ScopedBridgeManager; - * }>} powers + * @param {BootstrapPowers & + * ChainStorageVatParams & + * PromiseSpaceOf<{ + * economicCommitteeCreatorFacet: import('@agoric/governance/src/committee.js').CommitteeElectorateCreatorFacet; + * econCharterKit: { + * creatorFacet: Awaited< + * ReturnType< + * import('@agoric/inter-protocol/src/econCommitteeCharter.js')['start'] + * > + * >['creatorFacet']; + * adminFacet: AdminFacet; + * }; + * walletBridgeManager: import('../types.js').ScopedBridgeManager; + * provisionWalletBridgeManager: import('../types.js').ScopedBridgeManager; + * }>} powers * @param {{ * options?: { - * perAccountInitialValue?: bigint, - * }, + * perAccountInitialValue?: bigint; + * }; * }} [config] */ export const startWalletFactory = async ( diff --git a/packages/vats/src/core/types.js b/packages/vats/src/core/types.js index 8c7eb235e38..e57bbe6a291 100644 --- a/packages/vats/src/core/types.js +++ b/packages/vats/src/core/types.js @@ -12,66 +12,102 @@ /** * SwingSet types * - * @typedef { Device> } BridgeDevice - * @typedef { Device> } CommandDevice - * @typedef { Device> } MailboxDevice - * @typedef { Device> } PluginDevice - * @typedef { Device> } TimerDevice - * @typedef { Device< - * import('@agoric/swingset-vat/src/devices/vat-admin/device-vat-admin.js').VatAdminRootDeviceNode> } VatAdminDevice - * - * @typedef { ERef> } VattpVat - * @typedef { ERef> } VatAdminVat - * @typedef { ERef> } TimerVat - * - * See deliverToController in packages/SwingSet/src/vats/comms/controller.js + * @typedef {Device< + * ReturnType< + * typeof import('@agoric/swingset-vat/src/devices/bridge/device-bridge.js').buildRootDeviceNode + * > + * >} BridgeDevice + * + * @typedef {Device< + * ReturnType< + * typeof import('@agoric/swingset-vat/src/devices/command/device-command.js').buildRootDeviceNode + * > + * >} CommandDevice + * + * @typedef {Device< + * ReturnType< + * typeof import('@agoric/swingset-vat/src/devices/mailbox/device-mailbox.js').buildRootDeviceNode + * > + * >} MailboxDevice + * + * @typedef {Device< + * ReturnType< + * typeof import('@agoric/swingset-vat/src/devices/plugin/device-plugin.js').buildRootDeviceNode + * > + * >} PluginDevice + * + * @typedef {Device< + * ReturnType< + * typeof import('@agoric/swingset-vat/src/devices/timer/device-timer.js').buildRootDeviceNode + * > + * >} TimerDevice + * + * @typedef {Device< + * import('@agoric/swingset-vat/src/devices/vat-admin/device-vat-admin.js').VatAdminRootDeviceNode + * >} VatAdminDevice + * + * @typedef {ERef< + * ReturnType< + * typeof import('@agoric/swingset-vat/src/vats/vattp/vat-vattp.js').buildRootObject + * > + * >} VattpVat + * + * @typedef {ERef< + * ReturnType< + * typeof import('@agoric/swingset-vat/src/vats/vat-admin/vat-vat-admin.js').buildRootObject + * > + * >} VatAdminVat + * + * @typedef {ERef< + * ReturnType< + * typeof import('@agoric/swingset-vat/src/vats/timer/vat-timer.js').buildRootObject + * > + * >} TimerVat + * See deliverToController in packages/SwingSet/src/vats/comms/controller.js + * * @typedef {ERef<{ - * addRemote: (name: string, tx: unknown, rx: unknown) => void, - * addEgress: (addr: string, ix: number, provider: unknown) => void, - * addIngress: (remoteID: string, remoteRefID: number, label?: string) => Promise, + * addRemote: (name: string, tx: unknown, rx: unknown) => void; + * addEgress: (addr: string, ix: number, provider: unknown) => void; + * addIngress: ( + * remoteID: string, + * remoteRefID: number, + * label?: string, + * ) => Promise; * }>} CommsVatRoot * * @typedef {{ - * comms: CommsVatRoot, - * timer: TimerVat, - * vatAdmin: VatAdminVat, - * vattp: VattpVat, + * comms: CommsVatRoot; + * timer: TimerVat; + * vatAdmin: VatAdminVat; + * vattp: VattpVat; * }} SwingsetVats * * @typedef {{ - * vatParameters: { chainStorageEntries?: Array<[k: string, v: string]>, - * }}} ChainStorageVatParams + * vatParameters: { chainStorageEntries?: [k: string, v: string][] }; + * }} ChainStorageVatParams */ /** * @typedef {{ - * vatAdmin: VatAdminDevice, - * mailbox: MailboxDevice, - * command: CommandDevice, - * timer: TimerDevice, - * plugin: PluginDevice, + * vatAdmin: VatAdminDevice; + * mailbox: MailboxDevice; + * command: CommandDevice; + * timer: TimerDevice; + * plugin: PluginDevice; * }} SoloDevices * * @typedef {{ - * vatAdmin: VatAdminDevice, - * mailbox: MailboxDevice, - * timer: TimerDevice, - * bridge?: BridgeDevice, + * vatAdmin: VatAdminDevice; + * mailbox: MailboxDevice; + * timer: TimerDevice; + * bridge?: BridgeDevice; * }} ChainDevices */ /** * @typedef {{ - * getChainBundle: () => unknown, - * getChainConfigNotifier: () => Notifier, + * getChainBundle: () => unknown; + * getChainConfigNotifier: () => Notifier; * }} ClientProvider */ @@ -82,9 +118,7 @@ * @property {(r: unknown) => void} reject * @property {(reason?: unknown) => void} reset */ -/** - * @typedef {{ bundleName?: string, bundleID?: string }} VatSourceRef - */ +/** @typedef {{ bundleName?: string; bundleID?: string }} VatSourceRef */ /** * @template T * @typedef {(name: string, sourceRef?: VatSourceRef) => T} VatLoader @@ -92,10 +126,12 @@ /** * @typedef {{ - * assignBundle: (ps: PropertyMaker[]) => void - * }} ClientManager tool to put properties onto the `home` object of the client + * assignBundle: (ps: PropertyMaker[]) => void; + * }} ClientManager + * tool to put properties onto the `home` object of the client * - * @typedef {(addr: string, flags: string[]) => Record} PropertyMaker callback to assign a property onto the `home` object of the client + * @typedef {(addr: string, flags: string[]) => Record} PropertyMaker + * callback to assign a property onto the `home` object of the client */ /** @@ -103,8 +139,8 @@ * @template [C={}] Consume only * @template [P={}] Produce only * @typedef {{ - * consume: { [K in keyof (B & C)]: Promise<(B & C)[K]> }, - * produce: { [K in keyof (B & P)]: Producer<(B & P)[K]> }, + * consume: { [K in keyof (B & C)]: Promise<(B & C)[K]> }; + * produce: { [K in keyof (B & P)]: Producer<(B & P)[K]> }; * }} PromiseSpaceOf */ @@ -116,232 +152,369 @@ * @returns {Promise>>} * * @typedef {object} ClientFacet - * @property {() => ERef>} getChainBundle Required for ag-solo, but deprecated in favour of getConfiguration - * NOTE: we use `any` rather than `unknown` because each client that wants to call a method such as - * `E(userBundle.bank).deposit(payment)` has to cast userBundle.bank; - * ideally, the cast is to some useful type. But unknown can't be cast directly to some other type; - * it has to be cast to any first. + * @property {() => ERef>} getChainBundle Required for + * ag-solo, but deprecated in favour of getConfiguration NOTE: we use `any` + * rather than `unknown` because each client that wants to call a method such + * as `E(userBundle.bank).deposit(payment)` has to cast userBundle.bank; + * ideally, the cast is to some useful type. But unknown can't be cast + * directly to some other type; it has to be cast to any first. * @property {() => AsyncIterable} getConfiguration * - * @typedef {{ clientAddress: string, clientHome: Record}} Configuration + * @typedef {{ clientAddress: string; clientHome: Record }} Configuration * * @typedef {object} ClientCreator - * @property {CreateUserBundle} createUserBundle Required for vat-provisioning, but deprecated in favor of {@link createClient}. - * @property {(nickname: string, clientAddress: string, powerFlags: string[]) => Promise} createClientFacet + * @property {CreateUserBundle} createUserBundle Required for vat-provisioning, + * but deprecated in favor of {@link createClient}. + * @property {( + * nickname: string, + * clientAddress: string, + * powerFlags: string[], + * ) => Promise} createClientFacet */ /** * @typedef {import('@agoric/inter-protocol/src/tokens.js').TokenKeyword} TokenKeyword * * @typedef {{ - * issuer: | - * TokenKeyword | 'Invitation' | 'AUSD', - * installation: | - * 'centralSupply' | 'mintHolder' | - * 'walletFactory' | 'provisionPool' | 'auctioneer' | - * 'feeDistributor' | - * 'contractGovernor' | 'committee' | 'noActionElectorate' | 'binaryVoteCounter' | - * 'VaultFactory' | 'liquidate' | - * 'Pegasus' | 'reserve' | 'psm' | 'econCommitteeCharter' | 'priceAggregator', - * instance: | - * 'economicCommittee' | 'feeDistributor' | 'auctioneer' | - * 'VaultFactory' | 'VaultFactoryGovernor' | - * 'econCommitteeCharter' | - * 'walletFactory' | 'provisionPool' | - * 'reserve' | 'reserveGovernor' | 'Pegasus', - * oracleBrand: - * 'USD', - * uiConfig: | - * 'VaultFactory' + * issuer: TokenKeyword | 'Invitation' | 'AUSD'; + * installation: + * | 'centralSupply' + * | 'mintHolder' + * | 'walletFactory' + * | 'provisionPool' + * | 'auctioneer' + * | 'feeDistributor' + * | 'contractGovernor' + * | 'committee' + * | 'noActionElectorate' + * | 'binaryVoteCounter' + * | 'VaultFactory' + * | 'liquidate' + * | 'Pegasus' + * | 'reserve' + * | 'psm' + * | 'econCommitteeCharter' + * | 'priceAggregator'; + * instance: + * | 'economicCommittee' + * | 'feeDistributor' + * | 'auctioneer' + * | 'VaultFactory' + * | 'VaultFactoryGovernor' + * | 'econCommitteeCharter' + * | 'walletFactory' + * | 'provisionPool' + * | 'reserve' + * | 'reserveGovernor' + * | 'Pegasus'; + * oracleBrand: 'USD'; + * uiConfig: 'VaultFactory'; * }} WellKnownName * * @typedef {{ * issuer: { - * produce: Record>, - * consume: Record> & { BLD: Promise>, IST: Promise> }, - * }, + * produce: Record>; + * consume: Record> & { + * BLD: Promise>; + * IST: Promise>; + * }; + * }; * brand: { - * produce: Record> & - * { timer: Producer }, - * consume: Record> & - * { BLD: Promise>, IST: Promise>, - * timer: Producer }, - * }, + * produce: Record> & { + * timer: Producer; + * }; + * consume: Record> & { + * BLD: Promise>; + * IST: Promise>; + * timer: Producer; + * }; + * }; * oracleBrand: { - * produce: Record>, - * consume: Record>, - * }, - * installation:{ - * produce: Record>, - * consume: Record>> & { - * auctioneer: Promise>, - * centralSupply: Promise>, - * committee: Promise>, - * contractGovernor: Promise>, - * econCommitteeCharter: Promise>, - * feeDistributor: Promise>, - * mintHolder: Promise>, - * psm: Promise>, - * provisionPool: Promise>, - * reserve: Promise>, - * VaultFactory: Promise>, - * walletFactory: Promise>, - * }, - * }, - * instance:{ - * produce: Record>, - * consume: Record>, - * }, + * produce: Record>; + * consume: Record>; + * }; + * installation: { + * produce: Record>; + * consume: Record< + * WellKnownName['installation'], + * Promise> + * > & { + * auctioneer: Promise< + * Installation< + * import('@agoric/inter-protocol/src/auction/auctioneer.js').start + * > + * >; + * centralSupply: Promise< + * Installation + * >; + * committee: Promise< + * Installation + * >; + * contractGovernor: Promise< + * Installation< + * import('@agoric/governance/src/contractGovernor.js')['start'] + * > + * >; + * econCommitteeCharter: Promise< + * Installation< + * import('@agoric/inter-protocol/src/econCommitteeCharter.js')['start'] + * > + * >; + * feeDistributor: Promise< + * Installation< + * import('@agoric/inter-protocol/src/feeDistributor.js').start + * > + * >; + * mintHolder: Promise< + * Installation + * >; + * psm: Promise< + * Installation< + * import('@agoric/inter-protocol/src/psm/psm.js')['start'] + * > + * >; + * provisionPool: Promise< + * Installation + * >; + * reserve: Promise< + * Installation< + * import('@agoric/inter-protocol/src/reserve/assetReserve.js')['start'] + * > + * >; + * VaultFactory: Promise< + * Installation< + * import('@agoric/inter-protocol/src/vaultFactory/vaultFactory.js')['start'] + * > + * >; + * walletFactory: Promise< + * Installation< + * import('@agoric/smart-wallet/src/walletFactory.js').start + * > + * >; + * }; + * }; + * instance: { + * produce: Record>; + * consume: Record>; + * }; * uiConfig: { - * produce: Record>>, - * consume: Record>>, - * }, + * produce: Record< + * WellKnownName['uiConfig'], + * Producer> + * >; + * consume: Record>>; + * }; * }} WellKnownSpaces */ /** * @template {GovernableStartFn} SF * @typedef {{ - * installation: ERef>, - * issuerKeywordRecord?: IssuerKeywordRecord, - * governedParams: Record, - * terms: Omit['terms'], 'brands' | 'issuers' | 'governedParams' | 'electionManager'>, - * privateArgs: Omit['privateArgs'], 'initialPoserInvitation'>, - * label: string, + * installation: ERef>; + * issuerKeywordRecord?: IssuerKeywordRecord; + * governedParams: Record; + * terms: Omit< + * import('@agoric/zoe/src/zoeService/utils').StartParams['terms'], + * 'brands' | 'issuers' | 'governedParams' | 'electionManager' + * >; + * privateArgs: Omit< + * import('@agoric/zoe/src/zoeService/utils').StartParams['privateArgs'], + * 'initialPoserInvitation' + * >; + * label: string; * }} StartGovernedUpgradableOpts - * */ /** - * @typedef {(opts: StartGovernedUpgradableOpts) => Promise> - * } startGovernedUpgradable + * @typedef {( + * opts: StartGovernedUpgradableOpts, + * ) => Promise>} startGovernedUpgradable */ /** * @template {import('@agoric/zoe/src/zoeService/utils').ContractStartFunction} SF * @typedef {{ - * installation: ERef>, - * issuerKeywordRecord?: IssuerKeywordRecord, - * terms?: Omit['terms'], 'brands' | 'issuers'>, - * privateArgs?: import('@agoric/zoe/src/zoeService/utils').StartParams['privateArgs'], - * label: string, + * installation: ERef>; + * issuerKeywordRecord?: IssuerKeywordRecord; + * terms?: Omit< + * import('@agoric/zoe/src/zoeService/utils').StartParams['terms'], + * 'brands' | 'issuers' + * >; + * privateArgs?: import('@agoric/zoe/src/zoeService/utils').StartParams['privateArgs']; + * label: string; * }} StartUpgradableOpts */ /** - * @typedef {(opts: StartUpgradableOpts) - * => Promise< - * import('@agoric/zoe/src/zoeService/utils').StartedInstanceKit & - * { label: string } - * > - * } StartUpgradable + * @typedef {< + * SF extends + * import('@agoric/zoe/src/zoeService/utils').ContractStartFunction, + * >( + * opts: StartUpgradableOpts, + * ) => Promise< + * import('@agoric/zoe/src/zoeService/utils').StartedInstanceKit & { + * label: string; + * } + * >} StartUpgradable */ -/** @template T @typedef {import('@agoric/zoe/src/zoeService/utils').StartedInstanceKit } StartedInstanceKit */ +/** + * @template T @typedef + * {import('@agoric/zoe/src/zoeService/utils').StartedInstanceKit } + * StartedInstanceKit + */ -/** @typedef {{label: string} & StartedInstanceKit} StartedInstanceKitWithLabel */ +/** + * @typedef {{ label: string } & StartedInstanceKit< + * import('@agoric/zoe/src/zoeService/utils').ContractStartFunction + * >} StartedInstanceKitWithLabel + */ /** * @typedef {{ - * agoricNames: NameHub, - * agoricNamesAdmin: import('@agoric/vats').NameAdmin, - * bankManager: BankManager, - * bldIssuerKit: RemoteIssuerKit, - * board: import('@agoric/vats').Board, - * bridgeManager: import('../types.js').BridgeManager | undefined, - * chainStorage: StorageNode | null, - * chainTimerService: import('@agoric/time/src/types').TimerService, - * client: ClientManager, - * clientCreator: ClientCreator, - * coreEvalBridgeHandler: import('../types.js').BridgeHandler, - * diagnostics: { savePrivateArgs: (instance: Instance, privateArgs: unknown) => void }, - * feeMintAccess: FeeMintAccess, - * highPrioritySendersManager: import('@agoric/internal/src/priority-senders.js').PrioritySendersManager?, - * initialSupply: Payment<'nat'>, - * instancePrivateArgs: Map, - * namesByAddress: NameHub, - * namesByAddressAdmin: import('../types').NamesByAddressAdmin, - * pegasusConnections: import('@agoric/vats').NameHubKit, - * pegasusConnectionsAdmin: import('@agoric/vats').NameAdmin, - * priceAuthorityVat: Awaited, - * priceAuthority: PriceAuthority, - * priceAuthorityAdmin: PriceAuthorityRegistryAdmin, - * provisioning: Awaited | undefined, - * provisionBridgeManager: import('../types.js').ScopedBridgeManager | undefined, - * provisionWalletBridgeManager: import('../types.js').ScopedBridgeManager | undefined, - * storageBridgeManager: import('../types.js').ScopedBridgeManager?, - * contractKits: MapStore, - * startUpgradable: StartUpgradable, - * governedContractKits: MapStore & {label: string}>, - * startGovernedUpgradable: startGovernedUpgradable, - * testFirstAnchorKit: import('../vat-bank.js').AssetIssuerKit<'nat'>, - * walletBridgeManager: import('../types.js').ScopedBridgeManager | undefined, - * walletFactoryStartResult: import('./startWalletFactory').WalletFactoryStartResult, - * provisionPoolStartResult: unknown, - * vatStore: import('./utils.js').VatStore, - * zoe: ZoeService, + * agoricNames: NameHub; + * agoricNamesAdmin: import('@agoric/vats').NameAdmin; + * bankManager: BankManager; + * bldIssuerKit: RemoteIssuerKit; + * board: import('@agoric/vats').Board; + * bridgeManager: import('../types.js').BridgeManager | undefined; + * chainStorage: StorageNode | null; + * chainTimerService: import('@agoric/time/src/types').TimerService; + * client: ClientManager; + * clientCreator: ClientCreator; + * coreEvalBridgeHandler: import('../types.js').BridgeHandler; + * diagnostics: { + * savePrivateArgs: (instance: Instance, privateArgs: unknown) => void; + * }; + * feeMintAccess: FeeMintAccess; + * highPrioritySendersManager: import('@agoric/internal/src/priority-senders.js').PrioritySendersManager?; + * initialSupply: Payment<'nat'>; + * instancePrivateArgs: Map; + * namesByAddress: NameHub; + * namesByAddressAdmin: import('../types').NamesByAddressAdmin; + * pegasusConnections: import('@agoric/vats').NameHubKit; + * pegasusConnectionsAdmin: import('@agoric/vats').NameAdmin; + * priceAuthorityVat: Awaited; + * priceAuthority: PriceAuthority; + * priceAuthorityAdmin: PriceAuthorityRegistryAdmin; + * provisioning: Awaited | undefined; + * provisionBridgeManager: + * | import('../types.js').ScopedBridgeManager + * | undefined; + * provisionWalletBridgeManager: + * | import('../types.js').ScopedBridgeManager + * | undefined; + * storageBridgeManager: import('../types.js').ScopedBridgeManager?; + * contractKits: MapStore; + * startUpgradable: StartUpgradable; + * governedContractKits: MapStore< + * Instance, + * GovernanceFacetKit & { label: string } + * >; + * startGovernedUpgradable: startGovernedUpgradable; + * testFirstAnchorKit: import('../vat-bank.js').AssetIssuerKit<'nat'>; + * walletBridgeManager: import('../types.js').ScopedBridgeManager | undefined; + * walletFactoryStartResult: import('./startWalletFactory').WalletFactoryStartResult; + * provisionPoolStartResult: unknown; + * vatStore: import('./utils.js').VatStore; + * zoe: ZoeService; * }} ChainBootstrapSpaceT + * * @typedef {PromiseSpaceOf} ChainBootstrapSpace * - * @typedef {import('@agoric/vats').NameHub} NameHub - * IDEA/TODO: make types of demo stuff invisible in production behaviors + * @typedef {import('@agoric/vats').NameHub} NameHub IDEA/TODO: make types of + * demo stuff invisible in production behaviors + * * @typedef {{ * argv: { - * hardcodedClientAddresses?: string[], - * FIXME_GCI: string, - * PROVISIONER_INDEX?: number, - * }, + * hardcodedClientAddresses?: string[]; + * FIXME_GCI: string; + * PROVISIONER_INDEX?: number; + * }; * }} BootstrapVatParams - * @typedef { BootstrapSpace & { - * zone: import('@agoric/zone').Zone, - * devices: SoloDevices | ChainDevices, - * vats: SwingsetVats, - * vatPowers: { [prop: string]: any, D: DProxy }, - * vatParameters: BootstrapVatParams, - * runBehaviors: (manifest: unknown) => Promise, - * modules: Record>, + * + * @typedef {BootstrapSpace & { + * zone: import('@agoric/zone').Zone; + * devices: SoloDevices | ChainDevices; + * vats: SwingsetVats; + * vatPowers: { [prop: string]: any; D: DProxy }; + * vatParameters: BootstrapVatParams; + * runBehaviors: (manifest: unknown) => Promise; + * modules: Record>; * }} BootstrapPowers - * @typedef { WellKnownSpaces & PromiseSpaceOf, - * loadCriticalVat: VatLoader, - * }> - * } BootstrapSpace - * @typedef {{ mint: ERef, issuer: ERef, brand: Brand }} RemoteIssuerKit + * + * @typedef {WellKnownSpaces & + * PromiseSpaceOf< + * ChainBootstrapSpaceT & { + * vatAdminSvc: VatAdminSvc; + * }, + * {}, + * { + * loadVat: VatLoader; + * loadCriticalVat: VatLoader; + * } + * >} BootstrapSpace + * + * @typedef {{ mint: ERef; issuer: ERef; brand: Brand }} RemoteIssuerKit + * * @typedef {Awaited['makeBankManager']>>} BankManager + * * @typedef {ERef>} AgoricNamesVat + * * @typedef {ERef>} BankVat + * * @typedef {ERef>} BoardVat + * * @typedef {ERef>} ChainStorageVat - * @typedef {ERef>} ProvisioningVat + * + * @typedef {ERef< + * ReturnType + * >} ProvisioningVat + * * @typedef {ERef>} MintsVat - * @typedef {ERef>} PriceAuthorityVat + * + * @typedef {ERef< + * ReturnType + * >} PriceAuthorityVat + * * @typedef {ERef>} NetworkVat + * * @typedef {ERef>} IBCVat - * @typedef { import('@agoric/zoe/tools/priceAuthorityRegistry').PriceAuthorityRegistryAdmin } PriceAuthorityRegistryAdmin * - * @typedef {{ namedVat: PromiseSpaceOf<{ - * agoricNames: Awaited, - * board: Awaited, - * }> }} NamedVatPowers + * @typedef {import('@agoric/zoe/tools/priceAuthorityRegistry').PriceAuthorityRegistryAdmin} PriceAuthorityRegistryAdmin + * + * @typedef {{ + * namedVat: PromiseSpaceOf<{ + * agoricNames: Awaited; + * board: Awaited; + * }>; + * }} NamedVatPowers */ /** * @typedef {PromiseSpaceOf<{ - * mints: MintsVat + * mints: MintsVat; * }>} DemoFaucetPowers */ /** * @typedef {{ - * spawner: SpawnerVat, - * http: HttpVat, - * network: NetworkVat, - * uploads: UploadsVat, - * bootstrap: unknown + * spawner: SpawnerVat; + * http: HttpVat; + * network: NetworkVat; + * uploads: UploadsVat; + * bootstrap: unknown; * }} SoloVats - * @typedef {ERef>} SpawnerVat - * @typedef {ERef>} HttpVat - * @typedef {ERef>} UploadsVat + * + * @typedef {ERef< + * ReturnType + * >} SpawnerVat + * + * @typedef {ERef< + * ReturnType + * >} HttpVat + * + * @typedef {ERef< + * ReturnType + * >} UploadsVat */ -/** @template T @typedef {{vatPowers: { D: DProxy }, devices: T}} BootDevices */ +/** @template T @typedef {{vatPowers: { D: DProxy }, devices: T}} BootDevices */ diff --git a/packages/vats/src/core/utils.js b/packages/vats/src/core/utils.js index 2a70c7d780c..ee43c033b4e 100644 --- a/packages/vats/src/core/utils.js +++ b/packages/vats/src/core/utils.js @@ -14,7 +14,9 @@ const { Fail, quote: q } = assert; /** * We reserve these keys in name hubs. * - * @type {{ [P in keyof WellKnownName]: { [P2 in WellKnownName[P]]: string } }} + * @type {{ + * [P in keyof WellKnownName]: { [P2 in WellKnownName[P]]: string }; + * }} */ export const agoricNamesReserved = harden({ issuer: { @@ -74,7 +76,7 @@ export const agoricNamesReserved = harden({ }, }); -/** @type { FeeIssuerConfig } */ +/** @type {FeeIssuerConfig} */ export const feeIssuerConfig = { name: Stable.symbol, assetKind: Stable.assetKind, @@ -85,7 +87,7 @@ export const feeIssuerConfig = { * Wire up a remote between the comms vat and vattp. * * @param {string} addr - * @param {{ vats: { vattp: VattpVat, comms: CommsVatRoot }}} powers + * @param {{ vats: { vattp: VattpVat; comms: CommsVatRoot } }} powers */ export const addRemote = async (addr, { vats: { comms, vattp } }) => { const { transmitter, setReceiver } = await E(vattp).addRemote(addr); @@ -94,17 +96,19 @@ export const addRemote = async (addr, { vats: { comms, vattp } }) => { harden(addRemote); /** - * @param {Array<(...args) => Record>} builders - * @param {...unknown} args + * @param {((...args) => Record)[]} builders + * @param {...unknown} args * @returns {Record} */ export const callProperties = (builders, ...args) => fromEntries(builders.map(fn => entries(fn(...args))).flat()); /** - * Attenuate `specimen` to only allow acccess to properties specified in `template` + * Attenuate `specimen` to only allow acccess to properties specified in + * `template` * - * @param {true | string | Record} template true or vat name string or recursive object + * @param {true | string | Record} template true or vat name string + * or recursive object * @param {unknown} specimen * @param {string[]} [path] */ @@ -143,7 +147,8 @@ export const extract = (template, specimen, path = []) => { harden(extract); /** - * @param {true | string | Record} permit the permit supplied by the manifest + * @param {true | string | Record} permit the permit supplied by + * the manifest * @param {unknown} allPowers the powers to attenuate */ export const extractPowers = (permit, allPowers) => { @@ -164,7 +169,7 @@ harden(extractPowers); * @param {unknown} opts.allPowers * @param {Record} opts.behaviors * @param {Record>} opts.manifest - * @param { (name: string, permit: Record) => unknown} opts.makeConfig + * @param {(name: string, permit: Record) => unknown} opts.makeConfig */ export const runModuleBehaviors = ({ allPowers, @@ -194,7 +199,6 @@ harden(runModuleBehaviors); const noop = harden(() => {}); /** - * * @param {ERef} nameAdmin * @param {typeof console.log} [log] */ @@ -241,7 +245,7 @@ export const makeWellKnownSpaces = async ( }), ); const spaces = Object.fromEntries(spaceEntries); - const typedSpaces = /** @type { WellKnownSpaces } */ ( + const typedSpaces = /** @type {WellKnownSpaces} */ ( /** @type {any} */ (spaces) ); return typedSpaces; @@ -249,23 +253,20 @@ export const makeWellKnownSpaces = async ( /** * Make the well-known agoricNames namespace so that we can - * E(home.agoricNames).lookup('issuer', 'IST') and likewise - * for brand, installation, instance, etc. - * - * @param {typeof console.log} [log] - * @param {Record>} reserved a property - * for each of issuer, brand, etc. with a value whose keys are names - * to reserve. - * - * For static typing and integrating with the bootstrap permit system, - * return { produce, consume } spaces rather than NameAdmins. + * E(home.agoricNames).lookup('issuer', 'IST') and likewise for brand, + * installation, instance, etc. * * @deprecated use vat-agoricNames, makeWellKnownSpaces + * @param {typeof console.log} [log] + * @param {Record>} reserved a property for each + * of issuer, brand, etc. with a value whose keys are names to reserve. * + * For static typing and integrating with the bootstrap permit system, return { + * produce, consume } spaces rather than NameAdmins. * @returns {Promise<{ - * agoricNames: import('../types.js').NameHub, - * agoricNamesAdmin: import('../types.js').NameAdmin, - * spaces: WellKnownSpaces, + * agoricNames: import('../types.js').NameHub; + * agoricNamesAdmin: import('../types.js').NameAdmin; + * spaces: WellKnownSpaces; * }>} */ export const makeAgoricNamesAccess = async ( @@ -280,7 +281,7 @@ export const makeAgoricNamesAccess = async ( Object.keys(reserved), ); - const typedSpaces = /** @type { WellKnownSpaces } */ ( + const typedSpaces = /** @type {WellKnownSpaces} */ ( /** @type {any} */ (spaces) ); return { @@ -291,9 +292,8 @@ export const makeAgoricNamesAccess = async ( }; /** - * @param {string} address - * * @deprecated use nameAdmin.provideChild() instead + * @param {string} address */ export const makeMyAddressNameAdminKit = address => { // Create a name hub for this address. @@ -317,7 +317,9 @@ export const makeMyAddressNameAdminKit = address => { * @param {(...args: any) => void} [log] * @param {string} [label] * - * @typedef {import('@agoric/swingset-vat').CreateVatResults} CreateVatResults as from createVatByName + * @typedef {import('@agoric/swingset-vat').CreateVatResults} CreateVatResults + * as from createVatByName + * * @typedef {MapStore} VatStore */ export const makeVatSpace = ( diff --git a/packages/vats/src/crc.js b/packages/vats/src/crc.js index 65650991787..864a121498f 100644 --- a/packages/vats/src/crc.js +++ b/packages/vats/src/crc.js @@ -9,15 +9,11 @@ // @ts-check /* eslint-disable no-bitwise */ -/** - * @typedef {string | number | Uint8Array | ArrayBuffer} Data - */ +/** @typedef {string | number | Uint8Array | ArrayBuffer} Data */ const encoder = new TextEncoder(); -/** - * @param {Data} data - */ +/** @param {Data} data */ function convert(data) { if (typeof data === 'number') { const bytes = []; @@ -77,9 +73,7 @@ export class CRC { this.table = table; if (this.width === 8 && !this.xorIn && !this.xorOut && !this.reflect) { - /** - * @param {Data} data - */ + /** @param {Data} data */ this.calculate = function calculate(data) { const buffer = convert(data); let crc = 0; @@ -91,9 +85,7 @@ export class CRC { } } - /** - * @param {Data} data - */ + /** @param {Data} data */ calculate(data) { const buffer = convert(data); let crc; @@ -118,9 +110,7 @@ export class CRC { return crc >>> 0; } - /** - * @param {Data} data - */ + /** @param {Data} data */ calculateNoTable(data) { const buffer = convert(data); let crc = this.xorIn; diff --git a/packages/vats/src/ibc.js b/packages/vats/src/ibc.js index 273788c0ba1..2d5fe64e318 100644 --- a/packages/vats/src/ibc.js +++ b/packages/vats/src/ibc.js @@ -21,13 +21,13 @@ const DEFAULT_ACKNOWLEDGEMENT = '\x00'; // Default timeout after 10 minutes. const DEFAULT_PACKET_TIMEOUT_NS = 10n * 60n * 1_000_000_000n; -/** - * @typedef {import('./types.js').BridgeHandler} BridgeHandler - */ +/** @typedef {import('./types.js').BridgeHandler} BridgeHandler */ /** * @typedef {string} IBCPortID + * * @typedef {string} IBCChannelID + * * @typedef {string} IBCConnectionID */ @@ -41,8 +41,8 @@ const DEFAULT_PACKET_TIMEOUT_NS = 10n * 60n * 1_000_000_000n; */ /** - * Create a handler for the IBC protocol, both from the network - * and from the bridge. + * Create a handler for the IBC protocol, both from the network and from the + * bridge. * * @param {typeof import('@endo/far').E} E * @param {(method: string, params: any) => Promise} rawCallIBCDevice @@ -56,9 +56,7 @@ export function makeIBCProtocolHandler(E, rawCallIBCDevice) { console.info('IBC downcall', method, params); return rawCallIBCDevice(method, params); }; - /** - * @type {MapStore>} - */ + /** @type {MapStore>} */ const channelKeyToConnP = makeScalarMapStore('CHANNEL:PORT'); /** @@ -67,7 +65,7 @@ export function makeIBCProtocolHandler(E, rawCallIBCDevice) { * @property {string} channel_id * * @typedef {object} ConnectingInfo - * @property {'ORDERED'|'UNORDERED'} order + * @property {'ORDERED' | 'UNORDERED'} order * @property {string[]} connectionHops * @property {string} portID * @property {string} channelID @@ -75,31 +73,25 @@ export function makeIBCProtocolHandler(E, rawCallIBCDevice) { * @property {string} version * * @typedef {PromiseRecord} OnConnectP + * * @typedef {Omit & { - * localAddr: Endpoint, onConnectP: OnConnectP - * counterparty: { port_id: string }, + * localAddr: Endpoint; + * onConnectP: OnConnectP; + * counterparty: { port_id: string }; * }} Outbound */ - /** - * @type {LegacyMap>} - */ + /** @type {LegacyMap} */ // Legacy because it holds a mutable Javascript Array const srcPortToOutbounds = makeLegacyMap('SRC-PORT'); - /** - * @type {MapStore} - */ + /** @type {MapStore} */ const channelKeyToInfo = makeScalarMapStore('CHANNEL:PORT'); - /** - * @type {MapStore>} - */ + /** @type {MapStore>} */ const channelKeyToAttemptP = makeScalarMapStore('CHANNEL:PORT'); - /** - * @type {LegacyMap>>} - */ + /** @type {LegacyMap>>} */ // Legacy because it holds a LegacyMap const channelKeyToSeqAck = makeLegacyMap('CHANNEL:PORT'); @@ -124,9 +116,7 @@ export function makeIBCProtocolHandler(E, rawCallIBCDevice) { // Extract the actual sequence number from the return. const { sequence } = fullPacket; - /** - * @type {PromiseRecord} - */ + /** @type {PromiseRecord} */ const ackDeferred = makePromiseKit(); // Register the ack resolver/rejector with this sequence number. @@ -139,7 +129,7 @@ export function makeIBCProtocolHandler(E, rawCallIBCDevice) { * @param {string} portID * @param {string} rChannelID * @param {string} rPortID - * @param {'ORDERED'|'UNORDERED'} order + * @param {'ORDERED' | 'UNORDERED'} order * @returns {ConnectionHandler} */ function makeIBCConnectionHandler( @@ -213,9 +203,7 @@ export function makeIBCProtocolHandler(E, rawCallIBCDevice) { }); } - /** - * @param {string} localAddr - */ + /** @param {string} localAddr */ const localAddrToPortID = localAddr => { const m = localAddr.match(/^\/ibc-port\/([-a-zA-Z0-9._+#[\]<>]+)$/); if (!m) { @@ -226,29 +214,23 @@ export function makeIBCProtocolHandler(E, rawCallIBCDevice) { return m[1]; }; - /** - * @type {ProtocolImpl} - */ + /** @type {ProtocolImpl} */ let protocolImpl; /** * @typedef {object} OutboundCircuitRecord * @property {IBCConnectionID} dst - * @property {'ORDERED'|'UNORDERED'} order + * @property {'ORDERED' | 'UNORDERED'} order * @property {string} version * @property {IBCPacket} packet * @property {PromiseRecord} deferredHandler */ - /** - * @type {LegacyMap>>} - */ + /** @type {LegacyMap>>} */ // Legacy because it holds a raw JavaScript Set const portToPendingConns = makeLegacyMap('Port'); - /** - * @type {ProtocolHandler} - */ + /** @type {ProtocolHandler} */ const protocol = Far('IBCProtocolHandler', { async onCreate(impl, _protocolHandler) { console.debug('IBC onCreate'); diff --git a/packages/vats/src/lib-board.js b/packages/vats/src/lib-board.js index 65163ed0575..0e69c6c86b0 100644 --- a/packages/vats/src/lib-board.js +++ b/packages/vats/src/lib-board.js @@ -1,7 +1,6 @@ // @ts-check /** * @file lib-board: share objects by way of plain-data ids - * * @see prepareBoardKit() */ @@ -48,11 +47,11 @@ const BoardKitIKit = { //#endregion /** - * For a value with a known id in the board, we can use - * that board id as a slot to preserve identity when marshaling. + * For a value with a known id in the board, we can use that board id as a slot + * to preserve identity when marshaling. * * The contents of the string depend on the `prefix` and `crcDigits` options: - * \`${prefix}${crc}${seq}\` + * `${prefix}${crc}${seq}` * * For example, 'board0371' for prefix: 'board0', seq: 1, 2 digits crc. * @@ -75,14 +74,11 @@ const calcCrc = (data, crcDigits) => { }; /** + * @typedef {ReturnType} BoardState // TODO: use + * Key from @agoric/store when available * @see {prepareExoClassKit} - * @see {@link ../../SwingSet/docs/virtual-objects.md|SwingSet Virtual Objects} - * - * Hoisting this function makes defining the state type concise. - * @typedef {ReturnType} BoardState + * @see {@link ../../SwingSet/docs/virtual-objects.md|SwingSet Virtual Objects} Hoisting this function makes defining the state type concise. * - * - * // TODO: use Key from @agoric/store when available * @typedef {import('@endo/marshal').Passable} Key */ @@ -93,7 +89,8 @@ const calcCrc = (data, crcDigits) => { * @param {bigint | number} [initSequence] * @param {object} [options] * @param {string} [options.prefix] prefix for all ids generated - * @param {number} [options.crcDigits] count of digits to use in CRC at end of the id + * @param {number} [options.crcDigits] count of digits to use in CRC at end of + * the id */ const initDurableBoardState = ( initSequence = 0, @@ -180,9 +177,7 @@ const getValue = (id, { prefix, crcDigits, idToVal }) => { throw Fail`board does not have id: ${id}`; }; -/** - * @param {BoardState} state - */ +/** @param {BoardState} state */ const makeSlotToVal = state => { const ifaceAllegedPrefix = 'Alleged: '; const ifaceInaccessiblePrefix = 'SEVERED: '; @@ -243,9 +238,9 @@ const makePublishingMarshaller = state => { //#endregion /** - * A board is a two-way mapping between objects (such as issuers, - * brands, installation handles) and plain-data string IDs. - * A well-known board allows sharing objects by way of their ids. + * A board is a two-way mapping between objects (such as issuers, brands, + * installation handles) and plain-data string IDs. A well-known board allows + * sharing objects by way of their ids. * * @param {import('@agoric/vat-data').Baggage} baggage for upgrade successors * @see {@link packages/SwingSet/docs/vat-upgrade.md|Vat Upgrade} @@ -261,13 +256,13 @@ export const prepareBoardKit = baggage => { /** * Provide an ID for a value, generating one if not already present. * - * Each board ID includes a CRC so that the last part is well-distributed, - * which mitigates typo risks. + * Each board ID includes a CRC so that the last part is + * well-distributed, which mitigates typo risks. * - * Scaling Consideration: since we cannot know when consumers - * are no longer interested in an ID, a board holds a strong reference - * to `value` for its entire lifetime. For a well-known board, this - * is essentially forever. + * Scaling Consideration: since we cannot know when consumers are no + * longer interested in an ID, a board holds a strong reference to + * `value` for its entire lifetime. For a well-known board, this is + * essentially forever. * * @param {Key} value * @throws if `value` is not a Key in the @agoric/store sense @@ -283,14 +278,14 @@ export const prepareBoardKit = baggage => { return getValue(id, this.state); }, /** - * Convenience method for recursively traversing boards and - * board-like remotables to get data associated with a sequence of ids - * corresponding to each successive board. - * For example, `lookup("foo", "bar")` gets the value associated with - * id "foo" and returns the result of invoking `lookup("bar")` upon it - * to get the value it associates with id "bar". + * Convenience method for recursively traversing boards and board-like + * remotables to get data associated with a sequence of ids + * corresponding to each successive board. For example, `lookup("foo", + * "bar")` gets the value associated with id "foo" and returns the + * result of invoking `lookup("bar")` upon it to get the value it + * associates with id "bar". * - * @param {...string} path + * @param {...string} path */ async lookup(...path) { const { @@ -316,19 +311,19 @@ export const prepareBoardKit = baggage => { return harden([...state.idToVal.keys()]); }, /** - * Get a marshaller that implements the convertValToSlot hook using getId(), - * "publishing" previously un-mapped objects. + * Get a marshaller that implements the convertValToSlot hook using + * getId(), "publishing" previously un-mapped objects. */ getPublishingMarshaller() { return this.facets.publishingMarshaller; }, /** - * Get a marshaller that implements the convertValToSlot hook using getId(), - * only for objects that the board has(). + * Get a marshaller that implements the convertValToSlot hook using + * getId(), only for objects that the board has(). * * For other objects, we don't throw, but we emit a null slot. - * Un-serializing a null slot always produces a fresh object - * rather than preserving object identity. + * Un-serializing a null slot always produces a fresh object rather than + * preserving object identity. */ getReadonlyMarshaller() { return this.facets.readonlyMarshaller; @@ -370,9 +365,7 @@ export const prepareBoardKit = baggage => { ); }; -/** - * @param {import('@agoric/zone').Zone} zone - */ +/** @param {import('@agoric/zone').Zone} zone */ export const prepareRecorderFactory = zone => { const baggage = zone.mapStore(`Recorder Baggage`); const makeDurablePublishKit = prepareDurablePublishKit( diff --git a/packages/vats/src/mintHolder.js b/packages/vats/src/mintHolder.js index 56c34b103de..0529d3f16e0 100644 --- a/packages/vats/src/mintHolder.js +++ b/packages/vats/src/mintHolder.js @@ -12,9 +12,9 @@ import { /** * @template {AssetKind} K * @typedef {{ - * keyword: string, - * assetKind: K, - * displayInfo: DisplayInfo, + * keyword: string; + * assetKind: K; + * displayInfo: DisplayInfo; * }} IssuerInfo */ @@ -32,17 +32,22 @@ function provideIssuerKit(zcf, baggage) { } } +/** @type {ContractMeta} */ +export const meta = { + upgradability: 'canUpgrade', +}; +harden(meta); + /** - * This contract holds one mint; it basically wraps - * makeIssuerKit in its own contract, and hence in - * its own vat. + * This contract holds one mint; it basically wraps makeIssuerKit in its own + * contract, and hence in its own vat. * * @template {AssetKind} K * @param {ZCF>} zcf * @param {undefined} _privateArgs * @param {Baggage} instanceBaggage */ -export const prepare = (zcf, _privateArgs, instanceBaggage) => { +export const start = (zcf, _privateArgs, instanceBaggage) => { const { mint, issuer } = provideIssuerKit(zcf, instanceBaggage); return { @@ -50,4 +55,4 @@ export const prepare = (zcf, _privateArgs, instanceBaggage) => { creatorFacet: mint, }; }; -harden(prepare); +harden(start); diff --git a/packages/vats/src/nameHub.js b/packages/vats/src/nameHub.js index a00cbada3d8..a7d868413ea 100644 --- a/packages/vats/src/nameHub.js +++ b/packages/vats/src/nameHub.js @@ -10,7 +10,7 @@ import { makeSyncMethodCallback, prepareGuardedAttenuator, } from '@agoric/internal/src/callback.js'; -import { heapZone } from '@agoric/zone'; +import { makeHeapZone } from '@agoric/zone'; import { deeplyFulfilled } from '@endo/marshal'; const { Fail, quote: q } = assert; @@ -51,7 +51,11 @@ export const prepareMixinMyAddress = zone => { ...NameHubIKit.nameAdmin.methodGuards, getMyAddress: M.call().returns(M.string()), }); - /** @type {import('@agoric/internal/src/callback.js').MakeAttenuator} */ + /** + * @type {import('@agoric/internal/src/callback.js').MakeAttenuator< + * import('./types.js').MyAddressNameAdmin + * >} + */ const mixin = prepareGuardedAttenuator(zone, MixinI, { tag: 'MyAddressNameAdmin', }); @@ -122,8 +126,8 @@ const updated = (updateCallback, hub, _newValue = undefined) => { }; /** - * Make two facets of a node in a name hierarchy: the nameHub - * is read access and the nameAdmin is write access. + * Make two facets of a node in a name hierarchy: the nameHub is read access and + * the nameAdmin is write access. * * @param {import('@agoric/zone').Zone} zone */ @@ -139,7 +143,7 @@ export const prepareNameHubKit = zone => { /** @param {{}} me */ const my = me => provideWeak(ephemera, me, init1); - /** @type {() => import('./types').NameHubKit } */ + /** @type {() => import('./types').NameHubKit} */ const makeNameHubKit = zone.exoClassKit( 'NameHubKit', NameHubIKit, @@ -283,7 +287,13 @@ export const prepareNameHubKit = zone => { const { keyToPK, keyToAdminPK } = my(this.facets.nameHub); const { keyToValue, keyToAdmin, updateCallback } = this.state; - /** @type {[Map>, MapStore, unknown][]} */ + /** + * @type {[ + * Map>, + * MapStore, + * unknown, + * ][]} + */ const valueMapEntries = [ [keyToAdminPK, keyToAdmin, adminValue], [keyToPK, keyToValue, newValue], @@ -354,9 +364,9 @@ export const prepareNameHubKit = zone => { }; /** - * Make two facets of a node in a name hierarchy: the nameHub - * is read access and the nameAdmin is write access. + * Make two facets of a node in a name hierarchy: the nameHub is read access and + * the nameAdmin is write access. * * @returns {import('./types.js').NameHubKit} */ -export const makeNameHubKit = prepareNameHubKit(heapZone); +export const makeNameHubKit = prepareNameHubKit(makeHeapZone()); diff --git a/packages/vats/src/proposals/network-proposal.js b/packages/vats/src/proposals/network-proposal.js index 93f90f52d1c..9daf0a8cd09 100644 --- a/packages/vats/src/proposals/network-proposal.js +++ b/packages/vats/src/proposals/network-proposal.js @@ -73,18 +73,21 @@ export const registerNetworkProtocols = async (vats, dibcBridgeManager) => { }; /** - * @param { BootstrapPowers & { - * consume: { loadCriticalVat: VatLoader } - * produce: { networkVat: Producer } + * @param {BootstrapPowers & { + * consume: { loadCriticalVat: VatLoader }; + * produce: { networkVat: Producer }; * }} powers - * * @param {object} options - * @param {{networkRef: VatSourceRef, ibcRef: VatSourceRef}} options.options - * // TODO: why doesn't overloading VatLoader work??? - * @typedef { ((name: 'network') => NetworkVat) & - * ((name: 'ibc') => IBCVat) } VatLoader2 + * @param {{ networkRef: VatSourceRef; ibcRef: VatSourceRef }} options.options + * // TODO: why doesn't overloading VatLoader work??? + * + * @typedef {((name: 'network') => NetworkVat) & ((name: 'ibc') => IBCVat)} VatLoader2 * - * @typedef {{ network: ERef, ibc: ERef, provisioning: ERef}} NetVats + * @typedef {{ + * network: ERef; + * ibc: ERef; + * provisioning: ERef; + * }} NetVats */ export const setupNetworkProtocols = async ( { @@ -99,7 +102,7 @@ export const setupNetworkProtocols = async ( options, ) => { const { networkRef, ibcRef } = options.options; - /** @type { NetVats } */ + /** @type {NetVats} */ const vats = { network: E(loadCriticalVat)('network', networkRef), ibc: E(loadCriticalVat)('ibc', ibcRef), diff --git a/packages/vats/src/proposals/restart-vats-proposal.js b/packages/vats/src/proposals/restart-vats-proposal.js index df6e3f5f371..7ea3d6a2c13 100644 --- a/packages/vats/src/proposals/restart-vats-proposal.js +++ b/packages/vats/src/proposals/restart-vats-proposal.js @@ -24,9 +24,10 @@ const vatUpgradeStatus = { }; /** - * @param {BootstrapPowers & import('@agoric/inter-protocol/src/proposals/econ-behaviors.js').EconomyBootstrapSpace} space + * @param {BootstrapPowers & + * import('@agoric/inter-protocol/src/proposals/econ-behaviors.js').EconomyBootstrapSpace} space * @param {object} config - * @param {{ skip: Array}} config.options + * @param {{ skip: string[] }} config.options */ export const restartVats = async ({ consume }, { options }) => { console.log(HR); @@ -52,7 +53,6 @@ export const restartVats = async ({ consume }, { options }) => { const failures = []; /** - * * @param {string} debugName * @param {Instance} instance * @param {ERef} adminFacet diff --git a/packages/vats/src/provisionPool.js b/packages/vats/src/provisionPool.js index 59bbd5bef7f..01aa5d4020e 100644 --- a/packages/vats/src/provisionPool.js +++ b/packages/vats/src/provisionPool.js @@ -14,37 +14,41 @@ import { prepareRecorderKitMakers } from '@agoric/zoe/src/contractSupport/record import { TopicsRecordShape } from '@agoric/zoe/src/contractSupport/topics.js'; import { prepareProvisionPoolKit } from './provisionPoolKit.js'; -export const privateArgsShape = M.splitRecord( - harden({ - poolBank: M.eref(M.remotable('bank')), - storageNode: M.eref(M.remotable('storageNode')), - marshaller: M.eref(M.remotable('marshaller')), - }), - harden({ - // only necessary on first invocation, not subsequent - initialPoserInvitation: InvitationShape, - metricsOverride: M.recordOf(M.string()), - }), -); +/** @type {ContractMeta} */ +export const meta = { + privateArgsShape: M.splitRecord( + { + poolBank: M.eref(M.remotable('bank')), + storageNode: M.eref(M.remotable('storageNode')), + marshaller: M.eref(M.remotable('marshaller')), + }, + { + // only necessary on first invocation, not subsequent + initialPoserInvitation: InvitationShape, + metricsOverride: M.recordOf(M.string()), + }, + ), + upgradability: 'canUpgrade', +}; +harden(meta); /** - * @typedef {StandardTerms & GovernanceTerms<{ - * PerAccountInitialAmount: 'amount', + * @typedef {StandardTerms & + * GovernanceTerms<{ + * PerAccountInitialAmount: 'amount'; * }>} ProvisionTerms - * - * TODO: ERef> - * + * TODO: ERef> * @param {ZCF} zcf * @param {{ - * poolBank: import('@endo/far').ERef, - * initialPoserInvitation: Invitation, - * storageNode: StorageNode, - * marshaller: Marshaller, - * metricsOverride?: import('./provisionPoolKit').MetricsNotification, + * poolBank: import('@endo/far').ERef; + * initialPoserInvitation: Invitation; + * storageNode: StorageNode; + * marshaller: Marshaller; + * metricsOverride?: import('./provisionPoolKit').MetricsNotification; * }} privateArgs * @param {import('@agoric/vat-data').Baggage} baggage */ -export const prepare = async (zcf, privateArgs, baggage) => { +export const start = async (zcf, privateArgs, baggage) => { const { poolBank, metricsOverride } = privateArgs; const { makeRecorderKit } = prepareRecorderKitMakers( @@ -110,4 +114,4 @@ export const prepare = async (zcf, privateArgs, baggage) => { }); }; -harden(prepare); +harden(start); diff --git a/packages/vats/src/provisionPoolKit.js b/packages/vats/src/provisionPoolKit.js index 876c8c9baab..7cfbc1a88e0 100644 --- a/packages/vats/src/provisionPoolKit.js +++ b/packages/vats/src/provisionPoolKit.js @@ -23,38 +23,42 @@ import { PowerFlags } from './walletFlags.js'; const { details: X, quote: q, Fail } = assert; -/** @typedef {import('@agoric/zoe/src/zoeService/utils').Instance} PsmInstance */ +/** + * @typedef {import('@agoric/zoe/src/zoeService/utils').Instance< + * import('@agoric/inter-protocol/src/psm/psm.js').start + * >} PsmInstance + */ /** * @typedef {object} ProvisionPoolKitReferences * @property {ERef} bankManager * @property {ERef} namesByAddressAdmin - * @property {ERef} walletFactory + * @property {ERef< + * import('@agoric/vats/src/core/startWalletFactory').WalletFactoryStartResult['creatorFacet'] + * >} walletFactory */ /** - * @typedef {object} MetricsNotification - * Metrics naming scheme is that nouns are present values and past-participles - * are accumulative. - * - * @property {bigint} walletsProvisioned count of new wallets provisioned - * @property {Amount<'nat'>} totalMintedProvided running sum of Minted provided to new wallets - * @property {Amount<'nat'>} totalMintedConverted running sum of Minted - * ever received by the contract from PSM + * @typedef {object} MetricsNotification Metrics naming scheme is that nouns are + * present values and past-participles are accumulative. + * @property {bigint} walletsProvisioned count of new wallets provisioned + * @property {Amount<'nat'>} totalMintedProvided running sum of Minted provided + * to new wallets + * @property {Amount<'nat'>} totalMintedConverted running sum of Minted ever + * received by the contract from PSM */ /** - * Given attenuated access to the funding purse, - * handle requests to provision smart wallets. + * Given attenuated access to the funding purse, handle requests to provision + * smart wallets. * * @param {(depositBank: ERef) => Promise} sendInitialPayment * @param {() => void} onProvisioned + * * @typedef {import('./vat-bank.js').Bank} Bank */ export const makeBridgeProvisionTool = (sendInitialPayment, onProvisioned) => { - /** - * @param {ProvisionPoolKitReferences} refs - */ + /** @param {ProvisionPoolKitReferences} refs */ const makeBridgeHandler = ({ bankManager, namesByAddressAdmin, @@ -90,10 +94,10 @@ export const makeBridgeProvisionTool = (sendInitialPayment, onProvisioned) => { /** * @param {import('@agoric/vat-data').Baggage} baggage * @param {{ - * makeRecorderKit: import('@agoric/zoe/src/contractSupport/recorder.js').MakeRecorderKit, - * params: *, - * poolBank: import('@endo/far').ERef, - * zcf: ZCF, + * makeRecorderKit: import('@agoric/zoe/src/contractSupport/recorder.js').MakeRecorderKit; + * params: any; + * poolBank: import('@endo/far').ERef; + * zcf: ZCF; * }} powers */ export const prepareProvisionPoolKit = ( @@ -173,9 +177,7 @@ export const prepareProvisionPoolKit = ( { // aka "limitedCreatorFacet" machine: { - /** - * @param {string[]} oldAddresses - */ + /** @param {string[]} oldAddresses */ addRevivableAddresses(oldAddresses) { console.log('revivableAddresses count', oldAddresses.length); this.state.revivableAddresses.addAll(oldAddresses); @@ -183,9 +185,7 @@ export const prepareProvisionPoolKit = ( getWalletReviver() { return this.facets.walletReviver; }, - /** - * @param {ProvisionPoolKitReferences} erefs - */ + /** @param {ProvisionPoolKitReferences} erefs */ async setReferences(erefs) { const { bankManager, namesByAddressAdmin, walletFactory } = erefs; const obj = harden({ @@ -295,10 +295,7 @@ export const prepareProvisionPoolKit = ( state.walletsProvisioned += 1n; facets.helper.publishMetrics(); }, - /** - * - * @param {ERef} destBank - */ + /** @param {ERef} destBank */ async sendInitialPayment(destBank) { const { facets: { helper }, diff --git a/packages/vats/src/repl.js b/packages/vats/src/repl.js index f99ef805259..60e84800792 100644 --- a/packages/vats/src/repl.js +++ b/packages/vats/src/repl.js @@ -74,7 +74,7 @@ function dump0(value, spaces, inProgress, depth) { let sep = ''; let closer; - /** @type {Array} */ + /** @type {(string | symbol)[]} */ const names = Object.getOwnPropertyNames(value); const nonNumber = new Set(names); if (Array.isArray(value)) { diff --git a/packages/vats/src/types.js b/packages/vats/src/types.js index ce8989edfc7..424ff9aabc6 100644 --- a/packages/vats/src/types.js +++ b/packages/vats/src/types.js @@ -8,54 +8,51 @@ export {}; */ /** - * @typedef {ReturnType>['board']} Board + * @typedef {ReturnType< + * ReturnType + * >['board']} Board */ /** * @typedef {object} NameHub read-only access to a node in a name hierarchy * - * NOTE: We need to return arrays, not iterables, because even if marshal could - * allow passing a remote iterable, there would be an inordinate number of round - * trips for the contents of even the simplest nameHub. - * + * NOTE: We need to return arrays, not iterables, because even if marshal could + * allow passing a remote iterable, there would be an inordinate number of + * round trips for the contents of even the simplest nameHub. * @property {(key: string) => boolean} has - * @property {(...path: Array) => Promise} lookup Look up a - * path of keys starting from the current NameHub. Wait on any reserved - * promises. - * @property {(includeReserved?: boolean) => [string, unknown][]} entries get all the entries - * available in the current NameHub - * @property {() => string[]} keys get all names available in the - * current NameHub - * @property {() => unknown[]} values get all values available in the - * current NameHub + * @property {(...path: string[]) => Promise} lookup Look up a path of keys + * starting from the current NameHub. Wait on any reserved promises. + * @property {(includeReserved?: boolean) => [string, unknown][]} entries get + * all the entries available in the current NameHub + * @property {() => string[]} keys get all names available in the current + * NameHub + * @property {() => unknown[]} values get all values available in the current + * NameHub */ /** * @typedef {object} NameAdmin write access to a node in a name hierarchy - * * @property {(key: string, reserved?: string[]) => Promise} provideChild - * @property {(key: string) => Promise} reserve Mark a key as reserved; will - * return a promise that is fulfilled when the key is updated (or rejected when - * deleted). If the key was already set it does nothing. - * @property {( key: string, newValue: T, newAdmin?: NameAdmin) => - * T } default Update if not already updated. Return - * existing value, or newValue if not existing. - * @property {( - * key: string, newValue: unknown, newAdmin?: NameAdmin) => void - * } set Update only if already initialized. Reject if not. - * @property {( - * key: string, newValue: unknown, newAdmin?: NameAdmin) => void - * } update Fulfill an outstanding reserved promise (if any) to the newValue and - * set the key to the newValue. If newAdmin is provided, set that to return via - * lookupAdmin. - * @property {(...path: Array) => Promise} lookupAdmin Look up the - * `newAdmin` from the path of keys starting from the current NameAdmin. Wait - * on any reserved promises. + * @property {(key: string) => Promise} reserve Mark a key as reserved; + * will return a promise that is fulfilled when the key is updated (or + * rejected when deleted). If the key was already set it does nothing. + * @property {(key: string, newValue: T, newAdmin?: NameAdmin) => T} default + * Update if not already updated. Return existing value, or newValue if not + * existing. + * @property {(key: string, newValue: unknown, newAdmin?: NameAdmin) => void} set + * Update only if already initialized. Reject if not. + * @property {(key: string, newValue: unknown, newAdmin?: NameAdmin) => void} update + * Fulfill an outstanding reserved promise (if any) to the newValue and set the + * key to the newValue. If newAdmin is provided, set that to return via + * lookupAdmin. + * @property {(...path: string[]) => Promise} lookupAdmin Look up the + * `newAdmin` from the path of keys starting from the current NameAdmin. Wait + * on any reserved promises. * @property {(key: string) => void} delete Delete a value and reject an - * outstanding reserved promise (if any). + * outstanding reserved promise (if any). * @property {() => NameHub} readonly get the NameHub corresponding to the - * current NameAdmin - * @property {(fn: undefined | (NameHubUpdateHandler)) => void} onUpdate + * current NameAdmin + * @property {(fn: undefined | NameHubUpdateHandler) => void} onUpdate * * @typedef {{ write: (entries: [string, unknown][]) => void }} NameHubUpdateHandler */ @@ -66,26 +63,29 @@ export {}; * @property {NameAdmin} nameAdmin write access */ -/** - * @typedef {NameAdmin & { getMyAddress(): string }} MyAddressNameAdmin - */ +/** @typedef {NameAdmin & { getMyAddress(): string }} MyAddressNameAdmin */ /** * @typedef {NameAdmin & { - * provideChild(addr: string, reserved?: string[]): Promise<{ - * nameHub: NameHub, - * nameAdmin: MyAddressNameAdmin, - * }>, - * lookupAdmin(addr: string): Promise, + * provideChild( + * addr: string, + * reserved?: string[], + * ): Promise<{ + * nameHub: NameHub; + * nameAdmin: MyAddressNameAdmin; + * }>; + * lookupAdmin(addr: string): Promise; * }} NamesByAddressAdmin */ /** - * @typedef {object} BridgeHandler An object that can receive messages from the bridge device + * @typedef {object} BridgeHandler An object that can receive messages from the + * bridge device * @property {(obj: any) => Promise} fromBridge Handle an inbound message */ /** - * @typedef {object} ScopedBridgeManager An object which handles messages for a specific bridge + * @typedef {object} ScopedBridgeManager An object which handles messages for a + * specific bridge * @property {(obj: any) => Promise} toBridge * @property {(obj: any) => Promise} fromBridge * @property {(handler: ERef) => void} initHandler @@ -94,5 +94,8 @@ export {}; /** * @typedef {object} BridgeManager The object to manage this bridge - * @property {(bridgeId: string, handler?: ERef) => ScopedBridgeManager} register + * @property {( + * bridgeId: string, + * handler?: ERef, + * ) => ScopedBridgeManager} register */ diff --git a/packages/vats/src/vat-bank.js b/packages/vats/src/vat-bank.js index b81ad9f4611..5efe98144c4 100644 --- a/packages/vats/src/vat-bank.js +++ b/packages/vats/src/vat-bank.js @@ -32,6 +32,7 @@ const BridgeChannelI = M.interface('BridgeChannel', { /** * @typedef {import('./virtual-purse').VirtualPurseController} VirtualPurseController + * * @typedef {Awaited>>} VirtualPurse */ @@ -44,10 +45,14 @@ const BalanceUpdaterI = M.interface('BalanceUpdater', { update: M.call(M.string()).optional(M.string()).returns(), }); -/** @typedef {Pick} BridgeChannel */ +/** + * @typedef {Pick< + * import('./types.js').ScopedBridgeManager, + * 'fromBridge' | 'toBridge' + * >} BridgeChannel + */ /** - * * @param {import('@agoric/zone').Zone} zone * @returns {(brand: Brand, publisher: Publisher) => BalanceUpdater} */ @@ -76,9 +81,7 @@ const prepareBalanceUpdater = zone => }, ); -/** - * @param {import('@agoric/zone').Zone} zone - */ +/** @param {import('@agoric/zone').Zone} zone */ const prepareBankPurseController = zone => { /** * @param {BridgeChannel} bankBridge @@ -170,16 +173,12 @@ const prepareRewardPurseController = zone => }, ); -/** - * @param {import('@agoric/zone').Zone} zone - */ +/** @param {import('@agoric/zone').Zone} zone */ const prepareBankChannelHandler = zone => zone.exoClass( 'BankChannelHandler', BridgeHandlerI, - /** - * @param {MapStore>} denomToAddressUpdater - */ + /** @param {MapStore>} denomToAddressUpdater */ denomToAddressUpdater => ({ denomToAddressUpdater }), { async fromBridge(obj) { @@ -221,7 +220,7 @@ const prepareBankChannelHandler = zone => * Concatenate multiple iterables to form a new one. * * @template T - * @param {Array | AsyncIterable>} iterables + * @param {(Iterable | AsyncIterable)[]} iterables */ async function* concatAsyncIterables(iterables) { for (const asyncIterable of iterables) { @@ -273,12 +272,15 @@ const makeHistoricalTopic = (historyValues, futureSubscriber, skipValue) => { return makeSubscriberFromAsyncIterable(allHistory, skipValue); }; -/** @type {WeakMap, Promise>>} */ -const fullAssetPubLists = new WeakMap(); - /** - * @param {import('@agoric/zone').Zone} zone + * @type {WeakMap< + * MapStore, + * Promise> + * >} */ +const fullAssetPubLists = new WeakMap(); + +/** @param {import('@agoric/zone').Zone} zone */ const prepareAssetSubscription = zone => { const assetSubscriptionCache = zone.weakMapStore('assetSubscriptionCache'); @@ -358,9 +360,7 @@ const AssetIssuerKitShape = M.splitRecord(BaseIssuerKitShape, { mint: M.remotable('Mint'), }); -/** - * @typedef {AssetIssuerKit & { denom: string, escrowPurse?: ERef }} AssetRecord - */ +/** @typedef {AssetIssuerKit & { denom: string; escrowPurse?: ERef }} AssetRecord */ /** * @typedef {object} AssetDescriptor @@ -372,18 +372,18 @@ const AssetIssuerKitShape = M.splitRecord(BaseIssuerKitShape, { */ /** - * @typedef { AssetDescriptor & { - * issuer: Issuer<'nat'>, // settled identity - * displayInfo: DisplayInfo, + * @typedef {AssetDescriptor & { + * issuer: Issuer<'nat'>; // settled identity + * displayInfo: DisplayInfo; * }} AssetInfo */ /** * @typedef {object} Bank - * @property {() => IterableEachTopic} getAssetSubscription Returns - * assets as they are added to the bank - * @property {(brand: Brand) => Promise} getPurse Find any existing vpurse - * (keyed by address and brand) or create a new one. + * @property {() => IterableEachTopic} getAssetSubscription + * Returns assets as they are added to the bank + * @property {(brand: Brand) => Promise} getPurse Find any + * existing vpurse (keyed by address and brand) or create a new one. */ export const BankI = M.interface('Bank', { @@ -410,7 +410,12 @@ const prepareBank = ( // we decide to partition the provider and use `brandToVPurse` directly, we'd // need ephemera for each `makeBank` call. const addressDenomToPurse = zone.mapStore('addressDenomToPurse'); - /** @type {import('@agoric/store/src/stores/store-utils.js').AtomicProvider} */ + /** + * @type {import('@agoric/store/src/stores/store-utils.js').AtomicProvider< + * string, + * VirtualPurse + * >} + */ const purseProvider = makeAtomicProvider(addressDenomToPurse); const makeBank = zone.exoClass( @@ -574,12 +579,17 @@ const prepareBankManager = ( const brandToAssetDescriptor = detachedZone.mapStore( 'brandToAssetDescriptor', ); - /** @type {MapStore }>} */ + /** + * @type {MapStore< + * string, + * { bank: Bank; brandToVPurse: MapStore } + * >} + */ const addressToBank = detachedZone.mapStore('addressToBank'); /** * CAVEAT: The history for the assetSubscriber needs to be loaded into the - * heap on first use in this incarnation. Use provideAssetSubscription to + * heap on first use in this incarnation. Use provideAssetSubscription to * set that up. * * @type {PublishKit} @@ -637,7 +647,7 @@ const prepareBankManager = ( * * @param {string} moduleName * @returns {Promise} address of named module account, or - * null if unimplemented (no bankChannel) + * null if unimplemented (no bankChannel) */ async getModuleAccountAddress(moduleName) { const { bankChannel } = this.state; @@ -652,16 +662,17 @@ const prepareBankManager = ( }, /** - * Add an asset to the bank, and publish it to the subscriptions. - * If nameAdmin is defined, update with denom to AssetInfo entry. + * Add an asset to the bank, and publish it to the subscriptions. If + * nameAdmin is defined, update with denom to AssetInfo entry. * - * Note that AssetInfo has the settled identity of the issuer, - * not just a promise for it. + * Note that AssetInfo has the settled identity of the issuer, not just a + * promise for it. * * @param {string} denom lower-level denomination string * @param {string} issuerName * @param {string} proposedName - * @param {AssetIssuerKit & { payment?: ERef }} kit ERTP issuer kit (mint, brand, issuer) + * @param {AssetIssuerKit & { payment?: ERef }} kit ERTP issuer + * kit (mint, brand, issuer) */ async addAsset(denom, issuerName, proposedName, kit) { const { @@ -722,7 +733,7 @@ const prepareBankManager = ( ([issuer, displayInfo]) => E(nameAdmin).update( denom, - /** @type { AssetInfo } */ ( + /** @type {AssetInfo} */ ( harden({ brand, issuer, @@ -774,9 +785,7 @@ const prepareBankManager = ( return makeBankManager; }; -/** - * @param {MapStore} baggage - */ +/** @param {MapStore} baggage */ const prepareFromBaggage = baggage => { const rootZone = makeDurableZone(baggage); @@ -797,9 +806,7 @@ const prepareFromBaggage = baggage => { const makeRewardPurseController = prepareRewardPurseController(rootZone); const makeBankChannelHandler = prepareBankChannelHandler(rootZone); - /** - * @type {import('@agoric/internal/src/callback.js').MakeAttenuator} - */ + /** @type {import('@agoric/internal/src/callback.js').MakeAttenuator} */ const makeBridgeChannelAttenuator = prepareGuardedAttenuator( rootZone.subZone('attenuators'), BridgeChannelI, @@ -839,11 +846,11 @@ export function buildRootObject(_vatPowers, _args, baggage) { return Far('bankMaker', { /** - * @param {ERef} [bankBridgeManagerP] a bridge - * manager for the "remote" bank (such as on cosmos-sdk). If not supplied - * (such as on sim-chain), we just use local purses. - * @param {ERef<{ update: import('./types.js').NameAdmin['update'] }>} [nameAdminP] update facet of - * a NameAdmin; see addAsset() for detail. + * @param {ERef} [bankBridgeManagerP] + * a bridge manager for the "remote" bank (such as on cosmos-sdk). If not + * supplied (such as on sim-chain), we just use local purses. + * @param {ERef<{ update: import('./types.js').NameAdmin['update'] }>} [nameAdminP] + * update facet of a NameAdmin; see addAsset() for detail. */ async makeBankManager( bankBridgeManagerP = undefined, @@ -856,9 +863,7 @@ export function buildRootObject(_vatPowers, _args, baggage) { 'denomToAddressUpdater', ); - /** - * @param {ERef} [bankBridgeMgr] - */ + /** @param {ERef} [bankBridgeMgr] */ async function getBankChannel(bankBridgeMgr) { // We do the logic here if the bridge manager is available. Otherwise, // the bank is not "remote" (such as on sim-chain), so we just use diff --git a/packages/vats/src/vat-mints.js b/packages/vats/src/vat-mints.js index c8cbba538ad..dbafccbe4d7 100644 --- a/packages/vats/src/vat-mints.js +++ b/packages/vats/src/vat-mints.js @@ -9,7 +9,7 @@ import { notForProductionUse } from '@agoric/internal/src/magic-cookie-test-only // simoleanMint. export function buildRootObject() { - /** @type {MapStore} */ + /** @type {MapStore} */ const mintsAndBrands = makeScalarMapStore('issuerName'); const api = Far('api', { @@ -22,9 +22,9 @@ export function buildRootObject() { getIssuers: issuerNames => issuerNames.map(api.getIssuer), /** - * WARNING: a mint is ability to mint new digital assets, - * a very powerful authority that is usually closely held. - * But this mint is for demo / faucet purposes. + * WARNING: a mint is ability to mint new digital assets, a very powerful + * authority that is usually closely held. But this mint is for demo / + * faucet purposes. * * @param {string} name */ @@ -35,8 +35,8 @@ export function buildRootObject() { /** @param {string[]} issuerNames */ getMints: issuerNames => issuerNames.map(api.getMint), /** - * @param {*} issuerNameSingular For example, 'moola', or 'simolean' - * @param {[AssetKind?, DisplayInfo?]} issuerArgs + * @param {any} issuerNameSingular For example, 'moola', or 'simolean' + * @param {[AssetKind?, DisplayInfo?]} issuerArgs */ makeMintAndIssuer: (issuerNameSingular, ...issuerArgs) => { notForProductionUse(); diff --git a/packages/vats/src/vat-provisioning.js b/packages/vats/src/vat-provisioning.js index d9c0d1cdac6..584c381917b 100644 --- a/packages/vats/src/vat-provisioning.js +++ b/packages/vats/src/vat-provisioning.js @@ -20,7 +20,11 @@ import { const prepareSpecializedNameAdmin = zone => { const mixinMyAddress = prepareMixinMyAddress(zone); - /** @type {import('@agoric/internal/src/callback.js').MakeAttenuator} */ + /** + * @type {import('@agoric/internal/src/callback.js').MakeAttenuator< + * import('./types.js').NamesByAddressAdmin + * >} + */ const specialize = prepareGuardedAttenuator(zone, NameHubIKit.nameAdmin, { tag: 'NamesByAddressAdmin', }); @@ -34,7 +38,10 @@ const prepareSpecializedNameAdmin = zone => { /** * @param {string} address * @param {string[]} [reserved] - * @returns {Promise<{ nameHub: NameHub, nameAdmin: import('./types.js').MyAddressNameAdmin}>} + * @returns {Promise<{ + * nameHub: NameHub; + * nameAdmin: import('./types.js').MyAddressNameAdmin; + * }>} */ async provideChild(address, reserved) { const { nameAdmin } = this.state; @@ -50,7 +57,7 @@ const prepareSpecializedNameAdmin = zone => { // XXX relies on callers not to provide other admins via update() // TODO: enforce? - /** @type { import('./types').MyAddressNameAdmin } */ + /** @type {import('./types').MyAddressNameAdmin} */ // eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error // @ts-ignore cast const myAdmin = nameAdmin.lookupAdmin(address); @@ -59,9 +66,7 @@ const prepareSpecializedNameAdmin = zone => { }, ); - /** - * @param {import('./types.js').NameAdmin} nameAdmin - */ + /** @param {import('./types.js').NameAdmin} nameAdmin */ const makeMyAddressNameAdmin = nameAdmin => { const overrideFacet = makeOverrideFacet(nameAdmin); return specialize({ diff --git a/packages/vats/src/virtual-purse.js b/packages/vats/src/virtual-purse.js index 2ef8ff7e615..fc01dbcccaf 100644 --- a/packages/vats/src/virtual-purse.js +++ b/packages/vats/src/virtual-purse.js @@ -91,30 +91,28 @@ export const makeVirtualPurseKitIKit = ( /** * @typedef {object} VirtualPurseController The object that determines the - * remote behaviour of a virtual purse. + * remote behaviour of a virtual purse. * @property {(amount: Amount) => Promise} pushAmount Tell the controller - * to send an amount from "us" to the "other side". This should resolve on - * success and reject on failure. IT IS IMPORTANT NEVER TO FAIL in normal - * operation. That will irrecoverably lose assets. + * to send an amount from "us" to the "other side". This should resolve on + * success and reject on failure. IT IS IMPORTANT NEVER TO FAIL in normal + * operation. That will irrecoverably lose assets. * @property {(amount: Amount) => Promise} pullAmount Tell the controller - * to send an amount from the "other side" to "us". This should resolve on - * success and reject on failure. We can still recover assets from failure to - * pull. + * to send an amount from the "other side" to "us". This should resolve on + * success and reject on failure. We can still recover assets from failure to + * pull. * @property {(brand: Brand) => LatestTopic} getBalances Return the - * current balance iterable for a given brand. + * current balance iterable for a given brand. */ -/** - * @param {import('@agoric/zone').Zone} zone - */ +/** @param {import('@agoric/zone').Zone} zone */ const prepareVirtualPurseKit = zone => zone.exoClassKit( 'VirtualPurseKit', makeVirtualPurseKitIKit().VirtualPurseIKit, /** * @param {ERef} vpc - * @param {{ issuer: ERef, brand: Brand, mint?: ERef }} issuerKit - * @param {{ recoveryPurse: ERef, escrowPurse?: ERef }} purses + * @param {{ issuer: ERef; brand: Brand; mint?: ERef }} issuerKit + * @param {{ recoveryPurse: ERef; escrowPurse?: ERef }} purses */ (vpc, issuerKit, purses) => ({ vpc, @@ -127,9 +125,9 @@ const prepareVirtualPurseKit = zone => { utils: { /** - * Claim a payment for recovery via our `recoveryPurse`. No need for this on - * the `retain` operations (since we are just burning the payment or - * depositing it directly in the `escrowPurse`). + * Claim a payment for recovery via our `recoveryPurse`. No need for + * this on the `retain` operations (since we are just burning the + * payment or depositing it directly in the `escrowPurse`). * * @param {ERef} payment * @param {Amount} [optAmountShape] @@ -267,28 +265,31 @@ const prepareVirtualPurseKit = zone => }, ); -/** - * @param {import('@agoric/zone').Zone} zone - */ +/** @param {import('@agoric/zone').Zone} zone */ export const prepareVirtualPurse = zone => { const makeVirtualPurseKit = prepareVirtualPurseKit(zone); /** - * @param {ERef} vpc the controller that represents the - * "other side" of this purse. - * @param {{ issuer: ERef, brand: Brand, mint?: ERef, - * escrowPurse?: ERef }} params - * the contents of the issuer kit for "us". + * @param {ERef} vpc the controller that represents + * the "other side" of this purse. + * @param {{ + * issuer: ERef; + * brand: Brand; + * mint?: ERef; + * escrowPurse?: ERef; + * }} params + * the contents of the issuer kit for "us". * - * If the mint is not specified, then the virtual purse will escrow local assets - * instead of minting/burning them. That is a better option in general, but - * escrow doesn't support the case where the "other side" is also minting - * assets... our escrow purse may not have enough assets in it to redeem the - * ones that are sent from the "other side". - * @returns {Promise>>} This is not just a Purse because it plays - * fast-and-loose with the synchronous Purse interface. So, the consumer of - * this result must only interact with the virtual purse via eventual-send (to - * conceal the methods that are returning promises instead of synchronously). + * If the mint is not specified, then the virtual purse will escrow local + * assets instead of minting/burning them. That is a better option in + * general, but escrow doesn't support the case where the "other side" is + * also minting assets... our escrow purse may not have enough assets in it + * to redeem the ones that are sent from the "other side". + * @returns {Promise>>} This is not just a Purse because + * it plays fast-and-loose with the synchronous Purse interface. So, the + * consumer of this result must only interact with the virtual purse via + * eventual-send (to conceal the methods that are returning promises instead + * of synchronously). */ const makeVirtualPurse = async ( vpc, diff --git a/packages/vats/src/walletFlags.js b/packages/vats/src/walletFlags.js index 85bbed360da..d0f2778565e 100644 --- a/packages/vats/src/walletFlags.js +++ b/packages/vats/src/walletFlags.js @@ -1,7 +1,6 @@ // XXX domain of @agoric/cosmic-proto /** - * non-exhaustive list of powerFlags - * REMOTE_WALLET is currently a default. + * non-exhaustive list of powerFlags REMOTE_WALLET is currently a default. * * See also MsgProvision in golang/cosmos/proto/agoric/swingset/msgs.proto */ diff --git a/packages/vats/test/bootstrapTests/bench-vaults-performance.js b/packages/vats/test/bootstrapTests/bench-vaults-performance.js index 39aa8bb644c..2c04ae202f2 100644 --- a/packages/vats/test/bootstrapTests/bench-vaults-performance.js +++ b/packages/vats/test/bootstrapTests/bench-vaults-performance.js @@ -1,7 +1,5 @@ // @ts-check -/** - * @file Bootstrap stress test of vaults - */ +/** @file Bootstrap stress test of vaults */ import { test as anyTest } from '@agoric/zoe/tools/prepare-test-env-ava.js'; import { PerformanceObserver, performance } from 'node:perf_hooks'; import v8 from 'node:v8'; @@ -18,7 +16,9 @@ import { makeSwingsetTestKit } from './supports.js'; import { makeWalletFactoryDriver } from './drivers.js'; /** - * @type {import('ava').TestFn>>} + * @type {import('ava').TestFn< + * Awaited> + * >} */ const test = anyTest; diff --git a/packages/vats/test/bootstrapTests/drivers.js b/packages/vats/test/bootstrapTests/drivers.js index 1833fe199ff..d5ffe41bac6 100644 --- a/packages/vats/test/bootstrapTests/drivers.js +++ b/packages/vats/test/bootstrapTests/drivers.js @@ -77,7 +77,8 @@ export const makeWalletFactoryDriver = async ( return EV(walletPresence).handleBridgeAction(capData, true); }, /** - * @template {import('@agoric/smart-wallet/src/types.js').OfferMaker} M offer maker function + * @template {import('@agoric/smart-wallet/src/types.js').OfferMaker} M + * offer maker function * @param {M} makeOffer * @param {Parameters[1]} firstArg * @param {Parameters[2]} [secondArg] @@ -88,7 +89,8 @@ export const makeWalletFactoryDriver = async ( return this.executeOffer(offer); }, /** - * @template {import('@agoric/smart-wallet/src/types.js').OfferMaker} M offer maker function + * @template {import('@agoric/smart-wallet/src/types.js').OfferMaker} M + * offer maker function * @param {M} makeOffer * @param {Parameters[1]} firstArg * @param {Parameters[2]} [secondArg] @@ -99,9 +101,7 @@ export const makeWalletFactoryDriver = async ( return this.sendOffer(offer); }, - /** - * @returns {import('@agoric/smart-wallet/src/smartWallet.js').CurrentWalletRecord} - */ + /** @returns {import('@agoric/smart-wallet/src/smartWallet.js').CurrentWalletRecord} */ getCurrentWalletRecord() { const fromCapData = (...args) => Reflect.apply(marshaller.fromCapData, marshaller, args); @@ -112,9 +112,7 @@ export const makeWalletFactoryDriver = async ( ); }, - /** - * @returns {import('@agoric/smart-wallet/src/smartWallet.js').UpdateRecord} - */ + /** @returns {import('@agoric/smart-wallet/src/smartWallet.js').UpdateRecord} */ getLatestUpdateRecord() { const fromCapData = (...args) => Reflect.apply(marshaller.fromCapData, marshaller, args); @@ -326,7 +324,6 @@ export const makeGovernanceDriver = async ( return { /** - * * @param {Instance} instance * @param {object} params * @param {object} [path] diff --git a/packages/vats/test/bootstrapTests/liquidation.js b/packages/vats/test/bootstrapTests/liquidation.js index 6352b198a6c..d3cd30ba99d 100644 --- a/packages/vats/test/bootstrapTests/liquidation.js +++ b/packages/vats/test/bootstrapTests/liquidation.js @@ -71,7 +71,12 @@ export const makeLiquidationTestContext = async t => { ); console.timeLog('DefaultTestContext', 'governanceDriver'); - /** @type {Record>>} */ + /** + * @type {Record< + * string, + * Awaited> + * >} + */ const priceFeedDrivers = {}; console.timeLog('DefaultTestContext', 'priceFeedDriver'); @@ -79,7 +84,6 @@ export const makeLiquidationTestContext = async t => { console.timeEnd('DefaultTestContext'); /** - * * @param {object} opts * @param {string} opts.collateralBrandKey * @param {number} opts.managerIndex @@ -142,7 +146,7 @@ export const makeLiquidationTestContext = async t => { t.like(readLatest(`${managerPath}.governance`), { current: { DebtLimit: { value: { value: DebtLimitValue } }, - StabilityFee: { + InterestRate: { type: 'ratio', value: { numerator: { value: 1n }, denominator: { value: 100n } }, }, diff --git a/packages/vats/test/bootstrapTests/supports.js b/packages/vats/test/bootstrapTests/supports.js index 11dbf68f9a3..b01549585d5 100644 --- a/packages/vats/test/bootstrapTests/supports.js +++ b/packages/vats/test/bootstrapTests/supports.js @@ -29,7 +29,11 @@ const sink = () => {}; const trace = makeTracer('BSTSupport', false); -/** @typedef {Awaited>} BootstrapRootObject */ +/** + * @typedef {Awaited< + * ReturnType + * >} BootstrapRootObject + */ /** @type {{ [P in keyof BootstrapRootObject]: P }} */ export const bootstrapMethods = { @@ -55,9 +59,12 @@ const keysToObject = (keys, valueMaker) => { }; /** - * AVA's default t.deepEqual() is nearly unreadable for sorted arrays of strings. + * AVA's default t.deepEqual() is nearly unreadable for sorted arrays of + * strings. * - * @param {{ deepEqual: (a: unknown, b: unknown, message?: string) => void}} t + * @param {{ + * deepEqual: (a: unknown, b: unknown, message?: string) => void; + * }} t * @param {PropertyKey[]} a * @param {PropertyKey[]} b * @param {string} [message] @@ -126,9 +133,9 @@ export const makeRunUtils = (controller, log = (..._) => {}) => { /** * @type {typeof E & { - * sendOnly: (presence: unknown) => Record void>, - * vat: (name: string) => Record Promise>, - * rawBoot: Record Promise>, + * sendOnly: (presence: unknown) => Record void>; + * vat: (name: string) => Record Promise>; + * rawBoot: Record Promise>; * }} */ // @ts-expect-error cast, approximate @@ -183,7 +190,7 @@ export const getNodeTestVaultsConfig = async ( const fullPath = await importMetaResolve(specifier, import.meta.url).then( u => new URL(u).pathname, ); - const config = /** @type {SwingSetConfig & {coreProposals?: any[]}} */ ( + const config = /** @type {SwingSetConfig & { coreProposals?: any[] }} */ ( await loadSwingsetConfigFile(fullPath) ); assert(config); @@ -212,7 +219,7 @@ export const getNodeTestVaultsConfig = async ( /** * @param {object} powers - * @param {Pick} powers.childProcess + * @param {Pick} powers.childProcess * @param {typeof import('node:fs/promises')} powers.fs */ const makeProposalExtractor = ({ childProcess, fs }) => { @@ -309,11 +316,10 @@ const makeProposalExtractor = ({ childProcess, fs }) => { * For example, test accounts balances using separate wallets or test vault * factory metrics using separate collateral managers. (Or use test.serial) * - * The shutdown() function *must* be called after the test is - * complete, or else V8 will see the xsnap workers still running, and - * will never exit (leading to a timeout error). Use - * t.after.always(shutdown), because the normal t.after() hooks are - * not run if a test fails. + * The shutdown() function _must_ be called after the test is complete, or else + * V8 will see the xsnap workers still running, and will never exit (leading to + * a timeout error). Use t.after.always(shutdown), because the normal t.after() + * hooks are not run if a test fails. * * @param {import('ava').ExecutionContext} t * @param {string} bundleDir directory to write bundles and config to @@ -345,7 +351,7 @@ export const makeSwingsetTestKit = async ( * changes there will sometimes require changes here. * * @param {string} bridgeId - * @param {*} obj + * @param {any} obj */ const bridgeOutbound = (bridgeId, obj) => { switch (bridgeId) { @@ -455,9 +461,8 @@ export const makeSwingsetTestKit = async ( } }; /** - * * @param {number} n - * @param {'seconds' | 'minutes' | 'hours'| 'days'} unit + * @param {'seconds' | 'minutes' | 'hours' | 'days'} unit */ const advanceTimeBy = (n, unit) => { const multiplier = { diff --git a/packages/vats/test/bootstrapTests/test-demo-config.js b/packages/vats/test/bootstrapTests/test-demo-config.js index d9a53b5fd47..5e994039750 100644 --- a/packages/vats/test/bootstrapTests/test-demo-config.js +++ b/packages/vats/test/bootstrapTests/test-demo-config.js @@ -7,7 +7,9 @@ import { makeSwingsetTestKit, keyArrayEqual } from './supports.js'; const { keys } = Object; /** - * @type {import('ava').TestFn>>} + * @type {import('ava').TestFn< + * Awaited> + * >} */ const test = anyTest; @@ -78,15 +80,14 @@ test('sim/demo config launches Vaults as expected by loadgen', async t => { }); /** - * decentral-demo-config.json now uses boot-sim.js, - * which includes connectFaucet, which re-introduced USDC. - * That triggered a compatibility path in the loadgen that - * caused it to try and fail to run the vaults task. + * decentral-demo-config.json now uses boot-sim.js, which includes + * connectFaucet, which re-introduced USDC. That triggered a compatibility path + * in the loadgen that caused it to try and fail to run the vaults task. * work-around: rename USDC to DAI in connectFaucet. * - * TODO: move connectFaucet to a coreProposal and - * separate decentral-demo-config.json into separate - * configurations for sim-chain, loadgen. + * TODO: move connectFaucet to a coreProposal and separate + * decentral-demo-config.json into separate configurations for sim-chain, + * loadgen. */ test('demo config meets loadgen constraint: no USDC', async t => { const { EV } = t.context.runUtils; diff --git a/packages/vats/test/bootstrapTests/test-liquidation-1.js b/packages/vats/test/bootstrapTests/test-liquidation-1.js index 1af0ee503d8..23df47aaeed 100644 --- a/packages/vats/test/bootstrapTests/test-liquidation-1.js +++ b/packages/vats/test/bootstrapTests/test-liquidation-1.js @@ -1,7 +1,5 @@ // @ts-check -/** - * @file Bootstrap test of liquidation across multiple collaterals - */ +/** @file Bootstrap test of liquidation across multiple collaterals */ import { test as anyTest } from '@agoric/zoe/tools/prepare-test-env-ava.js'; import { NonNullish } from '@agoric/assert'; @@ -14,7 +12,9 @@ import { } from './liquidation.js'; /** - * @type {import('ava').TestFn>>} + * @type {import('ava').TestFn< + * Awaited> + * >} */ const test = anyTest; @@ -126,10 +126,11 @@ test.after.always(t => { // Reference: Flow 1 from https://github.com/Agoric/agoric-sdk/issues/7123 /** - * - * @param {import('ava').ExecutionContext>>} t - * @param {{collateralBrandKey: string, managerIndex: number}} case - * @param {*} _expected + * @param {import('ava').ExecutionContext< + * Awaited> + * >} t + * @param {{ collateralBrandKey: string; managerIndex: number }} case + * @param {any} _expected */ const checkFlow1 = async ( t, @@ -339,7 +340,12 @@ const checkFlow1 = async ( console.log(collateralBrandKey, 'step 10 of 10'); // continuing after now would start a new auction { - /** @type {Record} */ + /** + * @type {Record< + * string, + * import('@agoric/time/src/types.js').TimestampRecord + * >} + */ const { nextDescendingStepTime, nextStartTime } = readLatest( 'published.auction.schedule', ); diff --git a/packages/vats/test/bootstrapTests/test-liquidation-2b.js b/packages/vats/test/bootstrapTests/test-liquidation-2b.js index 4d8294c4ff4..84452a123fb 100644 --- a/packages/vats/test/bootstrapTests/test-liquidation-2b.js +++ b/packages/vats/test/bootstrapTests/test-liquidation-2b.js @@ -2,8 +2,9 @@ /** * @file Bootstrap test integration vaults with smart-wallet * - * Forks test-liquidation to test another scenario, but with a clean vault manager state. - * TODO is there a way to *reset* the vaultmanager to make the two tests run faster? + * Forks test-liquidation to test another scenario, but with a clean vault + * manager state. TODO is there a way to _reset_ the vaultmanager to make the + * two tests run faster? */ import { test as anyTest } from '@agoric/zoe/tools/prepare-test-env-ava.js'; @@ -12,7 +13,9 @@ import { Offers } from '@agoric/inter-protocol/src/clientSupport.js'; import { makeLiquidationTestContext, scale6 } from './liquidation.js'; /** - * @type {import('ava').TestFn>>} + * @type {import('ava').TestFn< + * Awaited> + * >} */ const test = anyTest; diff --git a/packages/vats/test/bootstrapTests/test-vats-restart.js b/packages/vats/test/bootstrapTests/test-vats-restart.js index 95b089d884b..d575a041df0 100644 --- a/packages/vats/test/bootstrapTests/test-vats-restart.js +++ b/packages/vats/test/bootstrapTests/test-vats-restart.js @@ -1,7 +1,5 @@ // @ts-check -/** - * @file Bootstrap test of restarting (almost) all vats - */ +/** @file Bootstrap test of restarting (almost) all vats */ import { test as anyTest } from '@agoric/zoe/tools/prepare-test-env-ava.js'; import { Fail } from '@agoric/assert'; @@ -12,7 +10,9 @@ import { makeWalletFactoryDriver } from './drivers.js'; import { makeSwingsetTestKit } from './supports.js'; /** - * @type {import('ava').TestFn>>} + * @type {import('ava').TestFn< + * Awaited> + * >} */ const test = anyTest; @@ -121,7 +121,11 @@ test.serial('run restart-vats proposal', async t => { test.serial('read metrics', async t => { const { EV } = t.context.runUtils; - /** @type {Awaited} */ + /** + * @type {Awaited< + * import('@agoric/inter-protocol/src/proposals/econ-behaviors.js').EconomyBootstrapSpace['consume']['vaultFactoryKit'] + * >} + */ const vaultFactoryKit = await EV.vat('bootstrap').consumeItem( 'vaultFactoryKit', ); diff --git a/packages/vats/test/bootstrapTests/test-vaults-integration.js b/packages/vats/test/bootstrapTests/test-vaults-integration.js index c4bf3278853..7e2bbd08ad9 100644 --- a/packages/vats/test/bootstrapTests/test-vaults-integration.js +++ b/packages/vats/test/bootstrapTests/test-vaults-integration.js @@ -1,7 +1,5 @@ // @ts-check -/** - * @file Bootstrap test integration vaults with smart-wallet - */ +/** @file Bootstrap test integration vaults with smart-wallet */ import { test as anyTest } from '@agoric/zoe/tools/prepare-test-env-ava.js'; import { Fail } from '@agoric/assert'; @@ -18,7 +16,9 @@ import { makeWalletFactoryDriver } from './drivers.js'; import { makeSwingsetTestKit } from './supports.js'; /** - * @type {import('ava').TestFn>>} + * @type {import('ava').TestFn< + * Awaited> + * >} */ const test = anyTest; diff --git a/packages/vats/test/bootstrapTests/test-vaults-upgrade.js b/packages/vats/test/bootstrapTests/test-vaults-upgrade.js index b692992eadb..bd1584d0568 100644 --- a/packages/vats/test/bootstrapTests/test-vaults-upgrade.js +++ b/packages/vats/test/bootstrapTests/test-vaults-upgrade.js @@ -1,9 +1,9 @@ // @ts-check /** - * @file Bootstrap test integration vaults with smart-wallet. - * The tests in this file are NOT independent; a single `test.before()` - * handler creates shared state with `makeSwingsetTestKit` and each - * test is run serially and assumes changes from earlier tests. + * @file Bootstrap test integration vaults with smart-wallet. The tests in this + * file are NOT independent; a single `test.before()` handler creates shared + * state with `makeSwingsetTestKit` and each test is run serially and assumes + * changes from earlier tests. */ import { test as anyTest } from '@agoric/zoe/tools/prepare-test-env-ava.js'; @@ -21,8 +21,8 @@ const collateralBrandKey = 'ATOM'; /** * @param {import('ava').ExecutionContext} t * @param {object} [options] - * @param {number} [options.incarnation=1] - * @param {boolean} [options.logTiming=true] + * @param {number} [options.incarnation] + * @param {boolean} [options.logTiming] * @param {import('@agoric/internal/src/storage-test-utils.js').FakeStorageKit} [options.storage] */ const makeDefaultTestContext = async ( @@ -77,10 +77,12 @@ const makeDefaultTestContext = async ( }; /** - * Shared context can be updated by re-bootstrapping, and is placed one - * property deep so such changes propagate to later tests. + * Shared context can be updated by re-bootstrapping, and is placed one property + * deep so such changes propagate to later tests. * - * @type {import('ava').TestFn<{shared: Awaited>}>} + * @type {import('ava').TestFn<{ + * shared: Awaited>; + * }>} */ const test = anyTest; test.before(async t => { @@ -287,7 +289,11 @@ test.serial('open vault', async t => { test.serial('restart vaultFactory', async t => { const { runUtils, readCollateralMetrics } = t.context.shared; const { EV } = runUtils; - /** @type {Awaited} */ + /** + * @type {Awaited< + * import('@agoric/inter-protocol/src/proposals/econ-behaviors.js').EconomyBootstrapSpace['consume']['vaultFactoryKit'] + * >} + */ const vaultFactoryKit = await EV.vat('bootstrap').consumeItem( 'vaultFactoryKit', ); @@ -314,7 +320,11 @@ test.serial('restart vaultFactory', async t => { test.serial('restart contractGovernor', async t => { const { EV } = t.context.shared.runUtils; - /** @type {Awaited} */ + /** + * @type {Awaited< + * import('@agoric/inter-protocol/src/proposals/econ-behaviors.js').EconomyBootstrapSpace['consume']['vaultFactoryKit'] + * >} + */ const vaultFactoryKit = await EV.vat('bootstrap').consumeItem( 'vaultFactoryKit', ); @@ -486,7 +496,7 @@ test.serial( /** @type {MapStore} */ const powerStore = await EV.vat('bootstrap').consumeItem('powerStore'); - /** @type {(n: string) => Promise>} */ + /** @type {(n: string) => Promise<[any, any][]>} */ const getStoreSnapshot = async name => EV.vat('bootstrap').snapshotStore(await EV(powerStore).get(name)); diff --git a/packages/vats/test/setup-vat-data.js b/packages/vats/test/setup-vat-data.js deleted file mode 100644 index 87aad92444f..00000000000 --- a/packages/vats/test/setup-vat-data.js +++ /dev/null @@ -1,28 +0,0 @@ -/* global globalThis */ -// This file produces the globalThis.VatData property outside of SwingSet so -// that it can be used by '@agoric/vat-data' (which only *consumes* -// `globalThis.VatData`) in code under test. -import { makeFakeVirtualStuff } from '@agoric/swingset-liveslots/tools/fakeVirtualSupport.js'; - -export const fakeVomKit = makeFakeVirtualStuff({ - relaxDurabilityRules: false, -}); - -globalThis.WeakMap = fakeVomKit.vom.VirtualObjectAwareWeakMap; -globalThis.WeakSet = fakeVomKit.vom.VirtualObjectAwareWeakSet; - -const { vom, wpm: watchedPromiseManager, cm: collectionManager } = fakeVomKit; -globalThis.VatData = harden({ - defineKind: vom.defineKind, - defineKindMulti: vom.defineKindMulti, - defineDurableKind: vom.defineDurableKind, - defineDurableKindMulti: vom.defineDurableKindMulti, - makeKindHandle: vom.makeKindHandle, - canBeDurable: vom.canBeDurable, - providePromiseWatcher: watchedPromiseManager.providePromiseWatcher, - watchPromise: watchedPromiseManager.watchPromise, - makeScalarBigMapStore: collectionManager.makeScalarBigMapStore, - makeScalarBigWeakMapStore: collectionManager.makeScalarBigWeakMapStore, - makeScalarBigSetStore: collectionManager.makeScalarBigSetStore, - makeScalarBigWeakSetStore: collectionManager.makeScalarBigWeakSetStore, -}); diff --git a/packages/vats/test/test-board-utils.js b/packages/vats/test/test-board-utils.js index f0782c2de32..2de38056dac 100644 --- a/packages/vats/test/test-board-utils.js +++ b/packages/vats/test/test-board-utils.js @@ -14,7 +14,7 @@ import { const streamCellTextFromArray = values => JSON.stringify({ blockHeight: '0', values }); -/** @type {Array<[string, any]>} */ +/** @type {[string, any][]} */ const agoricNamesDataEntriesFixture = [ [ 'published.agoricNames.issuer', diff --git a/packages/vats/test/test-boot-config.js b/packages/vats/test/test-boot-config.js index 9897fab2001..2120e82436d 100644 --- a/packages/vats/test/test-boot-config.js +++ b/packages/vats/test/test-boot-config.js @@ -10,7 +10,11 @@ import { loadSwingsetConfigFile, shape as ssShape } from '@agoric/swingset-vat'; import { provideBundleCache } from '@agoric/swingset-vat/tools/bundleTool.js'; import { extractCoreProposalBundles } from '@agoric/deploy-script-support/src/extract-proposal.js'; -/** @type {import('ava').TestFn>>} */ +/** + * @type {import('ava').TestFn< + * Awaited> + * >} + */ const test = anyTest; const PROD_CONFIG_FILES = [ @@ -40,7 +44,7 @@ const NON_UPGRADEABLE_VATS = [ export const pspawn = (bin, { spawn }) => (args = [], opts = {}) => { - /** @type {ReturnType | undefined } */ + /** @type {ReturnType | undefined} */ let child; const exit = new Promise((resolve, reject) => { // console.debug('spawn', bin, args, { cwd: makefileDir, ...opts }); diff --git a/packages/vats/test/test-bootstrapPayment.js b/packages/vats/test/test-bootstrapPayment.js index 6ba494edd88..af74b1b7d01 100644 --- a/packages/vats/test/test-bootstrapPayment.js +++ b/packages/vats/test/test-bootstrapPayment.js @@ -12,14 +12,21 @@ import { claim } from '@agoric/ertp/src/legacy-payment-helpers.js'; import centralSupplyBundle from '../bundles/bundle-centralSupply.js'; import { feeIssuerConfig } from '../src/core/utils.js'; -/** @template T @typedef {import('@agoric/zoe/src/zoeService/utils').Installation} Installation */ +/** + * @template T @typedef + * {import('@agoric/zoe/src/zoeService/utils').Installation} + * Installation + */ /** * @typedef {import('ava').ExecutionContext<{ - * zoe: ZoeService, - * feeMintAccess: FeeMintAccess, - * issuer: Record<'IST', Issuer>, - * brand: Record<'IST', Brand>, - * installation: Record<'centralSupply', Installation>, + * zoe: ZoeService; + * feeMintAccess: FeeMintAccess; + * issuer: Record<'IST', Issuer>; + * brand: Record<'IST', Brand>; + * installation: Record< + * 'centralSupply', + * Installation + * >; * }>} CentralSupplyTestContext */ diff --git a/packages/vats/test/test-clientBundle.js b/packages/vats/test/test-clientBundle.js index f0202fef315..5fe9b6ffe85 100644 --- a/packages/vats/test/test-clientBundle.js +++ b/packages/vats/test/test-clientBundle.js @@ -5,7 +5,7 @@ import { setUpZoeForTest } from '@agoric/zoe/tools/setup-zoe.js'; import { makeIssuerKit } from '@agoric/ertp'; import { makeScalarBigMapStore } from '@agoric/vat-data'; -import { heapZone } from '@agoric/zone'; +import { makeHeapZone } from '@agoric/zone'; import { Stake } from '@agoric/inter-protocol/src/tokens.js'; import { connectFaucet, showAmount } from '../src/core/demoIssuers.js'; import { setupClientManager } from '../src/core/chain-behaviors.js'; @@ -26,16 +26,18 @@ import { makeNameHubKit, prepareMixinMyAddress } from '../src/nameHub.js'; /** * @typedef {{ - * (n: 'board'): BoardVat - * (n: 'mint'): MintsVat + * (n: 'board'): BoardVat; + * (n: 'mint'): MintsVat; * }} LoadVat */ test('connectFaucet produces payments', async t => { const space = /** @type {any} */ (makePromiseSpace(t.log)); - const { consume, produce } = - /** @type { BootstrapPowers & DemoFaucetPowers & { consume: { loadVat: LoadVat, loadCriticalVat: LoadVat }} } */ ( - space - ); + const { consume, produce } = /** + * @type {BootstrapPowers & + * DemoFaucetPowers & { + * consume: { loadVat: LoadVat; loadCriticalVat: LoadVat }; + * }} + */ (space); const { agoricNames, agoricNamesAdmin, spaces } = await makeAgoricNamesAccess(); produce.agoricNames.resolve(agoricNames); @@ -129,7 +131,7 @@ test('connectFaucet produces payments', async t => { // t.deepEqual(Object.keys(userBundle), '@@todo'); - /** @type { import('../src/core/demoIssuers.js').UserPaymentRecord[] } */ + /** @type {import('../src/core/demoIssuers.js').UserPaymentRecord[]} */ const pmts = await E(userBundle.faucet).tapFaucet(); const detail = await Promise.all( @@ -148,7 +150,7 @@ test('connectFaucet produces payments', async t => { test('myAddressNameAdmin mixin', async t => { const addr = 'agoric123'; const kit = makeNameHubKit(); - const mixinMyAddress = prepareMixinMyAddress(heapZone); + const mixinMyAddress = prepareMixinMyAddress(makeHeapZone()); const my = mixinMyAddress(kit.nameAdmin, addr); t.is(my.getMyAddress(), addr); }); @@ -158,7 +160,7 @@ test('namesByAddressAdmin provideChild', async t => { const baggage = makeScalarBigMapStore('fake baggage', { durable: true }); const provisioning = buildProvisioningRoot(undefined, undefined, baggage); const { namesByAddressAdmin } = await E(provisioning).getNamesByAddressKit(); - /** @type {{ nameAdmin: import('../src/types.js').MyAddressNameAdmin}} */ + /** @type {{ nameAdmin: import('../src/types.js').MyAddressNameAdmin }} */ // @ts-expect-error XXX why doesn't the provideChild override work? const { nameAdmin } = E.get(E(namesByAddressAdmin).provideChild(addr)); t.is(await E(nameAdmin).getMyAddress(), addr); diff --git a/packages/vats/test/test-demoAMM.js b/packages/vats/test/test-demoAMM.js index d8bdc6dfdba..1d9b3fb4303 100644 --- a/packages/vats/test/test-demoAMM.js +++ b/packages/vats/test/test-demoAMM.js @@ -13,7 +13,7 @@ import { splitAllCentralPayments, } from '../src/core/demoIssuers.js'; -/** @param { bigint } n */ +/** @param {bigint} n */ const showIST = n => `${decimal(n, 6)} IST`; // TODO: prune showIST formatting utility @@ -63,8 +63,8 @@ test('poolRates: spot check WETH', t => { t.is(decimal(initialValue, DecimalPlaces.WETH), '1_000_000'); t.is((AMMDemoState.WETH.config || {}).collateralValue, 1_000_000n); - t.is(showBrand(rates.stabilityFee.numerator.brand), Stable.symbol); - t.is(showAmount(rates.stabilityFee.numerator), '0.00025 IST'); + t.is(showBrand(rates.interestRate.numerator.brand), Stable.symbol); + t.is(showAmount(rates.interestRate.numerator), '0.00025 IST'); const showRatio = ({ numerator, denominator }) => numerator.brand === denominator.brand @@ -79,7 +79,7 @@ test('poolRates: spot check WETH', t => { initialPrice: '3_286.01 IST / 1 WETH', initialMargin: '1.5', liquidationMargin: '1.25', - stabilityFee: '0.025', + interestRate: '0.025', mintFee: '0.0001', }; Object.entries(expected).forEach(([prop, val]) => diff --git a/packages/vats/test/test-provisionPool.js b/packages/vats/test/test-provisionPool.js index 59e969ecf5a..69643539edb 100644 --- a/packages/vats/test/test-provisionPool.js +++ b/packages/vats/test/test-provisionPool.js @@ -27,7 +27,9 @@ import { makeFakeBankKit } from '../tools/bank-utils.js'; /** * @typedef {import('../src/vat-bank.js').Bank} Bank + * * @typedef {import('@agoric/smart-wallet/src/smartWallet.js').SmartWallet} SmartWallet + * * @typedef {import('@agoric/smart-wallet/src/walletFactory.js').WalletReviver} WalletReviver */ @@ -61,7 +63,7 @@ const makeTestContext = async () => { const committeeInstall = await E(zoe).install(committeeBundle); const psmInstall = await E(zoe).install(psmBundle); const centralSupply = await E(zoe).install(centralSupplyBundle); - /** @type {Installation} */ + /** @type {Installation} */ const policyInstall = await E(zoe).install(policyBundle); const mintLimit = AmountMath.make(mintedBrand, MINT_LIMIT); @@ -268,10 +270,9 @@ test('provisionPool trades provided assets for IST', async t => { }); /** - * This is a bit of a short-cut; rather than scaffold - * everything needed to make a walletFactory, we factored - * out the part that had a bug as `publishDepositFacet` - * and we make a mock walletFactory that uses it. + * This is a bit of a short-cut; rather than scaffold everything needed to make + * a walletFactory, we factored out the part that had a bug as + * `publishDepositFacet` and we make a mock walletFactory that uses it. * * @param {string[]} addresses */ diff --git a/packages/vats/test/test-vat-bank-integration.js b/packages/vats/test/test-vat-bank-integration.js index ed83b39a561..693e32d2c77 100644 --- a/packages/vats/test/test-vat-bank-integration.js +++ b/packages/vats/test/test-vat-bank-integration.js @@ -7,7 +7,7 @@ import { E } from '@endo/far'; import { makePromiseKit } from '@endo/promise-kit'; import { makeZoeKitForTest } from '@agoric/zoe/tools/setup-zoe.js'; import { observeIteration } from '@agoric/notifier'; -import { heapZone } from '@agoric/zone'; +import { makeHeapZone } from '@agoric/zone'; import { buildRootObject } from '../src/vat-bank.js'; import { mintInitialSupply, @@ -22,11 +22,12 @@ import { makePopulatedFakeVatAdmin } from '../tools/boot-test-utils.js'; test('mintInitialSupply, addBankAssets bootstrap actions', async t => { // Supply bootstrap prerequisites. - const space = /** @type { any } */ (makePromiseSpace(t.log)); - const { produce, consume } = - /** @type { BootstrapPowers & { consume: { loadCriticalVat: VatLoader }}} */ ( - space - ); + const space = /** @type {any} */ (makePromiseSpace(t.log)); + const { produce, consume } = /** + * @type {BootstrapPowers & { + * consume: { loadCriticalVat: VatLoader }; + * }} + */ (space); const { agoricNames, agoricNamesAdmin, spaces } = await makeAgoricNamesAccess(); produce.agoricNames.resolve(agoricNames); @@ -63,13 +64,13 @@ test('mintInitialSupply, addBankAssets bootstrap actions', async t => { PROVISIONER_INDEX: 1, }, }, - zone: heapZone, + zone: makeHeapZone(), consume, produce, - devices: /** @type { any } */ ({}), - vats: /** @type { any } */ ({}), - vatPowers: /** @type { any } */ ({}), - runBehaviors: /** @type { any } */ ({}), + devices: /** @type {any} */ ({}), + vats: /** @type {any} */ ({}), + vatPowers: /** @type {any} */ ({}), + runBehaviors: /** @type {any} */ ({}), modules: {}, ...spaces, }); @@ -96,7 +97,7 @@ test('mintInitialSupply, addBankAssets bootstrap actions', async t => { produce.loadCriticalVat.resolve(loadCriticalVat); produce.bridgeManager.resolve(undefined); - const zone = heapZone; + const zone = makeHeapZone(); await Promise.all([ produceDiagnostics({ produce }), produceStartUpgradable({ zone, consume, produce, ...spaces }), diff --git a/packages/vats/test/test-vat-bank.js b/packages/vats/test/test-vat-bank.js index 8a1e7f1abf7..9179a288593 100644 --- a/packages/vats/test/test-vat-bank.js +++ b/packages/vats/test/test-vat-bank.js @@ -1,16 +1,15 @@ // @ts-check import { test } from '@agoric/swingset-vat/tools/prepare-test-env-ava.js'; - -// eslint-disable-next-line import/order -import { fakeVomKit } from './setup-vat-data.js'; +import { reincarnate } from '@agoric/swingset-vat/tools/setup-vat-data.js'; import { E } from '@endo/far'; import { AmountMath, makeIssuerKit, AssetKind } from '@agoric/ertp'; import { makeDurableZone } from '@agoric/zone/durable.js'; -import { heapZone } from '@agoric/zone'; +import { makeHeapZone } from '@agoric/zone'; import { subscribeEach } from '@agoric/notifier'; import { buildRootObject } from '../src/vat-bank.js'; +const { fakeVomKit } = reincarnate({ relaxDurabilityRules: false }); const provideBaggage = key => { const root = fakeVomKit.cm.provideBaggage(); const zone = makeDurableZone(root); @@ -20,7 +19,7 @@ const provideBaggage = key => { test('provideAssetSubscription - MapStore insertion order preserved', async t => { const zones = { durableZone: makeDurableZone(provideBaggage('key order')), - heapZone, + heapZone: makeHeapZone(), }; for (const [name, zone] of Object.entries(zones)) { const ids = harden(['a', 'b', 'c', 'd', 'e']); @@ -148,7 +147,14 @@ test('communication', async t => { message: /not found/, }); - /** @type {undefined | IteratorResult<{brand: Brand, issuer: ERef, proposedName: string}>} */ + /** + * @type {| undefined + * | IteratorResult<{ + * brand: Brand; + * issuer: ERef; + * proposedName: string; + * }>} + */ let itResult; const p = it.next().then(r => (itResult = r)); t.is(itResult, undefined); diff --git a/packages/vats/test/test-vpurse.js b/packages/vats/test/test-vpurse.js index b60e638c614..09a9b1ea775 100644 --- a/packages/vats/test/test-vpurse.js +++ b/packages/vats/test/test-vpurse.js @@ -1,8 +1,6 @@ // @ts-check import { test as rawTest } from '@agoric/swingset-vat/tools/prepare-test-env-ava.js'; - -// eslint-disable-next-line import/order -import { fakeVomKit } from './setup-vat-data.js'; +import { reincarnate } from '@agoric/swingset-vat/tools/setup-vat-data.js'; import { E } from '@endo/far'; import { AmountMath, makeIssuerKit } from '@agoric/ertp'; @@ -15,6 +13,7 @@ import { prepareVirtualPurse } from '../src/virtual-purse.js'; /** @type {import('ava').TestFn>} */ const test = rawTest; +const { fakeVomKit } = reincarnate({ relaxDurabilityRules: false }); const makeTestContext = () => { return { baggage: fakeVomKit.cm.provideBaggage() }; }; @@ -24,7 +23,7 @@ test.before(t => { }); /** - * @param {*} t + * @param {any} t * @param {import('@agoric/zone').Zone} zone * @param {bigint} [escrowValue] */ @@ -43,9 +42,7 @@ const setup = (t, zone, escrowValue = 0n) => { /** @type {Amount} */ let expectedAmount; - /** - * @param {Amount} amt - */ + /** @param {Amount} amt */ const expected = harden({ /** @param {Amount} amt */ pullAmount(amt) { diff --git a/packages/vats/test/upgrading/test-upgrade-contracts.js b/packages/vats/test/upgrading/test-upgrade-contracts.js index 554c08f26a7..cec46292f79 100644 --- a/packages/vats/test/upgrading/test-upgrade-contracts.js +++ b/packages/vats/test/upgrading/test-upgrade-contracts.js @@ -1,20 +1,23 @@ /** - * @file - * cribbed from packages/zoe/test/swingsetTests/upgradeCoveredCall/test-coveredCall-service-upgrade.js + * @file cribbed from + * packages/zoe/test/swingsetTests/upgradeCoveredCall/test-coveredCall-service-upgrade.js */ import { resolve as importMetaResolve } from 'import-meta-resolve'; import { test as anyTest } from '@agoric/swingset-vat/tools/prepare-test-env-ava.js'; import { buildVatController } from '@agoric/swingset-vat'; -/** @type {import('ava').TestFn>>} */ +/** + * @type {import('ava').TestFn< + * Awaited> + * >} + */ const test = anyTest; /** - * WARNING: uses ambient authority - * of import.meta.url + * WARNING: uses ambient authority of import.meta.url * - * We aim to use ambient authority only in test.before(); - * splitting out makeTestContext() lets us type t.context. + * We aim to use ambient authority only in test.before(); splitting out + * makeTestContext() lets us type t.context. */ const makeTestContext = async () => { const bfile = name => new URL(name, import.meta.url).pathname; diff --git a/packages/vats/test/upgrading/test-upgrade-vats.js b/packages/vats/test/upgrading/test-upgrade-vats.js index b9e3f574457..39b8130bed3 100644 --- a/packages/vats/test/upgrading/test-upgrade-vats.js +++ b/packages/vats/test/upgrading/test-upgrade-vats.js @@ -5,7 +5,11 @@ import { BridgeId } from '@agoric/internal'; import { buildVatController } from '@agoric/swingset-vat'; import { makeRunUtils } from '../bootstrapTests/supports.js'; -/** @type {import('ava').TestFn>>} */ +/** + * @type {import('ava').TestFn< + * Awaited> + * >} + */ const test = anyTest; const { Fail } = assert; @@ -21,10 +25,7 @@ const makeCallOutbound = t => (srcID, obj) => { return obj; }; -/** - * NOTE: limit ambient authority such as import.meta.url - * to test.before() - */ +/** NOTE: limit ambient authority such as import.meta.url to test.before() */ test.before(async t => { t.context = await makeTestContext(import.meta.url); }); diff --git a/packages/vats/tools/authorityViz.js b/packages/vats/tools/authorityViz.js index dec0c1f2789..9e31fdcc188 100755 --- a/packages/vats/tools/authorityViz.js +++ b/packages/vats/tools/authorityViz.js @@ -25,13 +25,14 @@ const styles = { /** * @param {Set} nodes - * @param {Map>} neighbors - * @yields { string } + * @param {Map>} neighbors + * @yields {string} + * * @typedef {{ - * id: string, - * cluster?: string, - * label: string, - * style?: string, + * id: string; + * cluster?: string; + * label: string; + * style?: string; * }} GraphNode */ function* fmtGraph(nodes, neighbors) { @@ -65,24 +66,32 @@ function* fmtGraph(nodes, neighbors) { /** * @param {Record} manifest - * @typedef { true | { - * vatParameters?: Record, - * vatPowers?: Record - * vats?: Record - * devices?: Record - * home?: PowerSpace, - * issuer?: PowerSpace, - * brand?: PowerSpace, - * oracleBrand?: PowerSpace, - * installation?: PowerSpace, - * instance?: PowerSpace, - * } & PowerSpace } Permit - * @typedef {{produce?: Record, consume?: Record}} PowerSpace - * @typedef { boolean | VatName } Status - * @typedef { string } VatName + * + * @typedef {| true + * | ({ + * vatParameters?: Record; + * vatPowers?: Record; + * vats?: Record; + * devices?: Record; + * home?: PowerSpace; + * issuer?: PowerSpace; + * brand?: PowerSpace; + * oracleBrand?: PowerSpace; + * installation?: PowerSpace; + * instance?: PowerSpace; + * } & PowerSpace)} Permit + * + * @typedef {{ + * produce?: Record; + * consume?: Record; + * }} PowerSpace + * + * @typedef {boolean | VatName} Status + * + * @typedef {string} VatName */ const manifest2graph = manifest => { - /** @type { Set } */ + /** @type {Set} */ const nodes = new Set(); const neighbors = new Map(); @@ -103,7 +112,7 @@ const manifest2graph = manifest => { * @param {string} src * @param {string} ty * @param {Permit} item - * @param {boolean} [reverse=false] + * @param {boolean} [reverse] */ const level1 = (src, ty, item, reverse = false) => { if (!item) return; @@ -212,9 +221,9 @@ const loadConfig = async (specifier, { resolve, readFile }) => { * @param {typeof import('process').stdout} io.stdout * @param {typeof import('fs/promises')} io.fsp * @param {{ - * resolve: Resolver, - * url: string, - * load: (specifier: string) => Promise>, + * resolve: Resolver; + * url: string; + * load: (specifier: string) => Promise>; * }} io.meta * * @typedef {(specifier: string, parent: string) => Promise} Resolver diff --git a/packages/vats/tools/bank-utils.js b/packages/vats/tools/bank-utils.js index 33151f8fd2e..84b3cf70562 100644 --- a/packages/vats/tools/bank-utils.js +++ b/packages/vats/tools/bank-utils.js @@ -4,13 +4,16 @@ import { makeScalarMapStore } from '@agoric/vat-data'; import { E } from '@endo/far'; import { Far } from '@endo/marshal'; -/** - * @param {Array>} issuerKits - */ +/** @param {Pick[]} issuerKits */ export const makeFakeBankKit = issuerKits => { /** @type {MapStore>} */ const issuers = makeScalarMapStore(); - /** @type {MapStore>} */ + /** + * @type {MapStore< + * Brand, + * ERef + * >} + */ const purses = makeScalarMapStore(); // XXX setup purses without publishing @@ -20,7 +23,11 @@ export const makeFakeBankKit = issuerKits => { purses.init(kit.brand, E(kit.issuer).makeEmptyPurse()); }); - /** @type {SubscriptionRecord} */ + /** + * @type {SubscriptionRecord< + * import('../src/vat-bank.js').AssetDescriptor + * >} + */ const { subscription, publication } = makeSubscriptionKit(); /** diff --git a/packages/vats/tools/board-utils.js b/packages/vats/tools/board-utils.js index 8c22af16f64..7dda3a643a3 100644 --- a/packages/vats/tools/board-utils.js +++ b/packages/vats/tools/board-utils.js @@ -1,20 +1,23 @@ // @ts-check /** * @typedef {{ - * brand: import('@agoric/internal/src/marshal.js').BoardRemote, - * denom: string, - * displayInfo: DisplayInfo, - * issuer: import('@agoric/internal/src/marshal.js').BoardRemote, - * issuerName: string, - * proposedName: string, + * brand: import('@agoric/internal/src/marshal.js').BoardRemote; + * denom: string; + * displayInfo: DisplayInfo; + * issuer: import('@agoric/internal/src/marshal.js').BoardRemote; + * issuerName: string; + * proposedName: string; * }} VBankAssetDetail */ /** * @typedef {{ - * brand: Record, - * instance: Record, - * vbankAsset: Record, - * reverse: Record, + * brand: Record< + * string, + * import('@agoric/internal/src/marshal.js').BoardRemote + * >; + * instance: Record; + * vbankAsset: Record; + * reverse: Record; * }} AgoricNamesRemotes */ @@ -29,7 +32,7 @@ import { prepareBoardKit } from '../src/lib-board.js'; export * from '@agoric/internal/src/marshal.js'; /** - * @param {import("@agoric/internal/src/storage-test-utils.js").FakeStorageKit} fakeStorageKit + * @param {import('@agoric/internal/src/storage-test-utils.js').FakeStorageKit} fakeStorageKit * @returns {AgoricNamesRemotes} */ export const makeAgoricNamesRemotesFromFakeStorage = fakeStorageKit => { @@ -41,7 +44,12 @@ export const makeAgoricNamesRemotesFromFakeStorage = fakeStorageKit => { const { fromCapData } = makeMarshal(undefined, slotToBoardRemote); const reverse = {}; const entries = ['brand', 'instance'].map(kind => { - /** @type {Array<[string, import('@agoric/vats/tools/board-utils.js').BoardRemote]>} */ + /** + * @type {[ + * string, + * import('@agoric/vats/tools/board-utils.js').BoardRemote, + * ][]} + */ const parts = unmarshalFromVstorage( data, `published.agoricNames.${kind}`, @@ -69,8 +77,8 @@ export const makeAgoricNamesRemotesFromFakeStorage = fakeStorageKit => { harden(makeAgoricNamesRemotesFromFakeStorage); /** - * Make a board that uses durable storage, but with fake baggage which will fail upgrade. - * Suitable only for use in tests. + * Make a board that uses durable storage, but with fake baggage which will fail + * upgrade. Suitable only for use in tests. * * @param {bigint | number} [initSequence] * @param {object} [options] diff --git a/packages/vats/tools/boot-test-utils.js b/packages/vats/tools/boot-test-utils.js index 9e7991c14ef..35f63428f88 100644 --- a/packages/vats/tools/boot-test-utils.js +++ b/packages/vats/tools/boot-test-utils.js @@ -41,16 +41,16 @@ export const mockDProxy = d => d; export const makeMock = log => harden({ devices: { - command: /** @type { any } */ ({ registerInboundHandler: noop }), - mailbox: /** @type { any } */ ({ + command: /** @type {any} */ ({ registerInboundHandler: noop }), + mailbox: /** @type {any} */ ({ registerInboundHandler: noop, }), - timer: /** @type { any } */ ({}), - plugin: /** @type { any } */ ({ registerReceiver: noop }), + timer: /** @type {any} */ ({}), + plugin: /** @type {any} */ ({ registerReceiver: noop }), ...devices, }, vats: { - vattp: /** @type { any } */ ( + vattp: /** @type {any} */ ( Far('vattp', { registerMailboxDevice: noop, addRemote: () => harden({}), @@ -142,7 +142,7 @@ export const makePopulatedFakeVatAdmin = () => { const criticalVatKey = vatAdminState.getCriticalVatKey(); const getCriticalVatKey = () => criticalVatKey; const createVatAdminService = () => vatAdminService; - /** @type { any } */ + /** @type {any} */ const vatAdminRoot = { getCriticalVatKey, createVatAdminService }; return { vatAdminService, vatAdminRoot }; }; @@ -156,9 +156,7 @@ export const mockSwingsetVats = mock => { return vats; }; -/** - * @param {(msg: string) => void} log - */ +/** @param {(msg: string) => void} log */ export const mockPsmBootstrapArgs = log => { const mock = makeMock(log); const vats = mockSwingsetVats(mock); diff --git a/packages/wallet/api/package.json b/packages/wallet/api/package.json index 794963d1389..5b48d9a0466 100644 --- a/packages/wallet/api/package.json +++ b/packages/wallet/api/package.json @@ -15,9 +15,9 @@ }, "devDependencies": { "@agoric/vats": "^0.15.1", - "@endo/bundle-source": "^2.5.1", - "@endo/far": "^0.2.18", - "@endo/init": "^0.5.56", + "@endo/bundle-source": "^2.5.2", + "@endo/far": "^0.2.19", + "@endo/init": "^0.5.57", "ava": "^5.3.0" }, "dependencies": { @@ -32,10 +32,10 @@ "@agoric/vat-data": "^0.5.2", "@agoric/zoe": "^0.26.2", "@agoric/zone": "^0.2.2", - "@endo/eventual-send": "^0.17.2", - "@endo/marshal": "^0.8.5", - "@endo/nat": "^4.1.27", - "@endo/promise-kit": "^0.2.56", + "@endo/eventual-send": "^0.17.3", + "@endo/marshal": "^0.8.6", + "@endo/nat": "^4.1.28", + "@endo/promise-kit": "^0.2.57", "import-meta-resolve": "^2.2.1" }, "keywords": [], diff --git a/packages/wallet/api/test/test-getPursesNotifier.js b/packages/wallet/api/test/test-getPursesNotifier.js index 8b0758e30a1..05c4d0035e2 100644 --- a/packages/wallet/api/test/test-getPursesNotifier.js +++ b/packages/wallet/api/test/test-getPursesNotifier.js @@ -4,7 +4,7 @@ import { test } from '@agoric/zoe/tools/prepare-test-env-ava.js'; import { makeIssuerKit } from '@agoric/ertp'; import { makeZoeForTest } from '@agoric/zoe/tools/setup-zoe.js'; import { makeFakeBoard } from '@agoric/vats/tools/board-utils.js'; -import { heapZone } from '@agoric/zone'; +import { makeHeapZone } from '@agoric/zone'; import { makeNameHubKit, prepareMixinMyAddress, @@ -13,7 +13,7 @@ import { makeWalletRoot } from '../src/lib-wallet.js'; import '../src/types.js'; -const mixinMyAddress = prepareMixinMyAddress(heapZone); +const mixinMyAddress = prepareMixinMyAddress(makeHeapZone()); function makeFakeMyAddressNameAdmin() { const { nameAdmin } = makeNameHubKit(); diff --git a/packages/wallet/api/test/test-lib-wallet.js b/packages/wallet/api/test/test-lib-wallet.js index be74d96d186..7bf3569a0ce 100644 --- a/packages/wallet/api/test/test-lib-wallet.js +++ b/packages/wallet/api/test/test-lib-wallet.js @@ -17,14 +17,14 @@ import { prepareMixinMyAddress, } from '@agoric/vats/src/nameHub.js'; import { resolve as importMetaResolve } from 'import-meta-resolve'; -import { heapZone } from '@agoric/zone'; +import { makeHeapZone } from '@agoric/zone'; import { makeWalletRoot } from '../src/lib-wallet.js'; import '../src/types.js'; const ZOE_INVITE_PURSE_PETNAME = 'Default Zoe invite purse'; -const mixinMyAddress = prepareMixinMyAddress(heapZone); +const mixinMyAddress = prepareMixinMyAddress(makeHeapZone()); function makeFakeMyAddressNameAdmin() { const { nameAdmin } = makeNameHubKit(); diff --git a/packages/xsnap-lockdown/jsconfig.json b/packages/xsnap-lockdown/jsconfig.json index b7cc9a19a3b..392fe1ed9f5 100644 --- a/packages/xsnap-lockdown/jsconfig.json +++ b/packages/xsnap-lockdown/jsconfig.json @@ -4,6 +4,7 @@ "include": [ "*.js", "lib/**/*.js", + "scripts/**/*.js", "src/**/*.d.ts", "src/**/*.js", "test/**/*.js", diff --git a/packages/xsnap-lockdown/package.json b/packages/xsnap-lockdown/package.json index 53eaa1103de..1a2abce1bfe 100644 --- a/packages/xsnap-lockdown/package.json +++ b/packages/xsnap-lockdown/package.json @@ -20,8 +20,8 @@ "test:xs": "exit 0" }, "devDependencies": { - "@endo/bundle-source": "^2.5.1", - "@endo/init": "^0.5.56", + "@endo/bundle-source": "^2.5.2", + "@endo/init": "^0.5.57", "ava": "^5.3.0", "c8": "^7.13.0", "rollup": "^2.58.0", diff --git a/packages/xsnap-lockdown/scripts/build-bundle.js b/packages/xsnap-lockdown/scripts/build-bundle.js index b89a992c03d..69ff2069efe 100644 --- a/packages/xsnap-lockdown/scripts/build-bundle.js +++ b/packages/xsnap-lockdown/scripts/build-bundle.js @@ -8,7 +8,7 @@ import process from 'process'; import bundleSource from '@endo/bundle-source'; import { bundlePaths, entryPaths, hashPaths } from '../src/paths.js'; -/** @param {Uint8Array} bytes */ +/** @param {Uint8Array | string} bytes */ const computeSha256 = bytes => { const hash = crypto.createHash('sha256'); hash.update(bytes); diff --git a/packages/xsnap/api.js b/packages/xsnap/api.js index 771a8391cda..ca64dcfa670 100644 --- a/packages/xsnap/api.js +++ b/packages/xsnap/api.js @@ -7,7 +7,7 @@ * Also, update golden master test/test-xs-perf.js to reflect new meter * version. */ -export const METER_TYPE = 'xs-meter-20'; +export const METER_TYPE = 'xs-meter-21'; export const ExitCode = { E_UNKNOWN_ERROR: -1, diff --git a/packages/xsnap/package.json b/packages/xsnap/package.json index 0dcc941c330..0d54c695580 100644 --- a/packages/xsnap/package.json +++ b/packages/xsnap/package.json @@ -30,18 +30,19 @@ "@agoric/assert": "^0.6.0", "@agoric/internal": "^0.3.2", "@agoric/xsnap-lockdown": "^0.14.0", - "@endo/bundle-source": "^2.5.1", - "@endo/eventual-send": "^0.17.2", - "@endo/init": "^0.5.56", - "@endo/netstring": "^0.3.26", - "@endo/promise-kit": "^0.2.56", - "@endo/stream": "^0.3.25", - "@endo/stream-node": "^0.2.26", + "@endo/bundle-source": "^2.5.2", + "@endo/eventual-send": "^0.17.3", + "@endo/init": "^0.5.57", + "@endo/netstring": "^0.3.27", + "@endo/promise-kit": "^0.2.57", + "@endo/stream": "^0.3.26", + "@endo/stream-node": "^0.2.27", "glob": "^7.1.6", "tmp": "^0.2.1" }, "devDependencies": { - "@endo/base64": "^0.2.31", + "@endo/base64": "^0.2.32", + "@types/glob": "^8.1.0", "ava": "^5.3.0", "c8": "^7.13.0" }, diff --git a/packages/xsnap/test/test-xs-perf.js b/packages/xsnap/test/test-xs-perf.js index b7c63f5d566..efa3cdc20f5 100644 --- a/packages/xsnap/test/test-xs-perf.js +++ b/packages/xsnap/test/test-xs-perf.js @@ -62,7 +62,7 @@ test('meter details', async t => { }, 'evaluate returns meter details', ); - t.is(meterType, 'xs-meter-20'); + t.is(meterType, 'xs-meter-21'); }); // test disabled until rewritten to tolerate fast CI hosts getting diff --git a/packages/zoe/README.md b/packages/zoe/README.md index 160edb15f9a..5fbec0e840f 100644 --- a/packages/zoe/README.md +++ b/packages/zoe/README.md @@ -82,7 +82,7 @@ import { prepareExo, prepareExoClass } from '@agoric/vat-data'; const { quote: q, Fail } = assert; -export const prepare = async (zcf, _privateArgs, instanceBaggage) => { +export const start = async (zcf, _privateArgs, instanceBaggage) => { const CODE_VERSION = 2; const isFirstIncarnation = !instanceBaggage.has('codeVersion'); if (isFirstIncarnation) { @@ -128,7 +128,7 @@ export const prepare = async (zcf, _privateArgs, instanceBaggage) => { ); return harden({ creatorFacet }); }; -harden(prepare); +harden(start); ``` For an example contract upgrade, see the test at https://github.com/Agoric/agoric-sdk/blob/master/packages/zoe/test/swingsetTests/upgradeCoveredCall/test-coveredCall-service-upgrade.js . diff --git a/packages/zoe/package.json b/packages/zoe/package.json index 78627ab1ca0..3b5e125c6b2 100644 --- a/packages/zoe/package.json +++ b/packages/zoe/package.json @@ -51,19 +51,19 @@ "@agoric/swingset-vat": "^0.32.2", "@agoric/time": "^0.3.2", "@agoric/vat-data": "^0.5.2", - "@endo/bundle-source": "^2.5.1", - "@endo/captp": "^3.1.1", - "@endo/eventual-send": "^0.17.2", - "@endo/far": "^0.2.18", - "@endo/import-bundle": "^0.3.4", - "@endo/marshal": "^0.8.5", - "@endo/nat": "^4.1.27", - "@endo/patterns": "^0.2.2", - "@endo/promise-kit": "^0.2.56", + "@endo/bundle-source": "^2.5.2", + "@endo/captp": "^3.1.2", + "@endo/eventual-send": "^0.17.3", + "@endo/far": "^0.2.19", + "@endo/import-bundle": "^0.3.5", + "@endo/marshal": "^0.8.6", + "@endo/nat": "^4.1.28", + "@endo/patterns": "^0.2.3", + "@endo/promise-kit": "^0.2.57", "yargs-parser": "^21.1.1" }, "devDependencies": { - "@endo/init": "^0.5.56", + "@endo/init": "^0.5.57", "ava": "^5.3.0", "c8": "^7.13.0", "import-meta-resolve": "^2.2.1", diff --git a/packages/zoe/src/contractFacet/types.js b/packages/zoe/src/contractFacet/types.js index 7999bb3650c..f6277e641eb 100644 --- a/packages/zoe/src/contractFacet/types.js +++ b/packages/zoe/src/contractFacet/types.js @@ -232,6 +232,13 @@ * @typedef {HandleOffer | { handle: HandleOffer }} OfferHandler */ +/** + * @typedef ContractMeta + * @property {CopyRecord} [customTermsShape] + * @property {CopyRecord} [privateArgsShape] + * @property {'canBeUpgraded' | 'canUpgrade'} [upgradability] + */ + /** * API for a contract start function. * @@ -246,6 +253,7 @@ * @callback ContractStartFn * @param {ZCF} zcf * @param {PA} privateArgs + * @param {MapStore} [baggage] * @returns {ContractStartFnResult} */ diff --git a/packages/zoe/src/contractFacet/zcfZygote.js b/packages/zoe/src/contractFacet/zcfZygote.js index 501de00db13..8b444299dd2 100644 --- a/packages/zoe/src/contractFacet/zcfZygote.js +++ b/packages/zoe/src/contractFacet/zcfZygote.js @@ -210,6 +210,16 @@ export const makeZCFZygote = async ( }); const handleOfferObj = makeHandleOfferObj(taker); + /** + * @type {() => Promise< { + * buildRootObject: any, + * start: undefined, + * meta: undefined, + * } | { + * buildRootObject: undefined, + * start: ContractStartFn, + * meta?: ContractMeta, +}>} */ const evaluateContract = () => { let bundle; if (passStyleOf(contractBundleCap) === 'remotable') { @@ -222,22 +232,18 @@ export const makeZCFZygote = async ( return evalContractBundle(bundle); }; // evaluate the contract (either the first version, or an upgrade) - const { - start, - buildRootObject, - privateArgsShape, - customTermsShape, - prepare, - } = await evaluateContract(); - - if (start === undefined && prepare === undefined) { + const { start, buildRootObject, meta = {} } = await evaluateContract(); + + if (start === undefined) { buildRootObject === undefined || Fail`Did you provide a vat bundle instead of a contract bundle?`; - Fail`contract exports missing start/prepare`; + throw Fail`contract exports missing start`; } - !start || - !prepare || - Fail`contract must provide exactly one of "start" and "prepare"`; + + start.length <= 3 || Fail`invalid start parameters`; + const durabilityRequired = meta.upgradability + ? ['canBeUpgraded', 'canUpgrade'].includes(meta.upgradability) + : false; /** @type {ZCF} */ // Using Remotable rather than Far because there are too many complications @@ -301,6 +307,7 @@ export const makeZCFZygote = async ( const terms = getInstanceRecHolder().getTerms(); // If the contract provided customTermsShape, validate the customTerms. + const { customTermsShape } = meta; if (customTermsShape) { const { brands: _b, issuers: _i, ...customTerms } = terms; mustMatch(harden(customTerms), customTermsShape, 'customTerms'); @@ -373,13 +380,13 @@ export const makeZCFZygote = async ( instantiateIssuerStorage(issuerStorageFromZoe); zcfBaggage.init('instanceRecHolder', instanceRecHolder); - const startFn = start || prepare; + const { privateArgsShape } = meta; if (privateArgsShape) { mustMatch(privateArgs, privateArgsShape, 'privateArgs'); } // start a contract for the first time return E.when( - startFn(zcf, privateArgs, contractBaggage), + start(zcf, privateArgs, contractBaggage), ({ creatorFacet = undefined, publicFacet = undefined, @@ -388,18 +395,16 @@ export const makeZCFZygote = async ( }) => { const unexpectedKeys = Object.keys(unexpected); unexpectedKeys.length === 0 || - Fail`contract ${ - prepare ? 'prepare' : 'start' - } returned unrecognized properties ${unexpectedKeys}`; + Fail`contract "start" returned unrecognized properties ${unexpectedKeys}`; const areDurable = objectMap( { creatorFacet, publicFacet, creatorInvitation }, canBeDurable, ); const allDurable = Object.values(areDurable).every(Boolean); - if (prepare) { + if (durabilityRequired) { allDurable || - Fail`values from prepare() must be durable ${areDurable}`; + Fail`with ${meta.upgradability}, values from start() must be durable ${areDurable}`; } if (allDurable) { @@ -419,18 +424,21 @@ export const makeZCFZygote = async ( }, restartContract: async (privateArgs = undefined) => { - prepare || Fail`prepare must be defined to upgrade a contract`; + if (meta.upgradability) { + meta.upgradability === 'canUpgrade' || Fail`contract cannot upgrade`; + } zoeInstanceAdmin = zcfBaggage.get('zcfInstanceAdmin'); instanceRecHolder = zcfBaggage.get('instanceRecHolder'); initSeatMgrAndMintKind(); + const { privateArgsShape } = meta; if (privateArgsShape) { mustMatch(privateArgs, privateArgsShape, 'privateArgs'); } // restart an upgradeable contract return E.when( - prepare(zcf, privateArgs, contractBaggage), + start(zcf, privateArgs, contractBaggage), ({ creatorFacet = undefined, publicFacet = undefined, diff --git a/packages/zoe/src/contractSupport/bondingCurves.js b/packages/zoe/src/contractSupport/bondingCurves.js index a7d51a536d9..347561ee43a 100644 --- a/packages/zoe/src/contractSupport/bondingCurves.js +++ b/packages/zoe/src/contractSupport/bondingCurves.js @@ -27,7 +27,7 @@ const BASIS_POINTS = 10000n; // TODO change to 10_000n once tooling copes. * pool of the kind of asset sent in * @param {any} outputReserve - the value in the liquidity * pool of the kind of asset to be sent out - * @param {bigint} [feeBasisPoints=30n] - the fee taken in + * @param {bigint} [feeBasisPoints] - the fee taken in * basis points. The default is 0.3% or 30 basis points. The fee * is taken from inputValue * @returns {NatValue} outputValue - the current price, in value form @@ -66,7 +66,7 @@ export const getInputPrice = ( * pool of the asset being spent * @param {any} outputReserve - the value in the liquidity * pool of the kind of asset to be sent out - * @param {bigint} [feeBasisPoints=30n] - the fee taken in + * @param {bigint} [feeBasisPoints] - the fee taken in * basis points. The default is 0.3% or 30 basis points. The fee is taken from * outputValue * @returns {NatValue} inputValue - the value of input required to purchase output diff --git a/packages/zoe/src/contractSupport/zoeHelpers.js b/packages/zoe/src/contractSupport/zoeHelpers.js index 36f2cc9497a..2287395c33f 100644 --- a/packages/zoe/src/contractSupport/zoeHelpers.js +++ b/packages/zoe/src/contractSupport/zoeHelpers.js @@ -298,7 +298,7 @@ const reverse = (keywordRecord = {}) => { * @param {ZCFSeat} fromSeat * The seat in contractA to take the offer payments from. * - * @param {ZCFSeat} [toSeat=fromSeat] + * @param {ZCFSeat} [toSeat] * The seat in contractA to deposit the payout of the offer to. * If `toSeat` is not provided, this defaults to the `fromSeat`. * diff --git a/packages/zoe/src/contracts/scaledPriceAuthority.js b/packages/zoe/src/contracts/scaledPriceAuthority.js index 6d963b2b8fe..5b6e212467f 100644 --- a/packages/zoe/src/contracts/scaledPriceAuthority.js +++ b/packages/zoe/src/contracts/scaledPriceAuthority.js @@ -17,6 +17,12 @@ import { provideQuoteMint } from '../contractSupport/priceAuthorityQuoteMint.js' * @property {Ratio} [initialPrice] - targetAmountIn:targetAmountOut */ +/** @type {ContractMeta} */ +export const meta = { + upgradability: 'canUpgrade', +}; +harden(meta); + /** * A contract that scales a source price authority to a target price authority * via ratios. @@ -30,7 +36,7 @@ import { provideQuoteMint } from '../contractSupport/priceAuthorityQuoteMint.js' * @param {object} privateArgs * @param {import('@agoric/vat-data').Baggage} baggage */ -export const prepare = async (zcf, privateArgs, baggage) => { +export const start = async (zcf, privateArgs, baggage) => { const quoteMint = provideQuoteMint(baggage); const { sourcePriceAuthority, scaleIn, scaleOut, initialPrice } = @@ -85,3 +91,4 @@ export const prepare = async (zcf, privateArgs, baggage) => { ); return harden({ publicFacet }); }; +harden(start); diff --git a/packages/zoe/src/internal-types.js b/packages/zoe/src/internal-types.js index 8837be17524..ee794b555b7 100644 --- a/packages/zoe/src/internal-types.js +++ b/packages/zoe/src/internal-types.js @@ -204,7 +204,7 @@ /** * @typedef {object} ExecuteContractResult * @property {object} creatorFacet - * @property {Promise} creatorInvitation + * @property {Promise} [creatorInvitation] * @property {object} publicFacet * @property {HandleOfferObj} handleOfferObj */ diff --git a/packages/zoe/test/swingsetTests/upgradeCoveredCall/coveredCall-durable-V3.js b/packages/zoe/test/swingsetTests/upgradeCoveredCall/coveredCall-durable-V3.js index 5578028ac41..6bf5f9534f7 100644 --- a/packages/zoe/test/swingsetTests/upgradeCoveredCall/coveredCall-durable-V3.js +++ b/packages/zoe/test/swingsetTests/upgradeCoveredCall/coveredCall-durable-V3.js @@ -13,6 +13,12 @@ const { details: X } = assert; const sellSeatExpiredMsg = 'The covered call option is expired.'; +/** @type {ContractMeta} */ +export const meta = { + upgradability: 'canUpgrade', +}; +harden(meta); + /** * @see original version in .../zoe/src/contracts/coveredCall.js and upgradeable * version in contracts/coveredCall-durable.js. @@ -24,7 +30,7 @@ const sellSeatExpiredMsg = 'The covered call option is expired.'; * @param {unknown} _privateArgs * @param {import('@agoric/vat-data').Baggage} instanceBaggage */ -const prepare = async (zcf, _privateArgs, instanceBaggage) => { +export const start = async (zcf, _privateArgs, instanceBaggage) => { const firstTime = !instanceBaggage.has('DidStart'); if (firstTime) { instanceBaggage.init('DidStart', true); @@ -98,6 +104,4 @@ const prepare = async (zcf, _privateArgs, instanceBaggage) => { ); return harden({ creatorFacet }); }; - -harden(prepare); -export { prepare }; +harden(start); diff --git a/packages/zoe/test/types.test-d.ts b/packages/zoe/test/types.test-d.ts index 19c16957a06..686f067d725 100644 --- a/packages/zoe/test/types.test-d.ts +++ b/packages/zoe/test/types.test-d.ts @@ -6,7 +6,7 @@ import { E } from '@endo/eventual-send'; import { expectType } from 'tsd'; -import type { prepare as scaledPriceAuthorityStart } from '../src/contracts/scaledPriceAuthority.js'; +import type { start as scaledPriceAuthorityStart } from '../src/contracts/scaledPriceAuthority.js'; { const zoe = {} as ZoeService; diff --git a/packages/zoe/test/unitTests/contracts/test-scaledPriceAuthority.js b/packages/zoe/test/unitTests/contracts/test-scaledPriceAuthority.js index ce790c05426..1f8b903a38a 100644 --- a/packages/zoe/test/unitTests/contracts/test-scaledPriceAuthority.js +++ b/packages/zoe/test/unitTests/contracts/test-scaledPriceAuthority.js @@ -18,7 +18,7 @@ import '../../../src/contracts/exported.js'; /** * @typedef {object} TestContext * @property {ZoeService} zoe - * @property {Installation} scaledPriceInstallation + * @property {Installation} scaledPriceInstallation * @property {Brand<'nat'>} atomBrand * @property {Brand<'nat'>} usdBrand * @property {IssuerKit<'nat'>} atom diff --git a/packages/zone/package.json b/packages/zone/package.json index 81f7390f4b8..3f51922f74a 100644 --- a/packages/zone/package.json +++ b/packages/zone/package.json @@ -7,8 +7,8 @@ "main": "./src/index.js", "scripts": { "build": "exit 0", - "test": "true || ava", - "test:c8": "true || c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test": "ava", + "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -27,7 +27,13 @@ "dependencies": { "@agoric/store": "^0.9.2", "@agoric/vat-data": "^0.5.2", - "@endo/far": "^0.2.18" + "@endo/exo": "^0.2.3", + "@endo/far": "^0.2.19", + "@endo/pass-style": "^0.1.4" + }, + "devDependencies": { + "@agoric/swingset-vat": "^0.32.2", + "ava": "^5.3.0" }, "publishConfig": { "access": "public" diff --git a/packages/zone/src/durable.js b/packages/zone/src/durable.js index fe384170d15..125732acead 100644 --- a/packages/zone/src/durable.js +++ b/packages/zone/src/durable.js @@ -1,5 +1,7 @@ +// @ts-check // @jessie-check +import { Far } from '@endo/far'; import { canBeDurable, makeScalarMapStore, @@ -10,20 +12,33 @@ import { provideDurableSetStore, provideDurableWeakMapStore, provideDurableWeakSetStore, - M, } from '@agoric/vat-data'; -import { Far } from '@endo/far'; +import { makeOnceKit } from './make-once.js'; +import { agoricVatDataKeys as keys } from './keys.js'; +import { isPassable } from './is-passable.js'; const { Fail } = assert; +/** + * A variant of `canBeDurable` that returns `false` instead of ever throwing. + * + * @param {unknown} specimen + * @returns {boolean} + */ +const isStorable = specimen => isPassable(specimen) && canBeDurable(specimen); +harden(isStorable); + /** * @param {() => import('@agoric/vat-data').Baggage} getBaggage */ const attachDurableStores = getBaggage => { /** @type {import('.').Zone['mapStore']} */ - const mapStore = (label, options) => - provideDurableMapStore(getBaggage(), label, options); + const mapStore = (label, options) => { + const baggage = getBaggage(); + const ret = provideDurableMapStore(baggage, label, options); + return ret; + }; /** @type {import('.').Zone['setStore']} */ const setStore = (label, options) => provideDurableSetStore(getBaggage(), label, options); @@ -38,7 +53,7 @@ const attachDurableStores = getBaggage => { return Far('durableStores', { // eslint-disable-next-line no-use-before-define detached: () => detachedDurableStores, - isStorable: canBeDurable, + isStorable, mapStore, setStore, weakMapStore, @@ -47,7 +62,7 @@ const attachDurableStores = getBaggage => { }; /** @type {import('.').Stores} */ -export const detachedDurableStores = attachDurableStores(() => +const detachedDurableStores = attachDurableStores(() => makeScalarMapStore('detached'), ); @@ -55,10 +70,20 @@ export const detachedDurableStores = attachDurableStores(() => * Create a zone whose objects persist between Agoric vat upgrades. * * @param {import('@agoric/vat-data').Baggage} baggage + * @param {string} [baseLabel] * @returns {import('.').Zone} */ -export const makeDurableZone = baggage => { +export const makeDurableZone = (baggage, baseLabel = 'durableZone') => { baggage || Fail`baggage required`; + + const attachedStores = attachDurableStores(() => baggage); + + const { makeOnce, wrapProvider } = makeOnceKit( + baseLabel, + attachedStores, + baggage, + ); + /** @type {import('.').Zone['exoClass']} */ const exoClass = (...args) => prepareExoClass(baggage, ...args); /** @type {import('.').Zone['exoClassKit']} */ @@ -66,22 +91,28 @@ export const makeDurableZone = baggage => { /** @type {import('.').Zone['exo']} */ const exo = (...args) => prepareExo(baggage, ...args); - const attachedStores = attachDurableStores(() => baggage); + const subZoneStore = wrapProvider(attachedStores.mapStore, keys.zone); /** @type {import('.').Zone['subZone']} */ const subZone = (label, options = {}) => { - const subBaggage = provideDurableMapStore(baggage, label, options); - return makeDurableZone(subBaggage); + const subBaggage = subZoneStore(label, options); + return makeDurableZone(subBaggage, `${baseLabel}.${label}`); }; return Far('durableZone', { - exo, - exoClass, - exoClassKit, + exo: wrapProvider(exo, keys.exo), + exoClass: wrapProvider(exoClass, keys.exoClass), + exoClassKit: wrapProvider(exoClassKit, keys.exoClassKit), subZone, - ...attachedStores, + + makeOnce, + detached: attachedStores.detached, + isStorable: attachedStores.isStorable, + + mapStore: wrapProvider(attachedStores.mapStore, keys.store), + setStore: wrapProvider(attachedStores.setStore, keys.store), + weakMapStore: wrapProvider(attachedStores.weakMapStore, keys.store), + weakSetStore: wrapProvider(attachedStores.weakSetStore, keys.store), }); }; harden(makeDurableZone); - -export { M }; diff --git a/packages/zone/src/heap.js b/packages/zone/src/heap.js index 2f32e1692d8..826f5a63607 100644 --- a/packages/zone/src/heap.js +++ b/packages/zone/src/heap.js @@ -1,24 +1,25 @@ +// @ts-check // @jessie-check +import { Far } from '@endo/far'; +import { makeExo, defineExoClass, defineExoClassKit } from '@endo/exo'; import { - makeExo, - defineExoClass, - defineExoClassKit, makeScalarMapStore, makeScalarSetStore, makeScalarWeakMapStore, makeScalarWeakSetStore, - M, } from '@agoric/store'; -import { Far } from '@endo/far'; +import { makeOnceKit } from './make-once.js'; +import { agoricVatDataKeys as keys } from './keys.js'; +import { isPassable } from './is-passable.js'; /** * @type {import('.').Stores} */ -const heapStores = Far('heapStores', { - detached: () => heapStores, - isStorable: _specimen => true, +const detachedHeapStores = Far('heapStores', { + detached: () => detachedHeapStores, + isStorable: isPassable, setStore: makeScalarSetStore, mapStore: makeScalarMapStore, @@ -27,16 +28,35 @@ const heapStores = Far('heapStores', { }); /** - * A heap (in-memory) zone that uses the default exo and store implementations. + * Create a heap (in-memory) zone that uses the default exo and store implementations. * - * @type {import('.').Zone} + * @param {string} [baseLabel] + * @returns {import('.').Zone} */ -export const heapZone = Far('heapZone', { - exoClass: defineExoClass, - exoClassKit: defineExoClassKit, - exo: makeExo, - subZone: (_label, _options) => heapZone, - ...heapStores, -}); +export const makeHeapZone = (baseLabel = 'heapZone') => { + const { makeOnce, wrapProvider } = makeOnceKit(baseLabel, detachedHeapStores); + + /** + * @param {string} label + * @param {any} _options + */ + const makeSubZone = (label, _options) => + makeHeapZone(`${baseLabel}.${label}`); + + return Far('heapZone', { + exo: wrapProvider(makeExo, keys.exo), + exoClass: wrapProvider(defineExoClass, keys.exoClass), + exoClassKit: wrapProvider(defineExoClassKit, keys.exoClassKit), + subZone: wrapProvider(makeSubZone), + + makeOnce, + detached: detachedHeapStores.detached, + isStorable: detachedHeapStores.isStorable, -export { M }; + mapStore: wrapProvider(detachedHeapStores.mapStore), + setStore: wrapProvider(detachedHeapStores.setStore), + weakMapStore: wrapProvider(detachedHeapStores.weakMapStore), + weakSetStore: wrapProvider(detachedHeapStores.weakSetStore), + }); +}; +harden(makeHeapZone); diff --git a/packages/zone/src/index.js b/packages/zone/src/index.js index d316d08870d..e0670887e9e 100644 --- a/packages/zone/src/index.js +++ b/packages/zone/src/index.js @@ -19,6 +19,7 @@ defineExoClassKit; * @property {typeof makeExo} exo create a singleton exo-object instance bound to this zone * @property {typeof defineExoClass} exoClass create a maker function that can be used to create exo-objects bound to this zone * @property {typeof defineExoClassKit} exoClassKit create a "kit" maker function that can be used to create a record of exo-objects sharing the same state + * @property {(key: string, maker: (key: string) => T) => T} makeOnce create or retrieve a singleton object bound to this zone * @property {(label: string, options?: StoreOptions) => Zone} subZone create a new Zone that can be passed to untrusted consumers without exposing the storage of the parent zone */ diff --git a/packages/zone/src/is-passable.js b/packages/zone/src/is-passable.js new file mode 100644 index 00000000000..258c510c614 --- /dev/null +++ b/packages/zone/src/is-passable.js @@ -0,0 +1,23 @@ +import { passStyleOf } from '@endo/pass-style'; + +/** + * Is `specimen` Passable? This returns true iff `passStyleOf(specimen)` + * returns a string. This returns `false` iff `passStyleOf(specimen)` throws. + * Under no normal circumstance should `isPassable(specimen)` throw. + * + * TODO implement an isPassable that does not rely on try/catch, and + * move it to @endo/pass-style. + * This implementation is just a standin until then + * + * @param {any} specimen + * @returns {specimen is Passable} + */ +export const isPassable = specimen => { + try { + // In fact, it never returns undefined. It either returns a + // string or throws. + return passStyleOf(specimen) !== undefined; + } catch (_) { + return false; + } +}; diff --git a/packages/zone/src/keys.js b/packages/zone/src/keys.js new file mode 100644 index 00000000000..0e0a1fe97ff --- /dev/null +++ b/packages/zone/src/keys.js @@ -0,0 +1,14 @@ +/** @param {string} label */ +const kind = label => `${label}_kindHandle`; +/** @param {string} label */ +const singleton = label => `${label}_singleton`; + +/** @type {Record<'exoClass' | 'exoClassKit' | 'exo' | 'store' | 'zone', (label: string) => string[]>} */ +export const agoricVatDataKeys = { + exoClass: label => harden([kind(label)]), + exoClassKit: label => harden([kind(label)]), + exo: label => harden([kind(label), singleton(label)]), + store: label => harden([label]), + zone: label => harden([label]), +}; +harden(agoricVatDataKeys); diff --git a/packages/zone/src/make-once.js b/packages/zone/src/make-once.js new file mode 100644 index 00000000000..f7bab853b25 --- /dev/null +++ b/packages/zone/src/make-once.js @@ -0,0 +1,86 @@ +// @ts-check +const { Fail } = assert; + +/** @param {string} label */ +const defaultLabelToKeys = label => harden([label]); +harden(defaultLabelToKeys); + +/** + * @param {string} debugName Only used internally for diagnostics, not available to user code + * @param {import('.').Stores} stores + * @param {MapStore} [backingStore] + */ +export const makeOnceKit = (debugName, stores, backingStore = undefined) => { + // We need a detached setStore so that it isn't persisted as part of the zone. + // That way, our usedKeys are only tracked for the current incarnation, which + // is what we want. Using `debugName` in the label is good for diagnostics, + // and since it is only for a detached store, it should not be visible to the + // backing store. + const usedKeys = stores.detached().setStore(`${debugName} used keys`); + + /** + * @param {string} key + */ + const assertOnlyOnce = key => { + typeof key === 'string' || Fail`key ${key} must be a string`; + !usedKeys.has(key) || + Fail`key ${key} has already been used in this zone and incarnation`; + + // Mark this key as used. We make no attempt to recover from invalid makers + // or backingStores. + usedKeys.add(key); + }; + + /** + * Ensure the wrapped function is only called once per incarnation. It is + * expected to update the backing store directly. + * + * @template {(key: string, ...rest: unknown[]) => any} T + * @param {T} provider + * @param {(label: string) => string[]} [labelToKeys] + * @returns {T} + */ + const wrapProvider = (provider, labelToKeys = defaultLabelToKeys) => { + /** @type {(...args: Parameters) => ReturnType} */ + const wrapper = (label, ...rest) => { + for (const key of labelToKeys(label)) { + assertOnlyOnce(key); + } + return provider(label, ...rest); + }; + return /** @type {T} */ (wrapper); + }; + + /** + * The best way to understand the purpose of `makeOnce` is to first understand + * what `makeOnce` does on a durable zone. Used correctly, `makeOnce` should only + * be called at most once on any zone,key pair during any vat incarnation. + * Given that constraint, if there is already a value bound to that + * zone,key pair, it must have been left there by a previous incarnation and + * `makeOnce` will simply return it. If not, then `maker(key)` is called to + * determine the initial value of that slot, which will normally be preserved + * by similar calls to `makeOnce` in future incarnations --- though that will be + * up to them. + * + * Also ensures the maker returns a storable value. + * + * @template V + * @param {string} key The string name of the Zone slot to provide. + * @param {(key: string) => V} maker Called to create a fresh value to fill an empty slot. + * @returns {V} The value of the key's slot. + */ + const makeOnce = (key, maker) => { + assertOnlyOnce(key); + if (backingStore && backingStore.has(key)) { + return backingStore.get(key); + } + const value = maker(key); + stores.isStorable(value) || + Fail`maker return value ${value} is not storable`; + backingStore && backingStore.init(key, value); + return value; + }; + + return harden({ makeOnce, wrapProvider }); +}; +harden(makeOnceKit); diff --git a/packages/zone/src/virtual.js b/packages/zone/src/virtual.js index e4262588eda..8438204de1b 100644 --- a/packages/zone/src/virtual.js +++ b/packages/zone/src/virtual.js @@ -1,17 +1,19 @@ +// @ts-check // @jessie-check +import { Far } from '@endo/far'; import { - canBeDurable, defineVirtualExoClass, defineVirtualExoClassKit, makeScalarBigMapStore, makeScalarBigSetStore, makeScalarBigWeakMapStore, makeScalarBigWeakSetStore, - M, } from '@agoric/vat-data'; -import { Far } from '@endo/far'; +import { makeOnceKit } from './make-once.js'; +import { agoricVatDataKeys as keys } from './keys.js'; +import { isPassable } from './is-passable.js'; const emptyRecord = harden({}); const initEmpty = harden(() => emptyRecord); @@ -22,7 +24,7 @@ const initEmpty = harden(() => emptyRecord); * * @type {import('.').Zone['exo']} */ -const defineVirtualExo = ( +const makeVirtualExo = ( label, interfaceGuard, methods, @@ -43,9 +45,9 @@ const defineVirtualExo = ( }; /** @type {import('.').Stores} */ -export const detachedVirtualStores = Far('virtualStores', { +const detachedVirtualStores = Far('virtualStores', { detached: () => detachedVirtualStores, - isStorable: canBeDurable, + isStorable: isPassable, mapStore: makeScalarBigMapStore, setStore: makeScalarBigSetStore, weakMapStore: makeScalarBigWeakMapStore, @@ -56,15 +58,35 @@ export const detachedVirtualStores = Far('virtualStores', { * A zone that utilizes external storage to reduce the memory footprint of the * current vat. * - * @type {import('.').Zone} + * @param {string} [baseLabel] + * @returns {import('.').Zone} */ -export const virtualZone = Far('virtualZone', { - exo: defineVirtualExo, - exoClass: defineVirtualExoClass, - exoClassKit: defineVirtualExoClassKit, - subZone: (_label, _options = {}) => virtualZone, +export const makeVirtualZone = (baseLabel = 'virtualZone') => { + const { makeOnce, wrapProvider } = makeOnceKit( + baseLabel, + detachedVirtualStores, + ); - ...detachedVirtualStores, -}); + /** + * @param {string} label + * @param {any} _options + */ + const makeSubZone = (label, _options) => + makeVirtualZone(`${baseLabel}.${label}`); -export { M }; + return Far('virtualZone', { + exo: wrapProvider(makeVirtualExo, keys.exo), + exoClass: wrapProvider(defineVirtualExoClass, keys.exoClass), + exoClassKit: wrapProvider(defineVirtualExoClassKit, keys.exoClassKit), + subZone: wrapProvider(makeSubZone), + + makeOnce, + detached: detachedVirtualStores.detached, + isStorable: detachedVirtualStores.isStorable, + + mapStore: wrapProvider(detachedVirtualStores.mapStore), + setStore: wrapProvider(detachedVirtualStores.setStore), + weakMapStore: wrapProvider(detachedVirtualStores.weakMapStore), + weakSetStore: wrapProvider(detachedVirtualStores.weakSetStore), + }); +}; diff --git a/packages/zone/test/prepare-test-env-ava.js b/packages/zone/test/prepare-test-env-ava.js new file mode 100644 index 00000000000..0df9ee21988 --- /dev/null +++ b/packages/zone/test/prepare-test-env-ava.js @@ -0,0 +1,19 @@ +import '@agoric/swingset-vat/tools/prepare-test-env-ava.js'; +import { reincarnate } from '@agoric/swingset-vat/tools/setup-vat-data.js'; + +export { test } from '@agoric/swingset-vat/tools/prepare-test-env-ava.js'; + +/** @type {ReturnType} */ +let incarnation; + +export const annihilate = () => { + incarnation = reincarnate({ relaxDurabilityRules: false }); +}; + +export const getBaggage = () => { + return incarnation.fakeVomKit.cm.provideBaggage(); +}; + +export const nextLife = () => { + incarnation = reincarnate(incarnation); +}; diff --git a/packages/zone/test/test-exos.js b/packages/zone/test/test-exos.js new file mode 100644 index 00000000000..24edabfb970 --- /dev/null +++ b/packages/zone/test/test-exos.js @@ -0,0 +1,268 @@ +// eslint-disable-next-line import/order +import { + annihilate, + getBaggage, + nextLife, + test, +} from './prepare-test-env-ava.js'; + +import { M } from '@agoric/store'; +import * as vatData from '@agoric/vat-data'; + +import { makeDurableZone } from '../durable.js'; +import { makeHeapZone } from '../heap.js'; +import { makeVirtualZone } from '../virtual.js'; +import { agoricVatDataKeys as keys } from '../src/keys.js'; + +/** @typedef {import('../src/index.js').Zone} Zone */ + +// CAUTION: Do not modify this list; it exists to ensure that future versions +// of @agoric/zone are compatible with the baggage created by older versions, +// including the legacy implementation of @agoric/vat-data. +const agoricVatDataCompatibleKeys = [ + 'Greeter_kindHandle', + 'GreeterKit_kindHandle', + 'a_kindHandle', + 'a_singleton', + 'mappish', + 'subsub', +].sort(); + +const bindAllMethodsTo = (obj, that = obj) => + Object.fromEntries( + Object.entries(obj).map(([name, fn]) => [name, fn.bind(that)]), + ); + +const greetGuard = M.interface('Greeter', { + greet: M.call().optional(M.string()).returns(M.string()), +}); +const greetFacet = { + greet(greeting = 'Hello') { + return `${greeting}, ${this.state.nick}`; + }, +}; + +const adminGuard = M.interface('GreeterAdmin', { + setNick: M.call(M.string()).returns(), +}); +const adminFacet = { + setNick(nick) { + this.state.nick = nick; + }, +}; + +const combinedGuard = M.interface('GreeterWithAdmin', { + ...greetGuard.methodGuards, + ...adminGuard.methodGuards, +}); + +const alreadyExceptionSpec = { + message: /has already been used/, +}; + +const prepareGreeterSingleton = (zone, label, nick) => { + const myThis = Object.freeze({ state: { nick } }); + return zone.exo(label, combinedGuard, { + ...bindAllMethodsTo(greetFacet, myThis), + ...bindAllMethodsTo(adminFacet, myThis), + }); +}; + +const prepareGreeter = zone => + zone.exoClass('Greeter', combinedGuard, nick => ({ nick }), { + ...greetFacet, + ...adminFacet, + }); + +const prepareGreeterKit = zone => + zone.exoClassKit( + 'GreeterKit', + { greeter: greetGuard, admin: adminGuard }, + nick => ({ nick }), + { + greeter: greetFacet, + admin: adminFacet, + }, + ); + +const testGreeter = (t, nick, obj, adminObj = obj) => { + t.is(obj.greet('Greetings'), `Greetings, ${nick}`); + t.is(obj.greet(), `Hello, ${nick}`); + adminObj.setNick(`${nick}2`); + t.is(obj.greet('Greetings'), `Greetings, ${nick}2`); + t.is(obj.greet(), `Hello, ${nick}2`); + adminObj.setNick(nick); +}; + +/** + * @template T + * @param {import('ava').Assertions} t + * @param {() => T} fn + * @param {*} spec + * @returns {T} + */ +const secondThrows = (t, fn, spec = alreadyExceptionSpec) => { + const ret = fn(); + t.throws(fn, spec); + return ret; +}; + +/** + * @param {import('ava').Assertions} t + * @param {MapStore} baggage + */ +const testFirstVatDataIncarnation = (t, baggage) => { + const subBaggage = vatData.provideDurableMapStore(baggage, 'sub'); + + const myThis = Object.freeze({ state: { nick: 'Singly' } }); + const singly = vatData.prepareExo(subBaggage, 'a', combinedGuard, { + ...bindAllMethodsTo(greetFacet, myThis), + ...bindAllMethodsTo(adminFacet, myThis), + }); + testGreeter(t, 'Singly', singly); + + const makeGreeter = vatData.prepareExoClass( + subBaggage, + 'Greeter', + combinedGuard, + nick => ({ nick }), + { + ...greetFacet, + ...adminFacet, + }, + ); + const classy = makeGreeter('Classy'); + testGreeter(t, 'Classy', classy); + + const makeGreeterKit = vatData.prepareExoClassKit( + subBaggage, + 'GreeterKit', + { greeter: greetGuard, admin: adminGuard }, + nick => ({ nick }), + { + greeter: greetFacet, + admin: adminFacet, + }, + ); + const { greeter: kitty, admin: kittyAdmin } = makeGreeterKit('Kitty'); + testGreeter(t, 'Kitty', kitty, kittyAdmin); + + const mappish = vatData.provideDurableMapStore(subBaggage, 'mappish'); + mappish.init('singly', singly); + mappish.init('classy', classy); + mappish.init('kitty', kitty); + mappish.init('kittyAdmin', kittyAdmin); + + vatData.provideDurableMapStore(subBaggage, 'subsub'); +}; + +/** + * @param {import('ava').Assertions} t + * @param {Zone} rootZone + */ +const testFirstZoneIncarnation = (t, rootZone) => { + const subZone = secondThrows(t, () => rootZone.subZone('sub')); + const singly = secondThrows(t, () => + prepareGreeterSingleton(subZone, 'a', 'Singly'), + ); + testGreeter(t, 'Singly', singly); + + const makeGreeter = secondThrows(t, () => prepareGreeter(subZone)); + const classy = makeGreeter('Classy'); + testGreeter(t, 'Classy', classy); + + const makeGreeterKit = secondThrows(t, () => prepareGreeterKit(subZone)); + + const { greeter: kitty, admin: kittyAdmin } = makeGreeterKit('Kitty'); + testGreeter(t, 'Kitty', kitty, kittyAdmin); + + const mappish = secondThrows(t, () => subZone.mapStore('mappish')); + mappish.init('singly', singly); + mappish.init('classy', classy); + mappish.init('kitty', kitty); + mappish.init('kittyAdmin', kittyAdmin); + + secondThrows(t, () => subZone.subZone('subsub')); +}; + +/** + * @param {import('ava').Assertions} t + * @param {Zone} rootZone + */ +const testSecondZoneIncarnation = (t, rootZone) => { + const subZone = secondThrows(t, () => rootZone.subZone('sub')); + const mappish = secondThrows(t, () => subZone.mapStore('mappish')); + + const singlyReload = secondThrows(t, () => + prepareGreeterSingleton(subZone, 'a', 'Singly'), + ); + const makeGreeter = secondThrows(t, () => prepareGreeter(subZone)); + const makeGreeterKit = secondThrows(t, () => prepareGreeterKit(subZone)); + + const singly = mappish.get('singly'); + t.is(singlyReload, singly); + testGreeter(t, 'Singly', singly); + testGreeter(t, 'Classy', mappish.get('classy')); + testGreeter(t, 'Kitty', mappish.get('kitty'), mappish.get('kittyAdmin')); + + const classy2 = makeGreeter('Classy2'); + testGreeter(t, 'Classy2', classy2); + + const { greeter: kitty2, admin: kittyAdmin2 } = makeGreeterKit('Kitty2'); + testGreeter(t, 'Kitty2', kitty2, kittyAdmin2); +}; + +test('heapZone', t => { + const zone = makeHeapZone(); + testFirstZoneIncarnation(t, zone); +}); + +test.serial('virtualZone', t => { + annihilate(); + const zone = makeVirtualZone(); + testFirstZoneIncarnation(t, zone); +}); + +test.serial('durableZone', t => { + annihilate(); + + const expectedKeys = [ + ...keys.exo('a'), + ...keys.exoClass('Greeter'), + ...keys.exoClassKit('GreeterKit'), + ...keys.store('mappish'), + ...keys.zone('subsub'), + ].sort(); + t.deepEqual(agoricVatDataCompatibleKeys, expectedKeys); + + nextLife(); + const baggage1 = getBaggage(); + testFirstZoneIncarnation(t, makeDurableZone(baggage1)); + t.deepEqual( + [...baggage1.get('sub').keys()].sort(), + agoricVatDataCompatibleKeys, + ); + + nextLife(); + const baggage2 = getBaggage(); + t.deepEqual( + [...baggage2.get('sub').keys()].sort(), + agoricVatDataCompatibleKeys, + ); + testSecondZoneIncarnation(t, makeDurableZone(baggage2)); +}); + +test.serial('vatData migrate to durableZone', t => { + annihilate(); + + const baggage1 = getBaggage(); + testFirstVatDataIncarnation(t, baggage1); + t.deepEqual( + [...baggage1.get('sub').keys()].sort(), + agoricVatDataCompatibleKeys, + ); + + nextLife(); + const baggage2 = getBaggage(); + testSecondZoneIncarnation(t, makeDurableZone(baggage2)); +}); diff --git a/packages/zone/test/test-make-once.js b/packages/zone/test/test-make-once.js new file mode 100644 index 00000000000..8126600b012 --- /dev/null +++ b/packages/zone/test/test-make-once.js @@ -0,0 +1,66 @@ +import { + annihilate, + getBaggage, + nextLife, + test, +} from './prepare-test-env-ava.js'; + +import { makeDurableZone } from '../durable.js'; +import { makeHeapZone } from '../heap.js'; +import { makeVirtualZone } from '../virtual.js'; + +/** @typedef {import('../src/index.js').Zone} Zone */ + +/** + * @param {import('ava').Assertions} t + * @param {Zone} rootZone + */ +const testOnce = (t, rootZone) => { + const subZone = rootZone.subZone('sub'); + const a = subZone.makeOnce('a', () => 'A'); + t.is(a, 'A'); + t.throws(() => subZone.makeOnce('a', () => 'A'), { + message: /has already been used/, + }); + const nonPassable = harden({ + hello() { + return 'world'; + }, + }); + t.is(rootZone.isStorable(nonPassable), false); + t.is(subZone.isStorable(123), true); + t.throws(() => rootZone.makeOnce('nonPassable', () => nonPassable), { + message: /is not storable/, + }); +}; + +test('heapZone', t => { + testOnce(t, makeHeapZone()); +}); + +test.serial('virtualZone', t => { + testOnce(t, makeVirtualZone()); +}); + +test.serial('durableZone', t => { + annihilate(); + const rootBaggage = getBaggage(); + const rootDurableZone = makeDurableZone(rootBaggage); + testOnce(t, rootDurableZone); + + // Do we actually want to refuse to use the same baggage twice? + const secondDurableZone = makeDurableZone(rootBaggage); + testOnce(t, secondDurableZone); + const subDurableZone = makeDurableZone(rootBaggage).subZone('sub'); + t.is( + subDurableZone.makeOnce('a', () => 'B'), + 'A', + ); + t.throws(() => subDurableZone.makeOnce('a', () => 'B'), { + message: /has already been used/, + }); + + nextLife(); + const thirdDurableZone = makeDurableZone(getBaggage()); + testOnce(t, thirdDurableZone); +}); diff --git a/patches/@endo+captp+3.1.2.patch b/patches/@endo+captp+3.1.2.patch new file mode 100644 index 00000000000..fdc5fdf8fbd --- /dev/null +++ b/patches/@endo+captp+3.1.2.patch @@ -0,0 +1,20 @@ +diff --git a/node_modules/@endo/captp/src/finalize.js b/node_modules/@endo/captp/src/finalize.js +index 871bcf5..60b5edf 100644 +--- a/node_modules/@endo/captp/src/finalize.js ++++ b/node_modules/@endo/captp/src/finalize.js +@@ -99,7 +99,14 @@ export const makeFinalizingMap = (finalizer, opts) => { + }, + // Does deref, and thus does guarantee stability of the value until the + // end of the turn. +- get: key => keyToRef.get(key)?.deref(), ++ // Prefer: get: key => keyToRef.get(key)?.deref(), ++ get: key => { ++ const wr = keyToRef.get(key); ++ if (!wr) { ++ return wr; ++ } ++ return wr.deref(); ++ }, + has: key => finalizingMap.get(key) !== undefined, + // Does deref, and thus does guarantee stability of both old and new values + // until the end of the turn. diff --git a/patches/@endo+pass-style+0.1.4.patch b/patches/@endo+pass-style+0.1.4.patch new file mode 100644 index 00000000000..31b241554ae --- /dev/null +++ b/patches/@endo+pass-style+0.1.4.patch @@ -0,0 +1,14 @@ +diff --git a/node_modules/@endo/pass-style/src/passStyleOf.js b/node_modules/@endo/pass-style/src/passStyleOf.js +index 9774bde..2ae3aac 100644 +--- a/node_modules/@endo/pass-style/src/passStyleOf.js ++++ b/node_modules/@endo/pass-style/src/passStyleOf.js +@@ -205,7 +205,8 @@ const makePassStyleOf = passStyleHelpers => { + * @type {PassStyleOf} + */ + export const passStyleOf = +- globalThis?.VatData?.passStyleOf || ++ // Prefer: globalThis?.VatData?.passStyleOf || ++ globalThis && globalThis.VatData && globalThis.VatData.passStyleOf || + makePassStyleOf([ + CopyArrayHelper, + CopyRecordHelper, diff --git a/patches/acorn+8.8.2.patch b/patches/acorn+8.10.0.patch similarity index 73% rename from patches/acorn+8.8.2.patch rename to patches/acorn+8.10.0.patch index db571063ec5..1ec930760a0 100644 --- a/patches/acorn+8.8.2.patch +++ b/patches/acorn+8.10.0.patch @@ -1,13 +1,13 @@ diff --git a/node_modules/acorn/dist/acorn.js b/node_modules/acorn/dist/acorn.js -index f623ebc..c1868c6 100644 +index 62e1aa6..2a9e592 100644 --- a/node_modules/acorn/dist/acorn.js +++ b/node_modules/acorn/dist/acorn.js -@@ -2139,7 +2139,7 @@ +@@ -2191,7 +2191,7 @@ if (checkClashes) { if (hasOwn(checkClashes, expr.name)) { this.raiseRecoverable(expr.start, "Argument name clash"); } - checkClashes[expr.name] = true; -+ Object.defineProperty(checkClashes, expr.name, { configurable: true, enumerable: true, value: true }); ++ Object.defineProperty(checkClashes, expr.name, { configurable: true, enumerable: true, value: true }); } if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); } } diff --git a/patches/node-fetch+2.6.9.patch b/patches/node-fetch+2.6.12.patch similarity index 97% rename from patches/node-fetch+2.6.9.patch rename to patches/node-fetch+2.6.12.patch index 3322bbc40a7..605f5d181d4 100644 --- a/patches/node-fetch+2.6.9.patch +++ b/patches/node-fetch+2.6.12.patch @@ -1,5 +1,5 @@ diff --git a/node_modules/node-fetch/lib/index.js b/node_modules/node-fetch/lib/index.js -index 337d6e5..75b33d4 100644 +index 087f2a0..6778549 100644 --- a/node_modules/node-fetch/lib/index.js +++ b/node_modules/node-fetch/lib/index.js @@ -1,3 +1,4 @@ diff --git a/patches/bl++readable-stream+3.6.1.patch b/patches/readable-stream+3.6.2.patch similarity index 71% rename from patches/bl++readable-stream+3.6.1.patch rename to patches/readable-stream+3.6.2.patch index 0eac150a039..5ab0dfe88c0 100644 --- a/patches/bl++readable-stream+3.6.1.patch +++ b/patches/readable-stream+3.6.2.patch @@ -1,7 +1,7 @@ -diff --git a/node_modules/bl/node_modules/readable-stream/errors.js b/node_modules/bl/node_modules/readable-stream/errors.js +diff --git a/node_modules/readable-stream/errors.js b/node_modules/readable-stream/errors.js index 8471526..a4169da 100644 ---- a/node_modules/bl/node_modules/readable-stream/errors.js -+++ b/node_modules/bl/node_modules/readable-stream/errors.js +--- a/node_modules/readable-stream/errors.js ++++ b/node_modules/readable-stream/errors.js @@ -21,7 +21,18 @@ function createErrorType(code, message, Base) { } } diff --git a/scripts/lint-with-types.sh b/scripts/lint-with-types.sh index bba445bbe57..077c2c05958 100755 --- a/scripts/lint-with-types.sh +++ b/scripts/lint-with-types.sh @@ -1,8 +1,8 @@ #!/bin/sh -# we don't collect type info by default because it can slow eslint by 8-10x -# FIXME even in CI it has become too slow so disable until https://github.com/Agoric/agoric-sdk/issues/5788 -# export AGORIC_ESLINT_TYPES='keypresent' +# we don't collect type info by default because the EXPERIMENTAL_useProjectService that provides viable perf +# is not yet compatible with running eslint in IDE +export AGORIC_ESLINT_TYPES='keypresent' # CI and some VMs OOM without this export NODE_OPTIONS='--max-old-space-size=8192' diff --git a/scripts/resolve-versions.sh b/scripts/resolve-versions.sh index c654f3891c8..429d0890a03 100755 --- a/scripts/resolve-versions.sh +++ b/scripts/resolve-versions.sh @@ -13,7 +13,7 @@ cd -- "$DIR/.." override=$(jq 'to_entries | map({ key: ("**/" + .key), value: .value }) | from_entries') PACKAGEJSONHASH=$( - jq --arg override "$override" '.resolutions *= ($override | fromjson)' package.json | + jq --arg override "$override" '. * { resolutions: ($override | fromjson) }' package.json | git hash-object -w --stdin ) git cat-file blob "$PACKAGEJSONHASH" > package.json diff --git a/scripts/run-deployment-integration.sh b/scripts/run-deployment-integration.sh index d5511a02039..eae1ab555c2 100644 --- a/scripts/run-deployment-integration.sh +++ b/scripts/run-deployment-integration.sh @@ -1,36 +1,45 @@ #!/bin/sh set -xueo pipefail -SDK_REAL_DIR="$(cd "$(dirname "$(readlink -f -- "$0")")/.." > /dev/null && pwd -P)" +SDK_SRC="$(cd "$(dirname "$(readlink -f -- "$0")")/.." > /dev/null && pwd -P)" +export SDK_SRC -# For some reason something in the integration script -# relies on the SDK being at that location # Set AGORIC_SDK_PATH to the SDK path on the host if this # script is running inside a docker environment (and make sure to # bind mount /var/run/docker.sock) -if [ "$SDK_REAL_DIR" != "/usr/src/agoric-sdk" ]; then - echo 'Agoric SDK must be mounted in "/usr/src/agoric-sdk"' - exit 1 -fi +export AGORIC_SDK_PATH="${AGORIC_SDK_PATH-$SDK_SRC}" export NETWORK_NAME=chaintest -sudo ln -sf /usr/src/agoric-sdk/packages/deployment/bin/ag-setup-cosmos /usr/local/bin/ag-setup-cosmos -rm -rf /usr/src/agoric-sdk/chaintest ~/.ag-chain-cosmos/ /usr/src/testnet-load-generator/_agstate/agoric-servers/testnet-8000 +# Note: the deployment test and the loadgen test in testnet mode modify some +# directories in $HOME so provide an empty $HOME for them. +export HOME="$(mktemp -d -t deployment-integration-home.XXXXX)" -cd /usr/src/agoric-sdk/ +# While it'd be great if these [tests were more hermetic](https://github.com/Agoric/agoric-sdk/issues/8059), +# this manual runner must currently reset paths relative to the SDK to ensure +# reproducible tests. +rm -rf "$SDK_SRC/../testnet-load-generator/_agstate/agoric-servers/testnet-8000" + +export OUTPUT_PATH="$SDK_SRC/../deployment-test-results/networks-$(date +%s)" +mkdir -p "$OUTPUT_PATH" + +cd "$SDK_SRC" sudo ./packages/deployment/scripts/install-deps.sh yarn install && XSNAP_RANDOM_INIT=1 yarn build && make -C packages/cosmic-swingset/ + +cd "$OUTPUT_PATH" # change to "false" to skip extraction on success like in CI testfailure="unknown" -/usr/src/agoric-sdk/packages/deployment/scripts/integration-test.sh || { +DOCKER_VOLUMES="$AGORIC_SDK_PATH:/usr/src/agoric-sdk" \ +LOADGEN=1 \ +$SDK_SRC/packages/deployment/scripts/integration-test.sh || { echo "Test failed!!!" testfailure="true" } -packages/deployment/scripts/setup.sh play stop || true -packages/deployment/scripts/capture-integration-results.sh $testfailure -echo yes | packages/deployment/scripts/setup.sh destroy || true +$SDK_SRC/packages/deployment/scripts/setup.sh play stop || true +$SDK_SRC/packages/deployment/scripts/capture-integration-results.sh $testfailure +echo yes | $SDK_SRC/packages/deployment/scripts/setup.sh destroy || true # Not part of CI -/usr/src/agoric-sdk/scripts/process-integration-results.sh $NETWORK_NAME/results +$SDK_SRC/scripts/process-integration-results.sh $NETWORK_NAME/results diff --git a/packages/deployment/scripts/smoketest-binaries.sh b/scripts/smoketest-binaries.sh similarity index 100% rename from packages/deployment/scripts/smoketest-binaries.sh rename to scripts/smoketest-binaries.sh diff --git a/yarn.lock b/yarn.lock index 418640d4abf..41c57593fa4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21,12 +21,12 @@ resolved "https://registry.yarnpkg.com/@agoric/wallet-ui/-/wallet-ui-0.1.3-solo.0.tgz#5f05c3dd2820d4f1efcbccbd2dc1292847ecbd2b" integrity sha512-NbhCrTH9u2af+6ituM99M8Mo10VOP1nQRTZoYEXW+esBwJId/7cRniMmAC7qmkbXs8POA31S8EQ5gAhkWq08WA== -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.11", "@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" + integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== dependencies: - "@babel/highlight" "^7.18.6" + "@babel/highlight" "^7.22.5" "@babel/generator@^7.18.9": version "7.18.9" @@ -64,17 +64,17 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-validator-identifier@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" - integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" + integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== +"@babel/highlight@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" + integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== dependencies: - "@babel/helper-validator-identifier" "^7.18.6" + "@babel/helper-validator-identifier" "^7.22.5" chalk "^2.0.0" js-tokens "^4.0.0" @@ -356,23 +356,23 @@ resolved "https://registry.yarnpkg.com/@datadog/sketches-js/-/sketches-js-2.1.0.tgz#8c7e8028a5fc22ad102fa542b0a446c956830455" integrity sha512-smLocSfrt3s53H/XSVP3/1kP42oqvrkjUPtyaFd1F79ux24oE31BKt+q0c6lsa6hOYrFzsIwyc5GXAI5JmfOew== -"@endo/base64@^0.2.31": - version "0.2.31" - resolved "https://registry.yarnpkg.com/@endo/base64/-/base64-0.2.31.tgz#92378462cd791e0258a2291d44d2cfd15415cf32" - integrity sha512-7IndkaZ7buIuFw8oBovNZV7epuyFWs0gdusSJ/zrx6fMXRqX0ycSTtxr6M5xADQGss1I9fqP3vteVLiNFlyIbw== +"@endo/base64@^0.2.32": + version "0.2.32" + resolved "https://registry.yarnpkg.com/@endo/base64/-/base64-0.2.32.tgz#e15a03005e698cb7b92445051f838844ec43a692" + integrity sha512-AymPh9fHoUswME+Dv69JJ1cqtWnppAW4EnjE9QdBHmr8agzBmAoEZT2GVDf80m64xNWRQ+6u0OxrNBX+ZOD2Yw== -"@endo/bundle-source@^2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@endo/bundle-source/-/bundle-source-2.5.1.tgz#6ec870335bd88ee561e6c2a323080c3b4a1894b4" - integrity sha512-O8aEiOF3GmMbXjmz47CYNfvT6c16CNGT1ups2Spt29noejCoklmF5L7mEbeS8w7XUGA0Cs1IrZDfkiyTZ+ckmA== +"@endo/bundle-source@^2.5.2": + version "2.5.2" + resolved "https://registry.yarnpkg.com/@endo/bundle-source/-/bundle-source-2.5.2.tgz#8375e75b917c14e0b0689dcbcdc8143185b88ba6" + integrity sha512-M6dZdwYUP/9TwoOvQWMUAs8nkF3Uxtxl3DGo6JN0OmSevFEO2Eeu46X/CNayoik13/vQbbk0LiDZhpM01ZI4rw== dependencies: "@agoric/babel-generator" "^7.17.4" "@babel/parser" "^7.17.3" "@babel/traverse" "^7.17.3" - "@endo/base64" "^0.2.31" - "@endo/compartment-mapper" "^0.8.4" - "@endo/init" "^0.5.56" - "@endo/promise-kit" "^0.2.56" + "@endo/base64" "^0.2.32" + "@endo/compartment-mapper" "^0.8.5" + "@endo/init" "^0.5.57" + "@endo/promise-kit" "^0.2.57" "@rollup/plugin-commonjs" "^19.0.0" "@rollup/plugin-node-resolve" "^13.0.0" acorn "^8.2.4" @@ -380,38 +380,43 @@ rollup endojs/endo#rollup-2.7.1-patch-1 source-map "^0.7.3" -"@endo/captp@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@endo/captp/-/captp-3.1.1.tgz#538cdb7deec694cfce1015e1ccb387270172642d" - integrity sha512-M+EiRxtm5xzKmZtOQmTtk5IfscPUKGSDGhmcxGTm4g4WvukFKSAB8hLHAbeurLaWVQG/ZcqZBffAZL/SGUZbmw== +"@endo/captp@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@endo/captp/-/captp-3.1.2.tgz#6df74d2ccdd84b2f5189f76468efb1ecda306366" + integrity sha512-Sx8uR8bCVDoLZDfdKvFXfkqXUK6a2jj2wP8+VSlCsRXAtVErpcSobmI7wN/VgK1V4d5yzR1AW+UhLCYFqWDKRQ== dependencies: - "@endo/eventual-send" "^0.17.2" - "@endo/marshal" "^0.8.5" - "@endo/nat" "^4.1.27" - "@endo/promise-kit" "^0.2.56" + "@endo/eventual-send" "^0.17.3" + "@endo/marshal" "^0.8.6" + "@endo/nat" "^4.1.28" + "@endo/promise-kit" "^0.2.57" -"@endo/check-bundle@^0.2.18": - version "0.2.18" - resolved "https://registry.yarnpkg.com/@endo/check-bundle/-/check-bundle-0.2.18.tgz#0880f4237dbc1c72c292aab3eccd7b1c20506a97" - integrity sha512-PQB8ACM6ukv8dihzvqyfnHaKNr/+pKdJKmtZSxBvPmyBR4VnmLRSeTWMgMKnnmd27AyYN7vxdvKrL+qZDMA4RQ== +"@endo/check-bundle@^0.2.19": + version "0.2.19" + resolved "https://registry.yarnpkg.com/@endo/check-bundle/-/check-bundle-0.2.19.tgz#a14037ff390b00e782ccd1684b2325dc0e619077" + integrity sha512-7RgJ4/OOTyA9bM95ECsZbuENrbwCwsfl0EyJUbw//RFUgInFF6d41RZlbu1sHp3q/qlnd8Y0dcKOPoaXBA5gFw== dependencies: - "@endo/base64" "^0.2.31" - "@endo/compartment-mapper" "^0.8.4" + "@endo/base64" "^0.2.32" + "@endo/compartment-mapper" "^0.8.5" -"@endo/cjs-module-analyzer@^0.2.31": - version "0.2.31" - resolved "https://registry.yarnpkg.com/@endo/cjs-module-analyzer/-/cjs-module-analyzer-0.2.31.tgz#baf37a8f7eb6781a0c5780da5d1375e0fe6ad3f1" - integrity sha512-0/BHR1UWN0FpKDUnmuCBd6UQV8QkQ97809iZQ4VIs1faxtAx/z2iZCNnkC3qFOPrurYSp31YbmHDfWsTDYrQ3A== +"@endo/cjs-module-analyzer@^0.2.32": + version "0.2.32" + resolved "https://registry.yarnpkg.com/@endo/cjs-module-analyzer/-/cjs-module-analyzer-0.2.32.tgz#37bec3de8eec790e5dd9dbcc23cc3179fa6510cf" + integrity sha512-C6NirDikhF32blKcwdI7ZWPASloky/nII0ra+Gw37SqKyBBfYbdpudPI56W8eu6hgyH3rBdR5S9FOpRnRFoh0A== -"@endo/compartment-mapper@^0.8.4": - version "0.8.4" - resolved "https://registry.yarnpkg.com/@endo/compartment-mapper/-/compartment-mapper-0.8.4.tgz#afae6a4dfc64dff7082e90d7f215a072fb0a9b85" - integrity sha512-OXK3pfsFWa+k6I1sA4UH+XBsXyCd1G8YEJo0PYsHyzErDSnVYQZ8Ka+M+8Jq8jJtE4SFqZqp1KwihCvMJSA6oA== +"@endo/compartment-mapper@^0.8.5": + version "0.8.5" + resolved "https://registry.yarnpkg.com/@endo/compartment-mapper/-/compartment-mapper-0.8.5.tgz#6910d2be41754fde90190671d2fc5dc48d6fb787" + integrity sha512-PKJ1WgYRBkSEJTYOXZTOf9tYQLEkuGTfhAPoKm22loAuaXWI1ortJ7UdRAPLWt95Cd71KGrmfd1FpemGvmr3lQ== dependencies: - "@endo/cjs-module-analyzer" "^0.2.31" - "@endo/static-module-record" "^0.7.19" - "@endo/zip" "^0.2.31" - ses "^0.18.4" + "@endo/cjs-module-analyzer" "^0.2.32" + "@endo/static-module-record" "^0.7.20" + "@endo/zip" "^0.2.32" + ses "^0.18.5" + +"@endo/env-options@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@endo/env-options/-/env-options-0.1.1.tgz#568e37d9be2cbbcb39de3c0bc717a9d8e2d55e6d" + integrity sha512-QlY6Z2r/izom+wZI0vQtU6yQf5V/EGRMwcqacmZv6j3e9bcYGZbG0ikoa8E155XETKr551BALlJhculBvlBLpg== "@endo/eslint-plugin@^0.4.4": version "0.4.4" @@ -423,140 +428,144 @@ tsutils "~3.21.0" typescript "~4.9.5" -"@endo/eventual-send@^0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@endo/eventual-send/-/eventual-send-0.17.2.tgz#c8710d557c2f57723be05fe99e941cd893acc5d2" - integrity sha512-nux02l2yYXXUeUA2PigOO1K0gbVVMYx3prfYrW/G7Ny6PiDLtOyaeMWwKQwFTgJV2yAkOfvycr4LC1+tm7hu/Q== - -"@endo/exo@^0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@endo/exo/-/exo-0.2.2.tgz#eeebe3eeb40dcf9b409fddf8d5ff73821b470515" - integrity sha512-4787jRJe7nQLV02mCCd1fQ8Ai25ParaIzLBUrxl7UKtsP98LcTlQKAON+OQmnSbV6jjXINa/wHdUeoi8/0xZDA== - dependencies: - "@endo/far" "^0.2.18" - "@endo/patterns" "^0.2.2" - -"@endo/far@^0.2.18", "@endo/far@^0.2.3": - version "0.2.18" - resolved "https://registry.yarnpkg.com/@endo/far/-/far-0.2.18.tgz#8d8ca8ac1f7c4b57871e55c2c2f06c8e4fcf3839" - integrity sha512-NJPz5x11AOsFgxZNSIW4+llQtSUNQtcYCrvxpMwhofti3hncMjhIiUUrMVggw99pdHNmXEBr0gl16H3n/1X0sw== - dependencies: - "@endo/eventual-send" "^0.17.2" - "@endo/pass-style" "^0.1.3" - -"@endo/import-bundle@^0.3.4": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@endo/import-bundle/-/import-bundle-0.3.4.tgz#dd93dca2aa595f669365f05d03affd4465837919" - integrity sha512-MjB7VBJYFgcUhelMddJQf9uMwxqXV1McjVGqoJ3ZJ/OIQZ5BTYqR+uyZOI8CaUqpVmhNbsg3qMw8/wXW304YlA== - dependencies: - "@endo/base64" "^0.2.31" - "@endo/compartment-mapper" "^0.8.4" - -"@endo/init@^0.5.56": - version "0.5.56" - resolved "https://registry.yarnpkg.com/@endo/init/-/init-0.5.56.tgz#c241de519434309f362dc676e76ee36c93240151" - integrity sha512-BKA7O2uy9uaGw9dB9X515SIaTumaO58HD30AXkJllW6bmLM/BxxFM3GCgS127x0Wot1ni32Y0DxkwxdEXFXJEQ== - dependencies: - "@endo/base64" "^0.2.31" - "@endo/eventual-send" "^0.17.2" - "@endo/lockdown" "^0.1.28" - "@endo/promise-kit" "^0.2.56" - -"@endo/lockdown@^0.1.28": - version "0.1.28" - resolved "https://registry.yarnpkg.com/@endo/lockdown/-/lockdown-0.1.28.tgz#43f23dcbb12b6ebd3ad2a3dc8c6bb3609dd9e95f" - integrity sha512-YqurtDU23+0kuWq4J2c94HyRB1aqSB8xEwrx5xTZA9IY/anrtppEiTFGU8tQXqZFhE6bfRzSGWDIVKaXCcm4Lw== +"@endo/eventual-send@^0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@endo/eventual-send/-/eventual-send-0.17.3.tgz#f9892186a7fb7a094cb2fd0c5edc9152dd63286f" + integrity sha512-lr1IMxXQXtJ95t1HI02gF+oStZwhF+rb+AxGqMWS+F+xjrEWSficlRTtEq/yIr9NE3a50XLlv0rdiBCQgs+MfA== dependencies: - ses "^0.18.4" + "@endo/env-options" "^0.1.1" -"@endo/marshal@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@endo/marshal/-/marshal-0.8.5.tgz#c1a10ed4d9b37ee7444d314d8dec9a9a96728d64" - integrity sha512-oj2Ag/TlkoMPv8m00fjoa1uWPgDwm5w8nYUU0DPqaCLfTNGRe8a8s7kYDPbv+sQdiQbkZ1RgUQjdyr/O2Mvs+A== - dependencies: - "@endo/eventual-send" "^0.17.2" - "@endo/nat" "^4.1.27" - "@endo/pass-style" "^0.1.3" - "@endo/promise-kit" "^0.2.56" - -"@endo/nat@^4.1.27": - version "4.1.27" - resolved "https://registry.yarnpkg.com/@endo/nat/-/nat-4.1.27.tgz#8f1a398b39f994b0769070a3fb36d3397bf86794" - integrity sha512-mKRdIc4NvrxZ1qPBcYZH6zaj0RsRwADaCcfPNRnGWcHC9dY8DmZDDcgqNdSBFLiEto1RnXeoKAEGxk6hn253Ow== - -"@endo/netstring@^0.3.26": - version "0.3.26" - resolved "https://registry.yarnpkg.com/@endo/netstring/-/netstring-0.3.26.tgz#7da8338cb372772894e1ebcc0728b23666fa2c89" - integrity sha512-IT3epH32/jLiNBwKhM+7BRjm0OwFjRooeQyymfGZUKGN95fm+hKHEbm8pDmWT8bnwSzHB++wsaQJTpi39U+obg== - dependencies: - "@endo/init" "^0.5.56" - "@endo/stream" "^0.3.25" - ses "^0.18.4" - -"@endo/pass-style@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@endo/pass-style/-/pass-style-0.1.3.tgz#951056a2869b04f2aab0928b61a91ae7252ddbe4" - integrity sha512-V2FLPBUJXsJYWjMSoZW2IopOuggEX14pm8AHfOVXUceF3uvHbdJj7qwKAuIIOhPApZ/TV+6nWYi86eb393Ic2w== +"@endo/exo@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@endo/exo/-/exo-0.2.3.tgz#89158da1ade74b58b81d8d1af3a1d482247f8149" + integrity sha512-8V9UXTfZ+QH0TTkZv1o17t1k4HabYahMGYrAJIGvI1D9qjkgN8ozrTuoZ0MOzsXGuNbKVtM/WG9mUA2ohulRDA== + dependencies: + "@endo/env-options" "^0.1.1" + "@endo/far" "^0.2.19" + "@endo/pass-style" "^0.1.4" + "@endo/patterns" "^0.2.3" + +"@endo/far@^0.2.19", "@endo/far@^0.2.3": + version "0.2.19" + resolved "https://registry.yarnpkg.com/@endo/far/-/far-0.2.19.tgz#ae2d4e4426990174e0c9397a4b92aa7543d27e89" + integrity sha512-vX1kL+oskiyKSpRwW3HOwtpGFto3svj35jtx5AheVXmk34i+Uehpt8uS90HHX+OtrL0+yUMLKRWHCMMzDpJafg== + dependencies: + "@endo/eventual-send" "^0.17.3" + "@endo/pass-style" "^0.1.4" + +"@endo/import-bundle@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@endo/import-bundle/-/import-bundle-0.3.5.tgz#b2b21f58c9fd077857754ccb7e9d0a91868de88d" + integrity sha512-jYBXGnvWhw4w/N8ZPGar+sftNg/wgI5mCCE0ooUYMUBvM5ulPHI+/KYW3FD9pSwU8h7d5Nvs3bvA4w6dN7b67A== + dependencies: + "@endo/base64" "^0.2.32" + "@endo/compartment-mapper" "^0.8.5" + +"@endo/init@^0.5.57": + version "0.5.57" + resolved "https://registry.yarnpkg.com/@endo/init/-/init-0.5.57.tgz#446908cef5c610593c6ad4a79d38fdbc5001e8ed" + integrity sha512-g98NZoYxoA6vKliv+1RDIrlrxmgBdWFlNezJwkvcLZSv2mH5UCOY8Aea05uUbVcT/MyCKrTvCYhcInDIQpzmiw== + dependencies: + "@endo/base64" "^0.2.32" + "@endo/eventual-send" "^0.17.3" + "@endo/lockdown" "^0.1.29" + "@endo/promise-kit" "^0.2.57" + +"@endo/lockdown@^0.1.29": + version "0.1.29" + resolved "https://registry.yarnpkg.com/@endo/lockdown/-/lockdown-0.1.29.tgz#7ef808bc03c53813b1e90101598789bbc5ecc3de" + integrity sha512-1fnj9qp/b4sw+LaUORQ0MVdIpvlVWFjMquJ809TLSqEcWbydN8nr1ogNPSKYAsaY00v3u3itF2d5CT3P0ciwBA== + dependencies: + ses "^0.18.5" + +"@endo/marshal@^0.8.6": + version "0.8.6" + resolved "https://registry.yarnpkg.com/@endo/marshal/-/marshal-0.8.6.tgz#5463b9736af73d01293f9b8b7747bdee9d7998b3" + integrity sha512-L5WJ0y+SYy4CVibwHWHjVo5kZJmxZd/wLG6EEm7cpVtyJudyf5UkPr3tpjDJFOS7U2t1VC2omaGlhP6vJYheHw== + dependencies: + "@endo/eventual-send" "^0.17.3" + "@endo/nat" "^4.1.28" + "@endo/pass-style" "^0.1.4" + "@endo/promise-kit" "^0.2.57" + +"@endo/nat@^4.1.28": + version "4.1.28" + resolved "https://registry.yarnpkg.com/@endo/nat/-/nat-4.1.28.tgz#8e0fb3801c6f95c76b07cdb904071b04a5567af3" + integrity sha512-2A2ghA7I4no6/Lil/SwTZ9/eb3Ur817cxVRyqhRHBHRzVAYvVeF7eY0f43m/Do6V/3O9mor3jsZjeNVE2/YLXg== + +"@endo/netstring@^0.3.27": + version "0.3.27" + resolved "https://registry.yarnpkg.com/@endo/netstring/-/netstring-0.3.27.tgz#6d880f3b736619e123c5319d409b2925acd73073" + integrity sha512-kEpmiPdrdLDySjoZb2oZ2AuUt0advvDxRpaGe6qp4f5gEXx/F66098JDG74VfaVINmuONtm9Lf9dGIeSx1CZaw== + dependencies: + "@endo/init" "^0.5.57" + "@endo/stream" "^0.3.26" + ses "^0.18.5" + +"@endo/pass-style@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@endo/pass-style/-/pass-style-0.1.4.tgz#e46cf77bfd5310fcbdd90553bdefad17a53c2fe0" + integrity sha512-WPhPzfrmpw5goLQz1MUQJuml2FkjhrjeSvgQe9Ml7vZb8Z3Ia0o395nctJllth3IJ9VNYT4iBMGe9UcXFwT3pg== dependencies: - "@endo/promise-kit" "^0.2.56" - "@fast-check/ava" "^1.1.3" + "@endo/promise-kit" "^0.2.57" + "@fast-check/ava" "^1.1.5" -"@endo/patterns@^0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@endo/patterns/-/patterns-0.2.2.tgz#d4c4d63bf450477ed9a9cf194b4a8daa56fcb4f4" - integrity sha512-rbS4BLRohZQhB+0aEPBoxmzOfOie9nAu8Qx55Fxe8xFQKS4k9acafeIYmKh9nvslEJISYQmogy5Lewm5mgdSjg== +"@endo/patterns@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@endo/patterns/-/patterns-0.2.3.tgz#d9885a8dbe18cb64af11662d8a71675303f6f001" + integrity sha512-hMIGC2Cyi8PPiDwS70Ul0b3ZV5pkN9PJZEPhg50omY6qTaJFVhQQ48irP/wqhIKljI0wmEs5hAX+ZPDjcECRPQ== dependencies: - "@endo/eventual-send" "^0.17.2" - "@endo/marshal" "^0.8.5" - "@endo/promise-kit" "^0.2.56" + "@endo/eventual-send" "^0.17.3" + "@endo/marshal" "^0.8.6" + "@endo/promise-kit" "^0.2.57" -"@endo/promise-kit@^0.2.56": - version "0.2.56" - resolved "https://registry.yarnpkg.com/@endo/promise-kit/-/promise-kit-0.2.56.tgz#24ed3cf87af1eec65f4635643b7e67617b909e71" - integrity sha512-eKlOg353jJCHwDAwXCajtcAiTTjGkd7oWBXniEEc97gZHK83MeB3pnGT2lhoeq3xzdNw3Xv2DDsowBI194AXeA== +"@endo/promise-kit@^0.2.57": + version "0.2.57" + resolved "https://registry.yarnpkg.com/@endo/promise-kit/-/promise-kit-0.2.57.tgz#cbd81c399fd7d0a83628dd17fa7baf9185b5e4cf" + integrity sha512-sl0VD7OtY6stfGShyMRC99LxdLqftgCPjD1Bq6PsBkpXxCD+JMnYzm57g7XDzj5n32RlBJi8YsD37396qLjPnw== dependencies: - ses "^0.18.4" + ses "^0.18.5" -"@endo/ses-ava@^0.2.40": - version "0.2.40" - resolved "https://registry.yarnpkg.com/@endo/ses-ava/-/ses-ava-0.2.40.tgz#8a6c1f668131ecbe4d06339cac2a8346253089b8" - integrity sha512-YIiAPuUfjS5dzyqeiV36FASv4YiSdkRzdxXbntNTBdOvdDymbT37SMkG0mUxD5YZRQuKMTu9xQyaGYSRqf8zaw== +"@endo/ses-ava@^0.2.41": + version "0.2.41" + resolved "https://registry.yarnpkg.com/@endo/ses-ava/-/ses-ava-0.2.41.tgz#537fd62071240845dbd6cc3e603b7c4e7962d169" + integrity sha512-LtHzqcTQ5IasibBPYxr46Th/lsyk4AFYfBIX4fzWWP6fbcZ7IPRMzRupEJ19ee+13vPRqJ/O+/seS8Mk8oCqAA== dependencies: - ses "^0.18.4" + ses "^0.18.5" -"@endo/static-module-record@^0.7.19": - version "0.7.19" - resolved "https://registry.yarnpkg.com/@endo/static-module-record/-/static-module-record-0.7.19.tgz#661b56a269837620d9d6cf3dc9045b91515ce0d0" - integrity sha512-hu74zYsbQ7ZLHvOSICtE7uAlc1yCClr7z6d3eg4K11lxUI72QWcVR9J8a6wodIkYWGjD9laKaOIAvIIoUPMmpA== +"@endo/static-module-record@^0.7.20": + version "0.7.20" + resolved "https://registry.yarnpkg.com/@endo/static-module-record/-/static-module-record-0.7.20.tgz#5d9583aaa8042b8a6de58c72f765e5a28e880489" + integrity sha512-qpow712L7Bh7F3olFW9e15PcDWnC2eSY4xPdhpZoYTzedsyjCETRgxFWY6+DdT193lNlyKIn0On1O1Go+5WmBA== dependencies: "@agoric/babel-generator" "^7.17.6" "@babel/parser" "^7.17.3" "@babel/traverse" "^7.17.3" "@babel/types" "^7.17.0" - ses "^0.18.4" + ses "^0.18.5" -"@endo/stream-node@^0.2.26": - version "0.2.26" - resolved "https://registry.yarnpkg.com/@endo/stream-node/-/stream-node-0.2.26.tgz#bf3c6ce6c506cde4468a64d220b8df4224638e16" - integrity sha512-+UUr1/wZZIWz3KhuAwQr9HPsZv5P8zykw+z1aVFDckTMcdKRyK8yxSg35iEcntvyZoP40LEdnArCXuuEWjm0qw== +"@endo/stream-node@^0.2.27": + version "0.2.27" + resolved "https://registry.yarnpkg.com/@endo/stream-node/-/stream-node-0.2.27.tgz#a5d14c696e51631796488bd4c870ee5ef58f7568" + integrity sha512-eVqItuFz706MliYft3IvWNC2WG3m6neXN+U6EC+Awbtx1yipYzTufNT+tjAiLJH7xN8YzmAPnyJbEhG5LqCQ3w== dependencies: - "@endo/init" "^0.5.56" - "@endo/stream" "^0.3.25" - ses "^0.18.4" + "@endo/init" "^0.5.57" + "@endo/stream" "^0.3.26" + ses "^0.18.5" -"@endo/stream@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@endo/stream/-/stream-0.3.25.tgz#a49b012b62f345e3de6b360dc30ec27cc32a455f" - integrity sha512-qSl9Q9o20/4nKdXlXYCs6KJfeANMKBLrsi7JIxWV1jP9YzIDdq/PkEJsMNq89Z/HWXtPRfEQ4JEMd3O1WBYU5Q== +"@endo/stream@^0.3.26": + version "0.3.26" + resolved "https://registry.yarnpkg.com/@endo/stream/-/stream-0.3.26.tgz#bf4a1043bf060bf7dfbc3b1c0de8fcb9d61c48ba" + integrity sha512-qMF0P/+jBIzGcusDcByK53hVAAEqZiMATi6xE6MPk2u2WFdOOA0SXvt0g7hr31lFbYiZ7BAlR0z+MHYQdw/GbA== dependencies: - "@endo/eventual-send" "^0.17.2" - "@endo/promise-kit" "^0.2.56" - ses "^0.18.4" + "@endo/eventual-send" "^0.17.3" + "@endo/promise-kit" "^0.2.57" + ses "^0.18.5" -"@endo/zip@^0.2.31": - version "0.2.31" - resolved "https://registry.yarnpkg.com/@endo/zip/-/zip-0.2.31.tgz#371b1a9ca8b3216ad8a3564e97e3d747be42a657" - integrity sha512-rNCZtQzPm6Q8kW69gyeU0hUwKZtwuR8cX1+URgpDuUuaMUbKWBaqURKOmrqKVtE5fkqCE7pSrHvGH02DMDbDHQ== +"@endo/zip@^0.2.32": + version "0.2.32" + resolved "https://registry.yarnpkg.com/@endo/zip/-/zip-0.2.32.tgz#f576caf6abf6b72719ee2ca6359234c2908aef5f" + integrity sha512-jYE/ssG7u8kqVfjlb4Qw7lJwUmpUuR0ba+dg96X9NFUMJlNlx8L9G/otihhZTHbt8ZAxmkMrERfPuGXvuRFiPA== "@es-joy/jsdoccomment@~0.39.4": version "0.39.4" @@ -567,17 +576,17 @@ esquery "^1.5.0" jsdoc-type-pratt-parser "~4.0.0" -"@eslint-community/eslint-utils@^4.2.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.3.0.tgz#a556790523a351b4e47e9d385f47265eaaf9780a" - integrity sha512-v3oplH6FYCULtFuCeqyuTd9D2WKO937Dxdq+GmHOLL72TTRriLxz2VLlNfkZRsvj6PKnOPAtuT6dwrs/pA5DvA== +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.4.0.tgz#3e61c564fcd6b921cb789838631c5ee44df09403" - integrity sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ== +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.1": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" + integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== "@eslint/eslintrc@^2.1.0": version "2.1.0" @@ -599,81 +608,7 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af" integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== -"@evocateur/libnpmaccess@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" - integrity sha512-KSCAHwNWro0CF2ukxufCitT9K5LjL/KuMmNzSu8wuwN2rjyKHD8+cmOsiybK+W5hdnwc5M1SmRlVCaMHQo+3rg== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - npm-package-arg "^6.1.0" - -"@evocateur/libnpmpublish@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz#55df09d2dca136afba9c88c759ca272198db9f1a" - integrity sha512-MJrrk9ct1FeY9zRlyeoyMieBjGDG9ihyyD9/Ft6MMrTxql9NyoEx2hw9casTIP4CdqEVu+3nQ2nXxoJ8RCXyFg== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - lodash.clonedeep "^4.5.0" - normalize-package-data "^2.4.0" - npm-package-arg "^6.1.0" - semver "^5.5.1" - ssri "^6.0.1" - -"@evocateur/npm-registry-fetch@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#8c4c38766d8d32d3200fcb0a83f064b57365ed66" - integrity sha512-k1WGfKRQyhJpIr+P17O5vLIo2ko1PFLKwoetatdduUSt/aQ4J2sJrJwwatdI5Z3SiYk/mRH9S3JpdmMFd/IK4g== - dependencies: - JSONStream "^1.3.4" - bluebird "^3.5.1" - figgy-pudding "^3.4.1" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - npm-package-arg "^6.1.0" - safe-buffer "^5.1.2" - -"@evocateur/pacote@^9.6.3": - version "9.6.5" - resolved "https://registry.yarnpkg.com/@evocateur/pacote/-/pacote-9.6.5.tgz#33de32ba210b6f17c20ebab4d497efc6755f4ae5" - integrity sha512-EI552lf0aG2nOV8NnZpTxNo2PcXKPmDbF9K8eCBFQdIZwHNGN/mi815fxtmUMa2wTa1yndotICIDt/V0vpEx2w== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - bluebird "^3.5.3" - cacache "^12.0.3" - chownr "^1.1.2" - figgy-pudding "^3.5.1" - get-stream "^4.1.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - minimatch "^3.0.4" - minipass "^2.3.5" - mississippi "^3.0.0" - mkdirp "^0.5.1" - normalize-package-data "^2.5.0" - npm-package-arg "^6.1.0" - npm-packlist "^1.4.4" - npm-pick-manifest "^3.0.0" - osenv "^0.1.5" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - protoduck "^5.0.1" - rimraf "^2.6.3" - safe-buffer "^5.2.0" - semver "^5.7.0" - ssri "^6.0.1" - tar "^4.4.10" - unique-filename "^1.1.1" - which "^1.3.1" - -"@fast-check/ava@^1.1.3", "@fast-check/ava@^1.1.5": +"@fast-check/ava@^1.1.5": version "1.1.5" resolved "https://registry.yarnpkg.com/@fast-check/ava/-/ava-1.1.5.tgz#b471ce5252a3d62eb9bc316f1b7b0a79a7c8341f" integrity sha512-OopAjw8v6r3sEqR02O61r2yGoE4B1nWDRXAkB4tuK/v7qemkf86Fz+GRgBgAkSFql85VAeUq+wlx0F3Y7wJzzA== @@ -709,11 +644,33 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@hutson/parse-repository-url@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" + integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== + "@iarna/toml@^2.2.3": version "2.2.3" resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.3.tgz#f060bf6eaafae4d56a7dac618980838b0696e2ab" integrity sha512-FmuxfCuolpLl0AnQ2NHSzoUKWEJDFl63qXjzdoWBVyFCXzMGm1spBzk7LeHNoVCiWCF7mRVms9e6jEV9+MoPbg== +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@isaacs/string-locale-compare@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" + integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== + "@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" @@ -765,690 +722,689 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" -"@lerna/add@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.21.0.tgz#27007bde71cc7b0a2969ab3c2f0ae41578b4577b" - integrity sha512-vhUXXF6SpufBE1EkNEXwz1VLW03f177G9uMOFMQkp6OJ30/PWg4Ekifuz9/3YfgB2/GH8Tu4Lk3O51P2Hskg/A== - dependencies: - "@evocateur/pacote" "^9.6.3" - "@lerna/bootstrap" "3.21.0" - "@lerna/command" "3.21.0" - "@lerna/filter-options" "3.20.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/validation-error" "3.13.0" +"@lerna/add@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/add/-/add-5.6.2.tgz#d0e25fd4900b6f8a9548f940cc016ce8a3e2d2ba" + integrity sha512-NHrm7kYiqP+EviguY7/NltJ3G9vGmJW6v2BASUOhP9FZDhYbq3O+rCDlFdoVRNtcyrSg90rZFMOWHph4KOoCQQ== + dependencies: + "@lerna/bootstrap" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/filter-options" "5.6.2" + "@lerna/npm-conf" "5.6.2" + "@lerna/validation-error" "5.6.2" dedent "^0.7.0" - npm-package-arg "^6.1.0" - p-map "^2.1.0" - semver "^6.2.0" + npm-package-arg "8.1.1" + p-map "^4.0.0" + pacote "^13.6.1" + semver "^7.3.4" -"@lerna/bootstrap@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.21.0.tgz#bcd1b651be5b0970b20d8fae04c864548123aed6" - integrity sha512-mtNHlXpmvJn6JTu0KcuTTPl2jLsDNud0QacV/h++qsaKbhAaJr/FElNZ5s7MwZFUM3XaDmvWzHKaszeBMHIbBw== - dependencies: - "@lerna/command" "3.21.0" - "@lerna/filter-options" "3.20.0" - "@lerna/has-npm-version" "3.16.5" - "@lerna/npm-install" "3.16.5" - "@lerna/package-graph" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/rimraf-dir" "3.16.5" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.5" - "@lerna/symlink-binary" "3.17.0" - "@lerna/symlink-dependencies" "3.17.0" - "@lerna/validation-error" "3.13.0" +"@lerna/bootstrap@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-5.6.2.tgz#a0f015ae7c30189a3064c0d5940134010ece635e" + integrity sha512-S2fMOEXbef7nrybQhzBywIGSLhuiQ5huPp1sU+v9Y6XEBsy/2IA+lb0gsZosvPqlRfMtiaFstL+QunaBhlWECA== + dependencies: + "@lerna/command" "5.6.2" + "@lerna/filter-options" "5.6.2" + "@lerna/has-npm-version" "5.6.2" + "@lerna/npm-install" "5.6.2" + "@lerna/package-graph" "5.6.2" + "@lerna/pulse-till-done" "5.6.2" + "@lerna/rimraf-dir" "5.6.2" + "@lerna/run-lifecycle" "5.6.2" + "@lerna/run-topologically" "5.6.2" + "@lerna/symlink-binary" "5.6.2" + "@lerna/symlink-dependencies" "5.6.2" + "@lerna/validation-error" "5.6.2" + "@npmcli/arborist" "5.3.0" dedent "^0.7.0" - get-port "^4.2.0" - multimatch "^3.0.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - p-finally "^1.0.0" - p-map "^2.1.0" - p-map-series "^1.0.0" - p-waterfall "^1.0.0" - read-package-tree "^5.1.6" - semver "^6.2.0" + get-port "^5.1.1" + multimatch "^5.0.0" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + p-map "^4.0.0" + p-map-series "^2.1.0" + p-waterfall "^2.1.1" + semver "^7.3.4" -"@lerna/changed@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.21.0.tgz#108e15f679bfe077af500f58248c634f1044ea0b" - integrity sha512-hzqoyf8MSHVjZp0gfJ7G8jaz+++mgXYiNs9iViQGA8JlN/dnWLI5sWDptEH3/B30Izo+fdVz0S0s7ydVE3pWIw== +"@lerna/changed@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-5.6.2.tgz#96a647ed202d8146b2077bf13a682466e8607f9a" + integrity sha512-uUgrkdj1eYJHQGsXXlpH5oEAfu3x0qzeTjgvpdNrxHEdQWi7zWiW59hRadmiImc14uJJYIwVK5q/QLugrsdGFQ== dependencies: - "@lerna/collect-updates" "3.20.0" - "@lerna/command" "3.21.0" - "@lerna/listable" "3.18.5" - "@lerna/output" "3.13.0" + "@lerna/collect-updates" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/listable" "5.6.2" + "@lerna/output" "5.6.2" -"@lerna/check-working-tree@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.16.5.tgz#b4f8ae61bb4523561dfb9f8f8d874dd46bb44baa" - integrity sha512-xWjVBcuhvB8+UmCSb5tKVLB5OuzSpw96WEhS2uz6hkWVa/Euh1A0/HJwn2cemyK47wUrCQXtczBUiqnq9yX5VQ== +"@lerna/check-working-tree@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-5.6.2.tgz#dd03b0c3fe9f141c31c0c47a9a0162ee9c0f6c28" + integrity sha512-6Vf3IB6p+iNIubwVgr8A/KOmGh5xb4SyRmhFtAVqe33yWl2p3yc+mU5nGoz4ET3JLF1T9MhsePj0hNt6qyOTLQ== dependencies: - "@lerna/collect-uncommitted" "3.16.5" - "@lerna/describe-ref" "3.16.5" - "@lerna/validation-error" "3.13.0" + "@lerna/collect-uncommitted" "5.6.2" + "@lerna/describe-ref" "5.6.2" + "@lerna/validation-error" "5.6.2" -"@lerna/child-process@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.16.5.tgz#38fa3c18064aa4ac0754ad80114776a7b36a69b2" - integrity sha512-vdcI7mzei9ERRV4oO8Y1LHBZ3A5+ampRKg1wq5nutLsUA4mEBN6H7JqjWOMY9xZemv6+kATm2ofjJ3lW5TszQg== +"@lerna/child-process@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-5.6.2.tgz#4adbd09ff5a8e43b9471f1a987ae65a7d669421b" + integrity sha512-QIOQ3jIbWdduHd5892fbo3u7/dQgbhzEBB7cvf+Ys/iCPP8UQrBECi1lfRgA4kcTKC2MyMz0SoyXZz/lFcXc3A== dependencies: - chalk "^2.3.1" - execa "^1.0.0" - strong-log-transformer "^2.0.0" + chalk "^4.1.0" + execa "^5.0.0" + strong-log-transformer "^2.1.0" + +"@lerna/clean@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-5.6.2.tgz#9611adf3e3035731af2b71aabeb850f7d16fc27d" + integrity sha512-A7j8r0Hk2pGyLUyaCmx4keNHen1L/KdcOjb4nR6X8GtTJR5AeA47a8rRKOCz9wwdyMPlo2Dau7d3RV9viv7a5g== + dependencies: + "@lerna/command" "5.6.2" + "@lerna/filter-options" "5.6.2" + "@lerna/prompt" "5.6.2" + "@lerna/pulse-till-done" "5.6.2" + "@lerna/rimraf-dir" "5.6.2" + p-map "^4.0.0" + p-map-series "^2.1.0" + p-waterfall "^2.1.1" -"@lerna/clean@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.21.0.tgz#c0b46b5300cc3dae2cda3bec14b803082da3856d" - integrity sha512-b/L9l+MDgE/7oGbrav6rG8RTQvRiZLO1zTcG17zgJAAuhlsPxJExMlh2DFwJEVi2les70vMhHfST3Ue1IMMjpg== - dependencies: - "@lerna/command" "3.21.0" - "@lerna/filter-options" "3.20.0" - "@lerna/prompt" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/rimraf-dir" "3.16.5" - p-map "^2.1.0" - p-map-series "^1.0.0" - p-waterfall "^1.0.0" - -"@lerna/cli@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.18.5.tgz#c90c461542fcd35b6d5b015a290fb0dbfb41d242" - integrity sha512-erkbxkj9jfc89vVs/jBLY/fM0I80oLmJkFUV3Q3wk9J3miYhP14zgVEBsPZY68IZlEjT6T3Xlq2xO1AVaatHsA== - dependencies: - "@lerna/global-options" "3.13.0" +"@lerna/cli@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-5.6.2.tgz#87a3dea0f066fa4b01c38ab191f316885dfe9fcd" + integrity sha512-w0NRIEqDOmYKlA5t0iyqx0hbY7zcozvApmfvwF0lhkuhf3k6LRAFSamtimGQWicC779a7J2NXw4ASuBV47Fs1Q== + dependencies: + "@lerna/global-options" "5.6.2" dedent "^0.7.0" - npmlog "^4.1.2" - yargs "^14.2.2" - -"@lerna/collect-uncommitted@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-3.16.5.tgz#a494d61aac31cdc7aec4bbe52c96550274132e63" - integrity sha512-ZgqnGwpDZiWyzIQVZtQaj9tRizsL4dUOhuOStWgTAw1EMe47cvAY2kL709DzxFhjr6JpJSjXV5rZEAeU3VE0Hg== - dependencies: - "@lerna/child-process" "3.16.5" - chalk "^2.3.1" - figgy-pudding "^3.5.1" - npmlog "^4.1.2" - -"@lerna/collect-updates@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.20.0.tgz#62f9d76ba21a25b7d9fbf31c02de88744a564bd1" - integrity sha512-qBTVT5g4fupVhBFuY4nI/3FSJtQVcDh7/gEPOpRxoXB/yCSnT38MFHXWl+y4einLciCjt/+0x6/4AG80fjay2Q== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/describe-ref" "3.16.5" + npmlog "^6.0.2" + yargs "^16.2.0" + +"@lerna/collect-uncommitted@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-5.6.2.tgz#8f62d5a57c7800e9f5278897c7b254c1e3d425fe" + integrity sha512-i0jhxpypyOsW2PpPwIw4xg6EPh7/N3YuiI6P2yL7PynZ8nOv8DkIdoyMkhUP4gALjBfckH8Bj94eIaKMviqW4w== + dependencies: + "@lerna/child-process" "5.6.2" + chalk "^4.1.0" + npmlog "^6.0.2" + +"@lerna/collect-updates@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-5.6.2.tgz#7dc9df48183ef35a975154182d338c64de76104f" + integrity sha512-DdTK13X6PIsh9HINiMniFeiivAizR/1FBB+hDVe6tOhsXFBfjHMw1xZhXlE+mYIoFmDm1UFK7zvQSexoaxRqFA== + dependencies: + "@lerna/child-process" "5.6.2" + "@lerna/describe-ref" "5.6.2" minimatch "^3.0.4" - npmlog "^4.1.2" - slash "^2.0.0" + npmlog "^6.0.2" + slash "^3.0.0" -"@lerna/command@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.21.0.tgz#9a2383759dc7b700dacfa8a22b2f3a6e190121f7" - integrity sha512-T2bu6R8R3KkH5YoCKdutKv123iUgUbW8efVjdGCDnCMthAQzoentOJfDeodBwn0P2OqCl3ohsiNVtSn9h78fyQ== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/package-graph" "3.18.5" - "@lerna/project" "3.21.0" - "@lerna/validation-error" "3.13.0" - "@lerna/write-log-file" "3.13.0" +"@lerna/command@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/command/-/command-5.6.2.tgz#6cbb42b63c40a33565a7d39302d0e171e8e0f5b6" + integrity sha512-eLVGI9TmxcaGt1M7TXGhhBZoeWOtOedMiH7NuCGHtL6TMJ9k+SCExyx+KpNmE6ImyNOzws6EvYLPLjftiqmoaA== + dependencies: + "@lerna/child-process" "5.6.2" + "@lerna/package-graph" "5.6.2" + "@lerna/project" "5.6.2" + "@lerna/validation-error" "5.6.2" + "@lerna/write-log-file" "5.6.2" clone-deep "^4.0.1" dedent "^0.7.0" - execa "^1.0.0" + execa "^5.0.0" is-ci "^2.0.0" - npmlog "^4.1.2" - -"@lerna/conventional-commits@3.22.0": - version "3.22.0" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.22.0.tgz#2798f4881ee2ef457bdae027ab7d0bf0af6f1e09" - integrity sha512-z4ZZk1e8Mhz7+IS8NxHr64wyklHctCJyWpJKEZZPJiLFJ8yKto/x38O80R10pIzC0rr8Sy/OsjSH4bl0TbbgqA== - dependencies: - "@lerna/validation-error" "3.13.0" - conventional-changelog-angular "^5.0.3" - conventional-changelog-core "^3.1.6" - conventional-recommended-bump "^5.0.0" - fs-extra "^8.1.0" - get-stream "^4.0.0" - lodash.template "^4.5.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - pify "^4.0.1" - semver "^6.2.0" - -"@lerna/create-symlink@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.16.2.tgz#412cb8e59a72f5a7d9463e4e4721ad2070149967" - integrity sha512-pzXIJp6av15P325sgiIRpsPXLFmkisLhMBCy4764d+7yjf2bzrJ4gkWVMhsv4AdF0NN3OyZ5jjzzTtLNqfR+Jw== - dependencies: - "@zkochan/cmd-shim" "^3.1.0" - fs-extra "^8.1.0" - npmlog "^4.1.2" - -"@lerna/create@3.22.0": - version "3.22.0" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.22.0.tgz#d6bbd037c3dc5b425fe5f6d1b817057c278f7619" - integrity sha512-MdiQQzCcB4E9fBF1TyMOaAEz9lUjIHp1Ju9H7f3lXze5JK6Fl5NYkouAvsLgY6YSIhXMY8AHW2zzXeBDY4yWkw== - dependencies: - "@evocateur/pacote" "^9.6.3" - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.21.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/validation-error" "3.13.0" - camelcase "^5.0.0" - dedent "^0.7.0" - fs-extra "^8.1.0" - globby "^9.2.0" - init-package-json "^1.10.3" - npm-package-arg "^6.1.0" - p-reduce "^1.0.0" - pify "^4.0.1" - semver "^6.2.0" - slash "^2.0.0" - validate-npm-package-license "^3.0.3" - validate-npm-package-name "^3.0.0" - whatwg-url "^7.0.0" + npmlog "^6.0.2" + +"@lerna/conventional-commits@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-5.6.2.tgz#23f1a86ab79e48609c98a572eb59a705d7f0512f" + integrity sha512-fPrJpYJhxCgY2uyOCTcAAC6+T6lUAtpEGxLbjWHWTb13oKKEygp9THoFpe6SbAD0fYMb3jeZCZCqNofM62rmuA== + dependencies: + "@lerna/validation-error" "5.6.2" + conventional-changelog-angular "^5.0.12" + conventional-changelog-core "^4.2.4" + conventional-recommended-bump "^6.1.0" + fs-extra "^9.1.0" + get-stream "^6.0.0" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + pify "^5.0.0" + semver "^7.3.4" -"@lerna/describe-ref@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.16.5.tgz#a338c25aaed837d3dc70b8a72c447c5c66346ac0" - integrity sha512-c01+4gUF0saOOtDBzbLMFOTJDHTKbDFNErEY6q6i9QaXuzy9LNN62z+Hw4acAAZuJQhrVWncVathcmkkjvSVGw== +"@lerna/create-symlink@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-5.6.2.tgz#9bd327128e30a144ef50a45242433a2325081391" + integrity sha512-0WIs3P6ohPVh2+t5axrLZDE5Dt7fe3Kv0Auj0sBiBd6MmKZ2oS76apIl0Bspdbv8jX8+TRKGv6ib0280D0dtEw== dependencies: - "@lerna/child-process" "3.16.5" - npmlog "^4.1.2" + cmd-shim "^5.0.0" + fs-extra "^9.1.0" + npmlog "^6.0.2" -"@lerna/diff@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.21.0.tgz#e6df0d8b9916167ff5a49fcb02ac06424280a68d" - integrity sha512-5viTR33QV3S7O+bjruo1SaR40m7F2aUHJaDAC7fL9Ca6xji+aw1KFkpCtVlISS0G8vikUREGMJh+c/VMSc8Usw== +"@lerna/create@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-5.6.2.tgz#2c2e4b089cd8426cd256c6b0a0df5e676aa3503a" + integrity sha512-+Y5cMUxMNXjTTU9IHpgRYIwKo39w+blui1P+s+qYlZUSCUAew0xNpOBG8iN0Nc5X9op4U094oIdHxv7Dyz6tWQ== dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.21.0" - "@lerna/validation-error" "3.13.0" - npmlog "^4.1.2" + "@lerna/child-process" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/npm-conf" "5.6.2" + "@lerna/validation-error" "5.6.2" + dedent "^0.7.0" + fs-extra "^9.1.0" + init-package-json "^3.0.2" + npm-package-arg "8.1.1" + p-reduce "^2.1.0" + pacote "^13.6.1" + pify "^5.0.0" + semver "^7.3.4" + slash "^3.0.0" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^4.0.0" + yargs-parser "20.2.4" + +"@lerna/describe-ref@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-5.6.2.tgz#8beb9884b59c419c67cec935cd90c08704e4c9b0" + integrity sha512-UqU0N77aT1W8duYGir7R+Sk3jsY/c4lhcCEcnayMpFScMbAp0ETGsW04cYsHK29sgg+ZCc5zEwebBqabWhMhnA== + dependencies: + "@lerna/child-process" "5.6.2" + npmlog "^6.0.2" + +"@lerna/diff@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-5.6.2.tgz#059f62c95e08a506574e0e66044934a395e15b11" + integrity sha512-aHKzKvUvUI8vOcshC2Za/bdz+plM3r/ycqUrPqaERzp+kc1pYHyPeXezydVdEmgmmwmyKI5hx4+2QNnzOnun2A== + dependencies: + "@lerna/child-process" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/validation-error" "5.6.2" + npmlog "^6.0.2" + +"@lerna/exec@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-5.6.2.tgz#b4edee66e26760de28bbf8472993ae8ad7508073" + integrity sha512-meZozok5stK7S0oAVn+kdbTmU+kHj9GTXjW7V8kgwG9ld+JJMTH3nKK1L3mEKyk9TFu9vFWyEOF7HNK6yEOoVg== + dependencies: + "@lerna/child-process" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/filter-options" "5.6.2" + "@lerna/profiler" "5.6.2" + "@lerna/run-topologically" "5.6.2" + "@lerna/validation-error" "5.6.2" + p-map "^4.0.0" -"@lerna/exec@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.21.0.tgz#17f07533893cb918a17b41bcc566dc437016db26" - integrity sha512-iLvDBrIE6rpdd4GIKTY9mkXyhwsJ2RvQdB9ZU+/NhR3okXfqKc6py/24tV111jqpXTtZUW6HNydT4dMao2hi1Q== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.21.0" - "@lerna/filter-options" "3.20.0" - "@lerna/profiler" "3.20.0" - "@lerna/run-topologically" "3.18.5" - "@lerna/validation-error" "3.13.0" - p-map "^2.1.0" - -"@lerna/filter-options@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.20.0.tgz#0f0f5d5a4783856eece4204708cc902cbc8af59b" - integrity sha512-bmcHtvxn7SIl/R9gpiNMVG7yjx7WyT0HSGw34YVZ9B+3xF/83N3r5Rgtjh4hheLZ+Q91Or0Jyu5O3Nr+AwZe2g== - dependencies: - "@lerna/collect-updates" "3.20.0" - "@lerna/filter-packages" "3.18.0" +"@lerna/filter-options@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-5.6.2.tgz#0201d3aaf71eb7d7f8b1d28193218710c3220aa0" + integrity sha512-4Z0HIhPak2TabTsUqEBQaQeOqgqEt0qyskvsY0oviYvqP/nrJfJBZh4H93jIiNQF59LJCn5Ce3KJJrLExxjlzw== + dependencies: + "@lerna/collect-updates" "5.6.2" + "@lerna/filter-packages" "5.6.2" dedent "^0.7.0" - figgy-pudding "^3.5.1" - npmlog "^4.1.2" + npmlog "^6.0.2" -"@lerna/filter-packages@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.18.0.tgz#6a7a376d285208db03a82958cfb8172e179b4e70" - integrity sha512-6/0pMM04bCHNATIOkouuYmPg6KH3VkPCIgTfQmdkPJTullERyEQfNUKikrefjxo1vHOoCACDpy65JYyKiAbdwQ== +"@lerna/filter-packages@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-5.6.2.tgz#1118a9318f3e08f9e21fb03d23f91e1f77f4a72a" + integrity sha512-el9V2lTEG0Bbz+Omo45hATkRVnChCTJhcTpth19cMJ6mQ4M5H4IgbWCJdFMBi/RpTnOhz9BhJxDbj95kuIvvzw== dependencies: - "@lerna/validation-error" "3.13.0" - multimatch "^3.0.0" - npmlog "^4.1.2" + "@lerna/validation-error" "5.6.2" + multimatch "^5.0.0" + npmlog "^6.0.2" -"@lerna/get-npm-exec-opts@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz#d1b552cb0088199fc3e7e126f914e39a08df9ea5" - integrity sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw== +"@lerna/get-npm-exec-opts@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.6.2.tgz#a5e1a93f62eba817961210b7be148c0768ee4eee" + integrity sha512-0RbSDJ+QC9D5UWZJh3DN7mBIU1NhBmdHOE289oHSkjDY+uEjdzMPkEUy+wZ8fCzMLFnnNQkAEqNaOAzZ7dmFLA== dependencies: - npmlog "^4.1.2" + npmlog "^6.0.2" -"@lerna/get-packed@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-3.16.0.tgz#1b316b706dcee86c7baa55e50b087959447852ff" - integrity sha512-AjsFiaJzo1GCPnJUJZiTW6J1EihrPkc2y3nMu6m3uWFxoleklsSCyImumzVZJssxMi3CPpztj8LmADLedl9kXw== +"@lerna/get-packed@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-5.6.2.tgz#cc5008008442ae00cfa5ed9484e76a44d48e37b6" + integrity sha512-pp5nNDmtrtd21aKHjwwOY5CS7XNIHxINzGa+Jholn1jMDYUtdskpN++ZqYbATGpW831++NJuiuBVyqAWi9xbXg== dependencies: - fs-extra "^8.1.0" - ssri "^6.0.1" - tar "^4.4.8" + fs-extra "^9.1.0" + ssri "^9.0.1" + tar "^6.1.0" -"@lerna/github-client@3.22.0": - version "3.22.0" - resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.22.0.tgz#5d816aa4f76747ed736ae64ff962b8f15c354d95" - integrity sha512-O/GwPW+Gzr3Eb5bk+nTzTJ3uv+jh5jGho9BOqKlajXaOkMYGBELEAqV5+uARNGWZFvYAiF4PgqHb6aCUu7XdXg== +"@lerna/github-client@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-5.6.2.tgz#b40a71ddf5d40aefe178a48713aa107ef735f056" + integrity sha512-pjALazZoRZtKqfwLBwmW3HPptVhQm54PvA8s3qhCQ+3JkqrZiIFwkkxNZxs3jwzr+aaSOzfhSzCndg0urb0GXA== dependencies: - "@lerna/child-process" "3.16.5" + "@lerna/child-process" "5.6.2" "@octokit/plugin-enterprise-rest" "^6.0.1" - "@octokit/rest" "^16.28.4" - git-url-parse "^11.1.2" - npmlog "^4.1.2" - -"@lerna/gitlab-client@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz#91f4ec8c697b5ac57f7f25bd50fe659d24aa96a6" - integrity sha512-OsBvRSejHXUBMgwWQqNoioB8sgzL/Pf1pOUhHKtkiMl6aAWjklaaq5HPMvTIsZPfS6DJ9L5OK2GGZuooP/5c8Q== - dependencies: - node-fetch "^2.5.0" - npmlog "^4.1.2" - whatwg-url "^7.0.0" - -"@lerna/global-options@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.13.0.tgz#217662290db06ad9cf2c49d8e3100ee28eaebae1" - integrity sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ== - -"@lerna/has-npm-version@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.16.5.tgz#ab83956f211d8923ea6afe9b979b38cc73b15326" - integrity sha512-WL7LycR9bkftyqbYop5rEGJ9sRFIV55tSGmbN1HLrF9idwOCD7CLrT64t235t3t4O5gehDnwKI5h2U3oxTrF8Q== - dependencies: - "@lerna/child-process" "3.16.5" - semver "^6.2.0" - -"@lerna/import@3.22.0": - version "3.22.0" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.22.0.tgz#1a5f0394f38e23c4f642a123e5e1517e70d068d2" - integrity sha512-uWOlexasM5XR6tXi4YehODtH9Y3OZrFht3mGUFFT3OIl2s+V85xIGFfqFGMTipMPAGb2oF1UBLL48kR43hRsOg== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.21.0" - "@lerna/prompt" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/validation-error" "3.13.0" + "@octokit/rest" "^19.0.3" + git-url-parse "^13.1.0" + npmlog "^6.0.2" + +"@lerna/gitlab-client@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-5.6.2.tgz#3bb3c350d28f38f719ddbba083ca28dbd353494e" + integrity sha512-TInJmbrsmYIwUyrRxytjO82KjJbRwm67F7LoZs1shAq6rMvNqi4NxSY9j+hT/939alFmEq1zssoy/caeLXHRfQ== + dependencies: + node-fetch "^2.6.1" + npmlog "^6.0.2" + +"@lerna/global-options@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-5.6.2.tgz#30bec81cdb4ac0bb47588e4a502ce908a982ff7c" + integrity sha512-kaKELURXTlczthNJskdOvh6GGMyt24qat0xMoJZ8plYMdofJfhz24h1OFcvB/EwCUwP/XV1+ohE5P+vdktbrEg== + +"@lerna/has-npm-version@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-5.6.2.tgz#5359e9870941f66fb3b859995120801800880944" + integrity sha512-kXCnSzffmTWsaK0ol30coyCfO8WH26HFbmJjRBzKv7VGkuAIcB6gX2gqRRgNLLlvI+Yrp+JSlpVNVnu15SEH2g== + dependencies: + "@lerna/child-process" "5.6.2" + semver "^7.3.4" + +"@lerna/import@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/import/-/import-5.6.2.tgz#7be2321fbc41fa0f7fdd233eb62571e8418fcb75" + integrity sha512-xQUE49mtcP0z3KUdXBsyvp8rGDz6phuYUoQbhcFRJ7WPcQKzMvtm0XYrER6c2YWEX7QOuDac6tU82P8zTrTBaA== + dependencies: + "@lerna/child-process" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/prompt" "5.6.2" + "@lerna/pulse-till-done" "5.6.2" + "@lerna/validation-error" "5.6.2" dedent "^0.7.0" - fs-extra "^8.1.0" - p-map-series "^1.0.0" + fs-extra "^9.1.0" + p-map-series "^2.1.0" + +"@lerna/info@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/info/-/info-5.6.2.tgz#82280cdae6e08aab5b3017c359f6e496116a62ae" + integrity sha512-MPjY5Olj+fiZHgfEdwXUFRKamdEuLr9Ob/qut8JsB/oQSQ4ALdQfnrOcMT8lJIcC2R67EA5yav2lHPBIkezm8A== + dependencies: + "@lerna/command" "5.6.2" + "@lerna/output" "5.6.2" + envinfo "^7.7.4" + +"@lerna/init@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/init/-/init-5.6.2.tgz#8f92868c3f9081245f5a8e0b94ce6b5979b8541e" + integrity sha512-ahU3/lgF+J8kdJAQysihFJROHthkIDXfHmvhw7AYnzf94HjxGNXj7nz6i3At1/dM/1nQhR+4/uNR1/OU4tTYYQ== + dependencies: + "@lerna/child-process" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/project" "5.6.2" + fs-extra "^9.1.0" + p-map "^4.0.0" + write-json-file "^4.3.0" -"@lerna/info@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/info/-/info-3.21.0.tgz#76696b676fdb0f35d48c83c63c1e32bb5e37814f" - integrity sha512-0XDqGYVBgWxUquFaIptW2bYSIu6jOs1BtkvRTWDDhw4zyEdp6q4eaMvqdSap1CG+7wM5jeLCi6z94wS0AuiuwA== +"@lerna/link@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/link/-/link-5.6.2.tgz#6af5addff89cd455c1837a47a36f430a2c6ae6a5" + integrity sha512-hXxQ4R3z6rUF1v2x62oIzLyeHL96u7ZBhxqYMJrm763D1VMSDcHKF9CjJfc6J9vH5Z2ZbL6CQg50Hw5mUpJbjg== dependencies: - "@lerna/command" "3.21.0" - "@lerna/output" "3.13.0" - envinfo "^7.3.1" + "@lerna/command" "5.6.2" + "@lerna/package-graph" "5.6.2" + "@lerna/symlink-dependencies" "5.6.2" + "@lerna/validation-error" "5.6.2" + p-map "^4.0.0" + slash "^3.0.0" -"@lerna/init@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.21.0.tgz#1e810934dc8bf4e5386c031041881d3b4096aa5c" - integrity sha512-6CM0z+EFUkFfurwdJCR+LQQF6MqHbYDCBPyhu/d086LRf58GtYZYj49J8mKG9ktayp/TOIxL/pKKjgLD8QBPOg== +"@lerna/list@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/list/-/list-5.6.2.tgz#5fdf8c678891eacef1d90afb84fb461deb6bb662" + integrity sha512-WjE5O2tQ3TcS+8LqXUaxi0YdldhxUhNihT5+Gg4vzGdIlrPDioO50Zjo9d8jOU7i3LMIk6EzCma0sZr2CVfEGg== dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.21.0" - fs-extra "^8.1.0" - p-map "^2.1.0" - write-json-file "^3.2.0" + "@lerna/command" "5.6.2" + "@lerna/filter-options" "5.6.2" + "@lerna/listable" "5.6.2" + "@lerna/output" "5.6.2" -"@lerna/link@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.21.0.tgz#8be68ff0ccee104b174b5bbd606302c2f06e9d9b" - integrity sha512-tGu9GxrX7Ivs+Wl3w1+jrLi1nQ36kNI32dcOssij6bg0oZ2M2MDEFI9UF2gmoypTaN9uO5TSsjCFS7aR79HbdQ== +"@lerna/listable@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-5.6.2.tgz#1a35e8da081f2dc286647cbf4a4a7fb3c7fb1102" + integrity sha512-8Yp49BwkY/5XqVru38Zko+6Wj/sgbwzJfIGEPy3Qu575r1NA/b9eI1gX22aMsEeXUeGOybR7nWT5ewnPQHjqvA== dependencies: - "@lerna/command" "3.21.0" - "@lerna/package-graph" "3.18.5" - "@lerna/symlink-dependencies" "3.17.0" - p-map "^2.1.0" - slash "^2.0.0" + "@lerna/query-graph" "5.6.2" + chalk "^4.1.0" + columnify "^1.6.0" -"@lerna/list@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.21.0.tgz#42f76fafa56dea13b691ec8cab13832691d61da2" - integrity sha512-KehRjE83B1VaAbRRkRy6jLX1Cin8ltsrQ7FHf2bhwhRHK0S54YuA6LOoBnY/NtA8bHDX/Z+G5sMY78X30NS9tg== - dependencies: - "@lerna/command" "3.21.0" - "@lerna/filter-options" "3.20.0" - "@lerna/listable" "3.18.5" - "@lerna/output" "3.13.0" - -"@lerna/listable@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.18.5.tgz#e82798405b5ed8fc51843c8ef1e7a0e497388a1a" - integrity sha512-Sdr3pVyaEv5A7ZkGGYR7zN+tTl2iDcinryBPvtuv20VJrXBE8wYcOks1edBTcOWsPjCE/rMP4bo1pseyk3UTsg== - dependencies: - "@lerna/query-graph" "3.18.5" - chalk "^2.3.1" - columnify "^1.5.4" - -"@lerna/log-packed@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.16.0.tgz#f83991041ee77b2495634e14470b42259fd2bc16" - integrity sha512-Fp+McSNBV/P2mnLUYTaSlG8GSmpXM7krKWcllqElGxvAqv6chk2K3c2k80MeVB4WvJ9tRjUUf+i7HUTiQ9/ckQ== - dependencies: - byte-size "^5.0.1" - columnify "^1.5.4" +"@lerna/log-packed@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-5.6.2.tgz#05d26f038ce64e8ce8395c1745dfeb7589f89790" + integrity sha512-O9GODG7tMtWk+2fufn2MOkIDBYMRoKBhYMHshO5Aw/VIsH76DIxpX1koMzWfUngM/C70R4uNAKcVWineX4qzIw== + dependencies: + byte-size "^7.0.0" + columnify "^1.6.0" has-unicode "^2.0.1" - npmlog "^4.1.2" + npmlog "^6.0.2" -"@lerna/npm-conf@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.16.0.tgz#1c10a89ae2f6c2ee96962557738685300d376827" - integrity sha512-HbO3DUrTkCAn2iQ9+FF/eisDpWY5POQAOF1m7q//CZjdC2HSW3UYbKEGsSisFxSfaF9Z4jtrV+F/wX6qWs3CuA== +"@lerna/npm-conf@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-5.6.2.tgz#3b72fc528c8a1cd0acc9b277749a6153bd8de083" + integrity sha512-gWDPhw1wjXYXphk/PAghTLexO5T6abVFhXb+KOMCeem366mY0F5bM88PiorL73aErTNUoR8n+V4X29NTZzDZpQ== dependencies: - config-chain "^1.1.11" - pify "^4.0.1" + config-chain "^1.1.12" + pify "^5.0.0" -"@lerna/npm-dist-tag@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.18.5.tgz#9ef9abb7c104077b31f6fab22cc73b314d54ac55" - integrity sha512-xw0HDoIG6HreVsJND9/dGls1c+lf6vhu7yJoo56Sz5bvncTloYGLUppIfDHQr4ZvmPCK8rsh0euCVh2giPxzKQ== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - "@lerna/otplease" "3.18.5" - figgy-pudding "^3.5.1" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - -"@lerna/npm-install@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.16.5.tgz#d6bfdc16f81285da66515ae47924d6e278d637d3" - integrity sha512-hfiKk8Eku6rB9uApqsalHHTHY+mOrrHeWEs+gtg7+meQZMTS3kzv4oVp5cBZigndQr3knTLjwthT/FX4KvseFg== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/get-npm-exec-opts" "3.13.0" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - signal-exit "^3.0.2" - write-pkg "^3.1.0" - -"@lerna/npm-publish@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.18.5.tgz#240e4039959fd9816b49c5b07421e11b5cb000af" - integrity sha512-3etLT9+2L8JAx5F8uf7qp6iAtOLSMj+ZYWY6oUgozPi/uLqU0/gsMsEXh3F0+YVW33q0M61RpduBoAlOOZnaTg== - dependencies: - "@evocateur/libnpmpublish" "^1.2.2" - "@lerna/otplease" "3.18.5" - "@lerna/run-lifecycle" "3.16.2" - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - pify "^4.0.1" - read-package-json "^2.0.13" - -"@lerna/npm-run-script@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.16.5.tgz#9c2ec82453a26c0b46edc0bb7c15816c821f5c15" - integrity sha512-1asRi+LjmVn3pMjEdpqKJZFT/3ZNpb+VVeJMwrJaV/3DivdNg7XlPK9LTrORuKU4PSvhdEZvJmSlxCKyDpiXsQ== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/get-npm-exec-opts" "3.13.0" - npmlog "^4.1.2" - -"@lerna/otplease@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-3.18.5.tgz#b77b8e760b40abad9f7658d988f3ea77d4fd0231" - integrity sha512-S+SldXAbcXTEDhzdxYLU0ZBKuYyURP/ND2/dK6IpKgLxQYh/z4ScljPDMyKymmEvgiEJmBsPZAAPfmNPEzxjog== - dependencies: - "@lerna/prompt" "3.18.5" - figgy-pudding "^3.5.1" - -"@lerna/output@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.13.0.tgz#3ded7cc908b27a9872228a630d950aedae7a4989" - integrity sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg== - dependencies: - npmlog "^4.1.2" - -"@lerna/pack-directory@3.16.4": - version "3.16.4" - resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-3.16.4.tgz#3eae5f91bdf5acfe0384510ed53faddc4c074693" - integrity sha512-uxSF0HZeGyKaaVHz5FroDY9A5NDDiCibrbYR6+khmrhZtY0Bgn6hWq8Gswl9iIlymA+VzCbshWIMX4o2O8C8ng== - dependencies: - "@lerna/get-packed" "3.16.0" - "@lerna/package" "3.16.0" - "@lerna/run-lifecycle" "3.16.2" - figgy-pudding "^3.5.1" - npm-packlist "^1.4.4" - npmlog "^4.1.2" - tar "^4.4.10" - temp-write "^3.4.0" - -"@lerna/package-graph@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.18.5.tgz#c740e2ea3578d059e551633e950690831b941f6b" - integrity sha512-8QDrR9T+dBegjeLr+n9WZTVxUYUhIUjUgZ0gvNxUBN8S1WB9r6H5Yk56/MVaB64tA3oGAN9IIxX6w0WvTfFudA== - dependencies: - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/validation-error" "3.13.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - semver "^6.2.0" - -"@lerna/package@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.16.0.tgz#7e0a46e4697ed8b8a9c14d59c7f890e0d38ba13c" - integrity sha512-2lHBWpaxcBoiNVbtyLtPUuTYEaB/Z+eEqRS9duxpZs6D+mTTZMNy6/5vpEVSCBmzvdYpyqhqaYjjSLvjjr5Riw== - dependencies: - load-json-file "^5.3.0" - npm-package-arg "^6.1.0" - write-pkg "^3.1.0" - -"@lerna/prerelease-id-from-version@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz#b24bfa789f5e1baab914d7b08baae9b7bd7d83a1" - integrity sha512-qZyeUyrE59uOK8rKdGn7jQz+9uOpAaF/3hbslJVFL1NqF9ELDTqjCPXivuejMX/lN4OgD6BugTO4cR7UTq/sZA== - dependencies: - semver "^6.2.0" - -"@lerna/profiler@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-3.20.0.tgz#0f6dc236f4ea8f9ea5f358c6703305a4f32ad051" - integrity sha512-bh8hKxAlm6yu8WEOvbLENm42i2v9SsR4WbrCWSbsmOElx3foRnMlYk7NkGECa+U5c3K4C6GeBbwgqs54PP7Ljg== - dependencies: - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npmlog "^4.1.2" - upath "^1.2.0" - -"@lerna/project@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.21.0.tgz#5d784d2d10c561a00f20320bcdb040997c10502d" - integrity sha512-xT1mrpET2BF11CY32uypV2GPtPVm6Hgtha7D81GQP9iAitk9EccrdNjYGt5UBYASl4CIDXBRxwmTTVGfrCx82A== +"@lerna/npm-dist-tag@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-5.6.2.tgz#6115aa4b005b57520d76428926ee7d12030f5e53" + integrity sha512-t2RmxV6Eog4acXkUI+EzWuYVbeVVY139pANIWS9qtdajfgp4GVXZi1S8mAIb70yeHdNpCp1mhK0xpCrFH9LvGQ== + dependencies: + "@lerna/otplease" "5.6.2" + npm-package-arg "8.1.1" + npm-registry-fetch "^13.3.0" + npmlog "^6.0.2" + +"@lerna/npm-install@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-5.6.2.tgz#d5bd1e10c1c31f69a9ca5351b0cbe72dbc288dc2" + integrity sha512-AT226zdEo+uGENd37jwYgdALKJAIJK4pNOfmXWZWzVb9oMOr8I2YSjPYvSYUNG7gOo2YJQU8x5Zd7OShv2924Q== + dependencies: + "@lerna/child-process" "5.6.2" + "@lerna/get-npm-exec-opts" "5.6.2" + fs-extra "^9.1.0" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + signal-exit "^3.0.3" + write-pkg "^4.0.0" + +"@lerna/npm-publish@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-5.6.2.tgz#4e5e225b47589a7f8f96b7eee68b547e8ce432a2" + integrity sha512-ldSyewCfv9fAeC5xNjL0HKGSUxcC048EJoe/B+KRUmd+IPidvZxMEzRu08lSC/q3V9YeUv9ZvRnxATXOM8CffA== + dependencies: + "@lerna/otplease" "5.6.2" + "@lerna/run-lifecycle" "5.6.2" + fs-extra "^9.1.0" + libnpmpublish "^6.0.4" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + pify "^5.0.0" + read-package-json "^5.0.1" + +"@lerna/npm-run-script@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-5.6.2.tgz#66e3391ebdd6136312277be37a1b62ce48c12abf" + integrity sha512-MOQoWNcAyJivM8SYp0zELM7vg/Dj07j4YMdxZkey+S1UO0T4/vKBxb575o16hH4WeNzC3Pd7WBlb7C8dLOfNwQ== + dependencies: + "@lerna/child-process" "5.6.2" + "@lerna/get-npm-exec-opts" "5.6.2" + npmlog "^6.0.2" + +"@lerna/otplease@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-5.6.2.tgz#a94e4daf9d3d42bfc0366a6889b8809ed32dbdd0" + integrity sha512-dGS4lzkEQVTMAgji82jp8RK6UK32wlzrBAO4P4iiVHCUTuwNLsY9oeBXvVXSMrosJnl6Hbe0NOvi43mqSucGoA== + dependencies: + "@lerna/prompt" "5.6.2" + +"@lerna/output@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/output/-/output-5.6.2.tgz#fa97315d16cfe005a2891a3fc98f6f4fd3f518ed" + integrity sha512-++d+bfOQwY66yo7q1XuAvRcqtRHCG45e/awP5xQomTZ6R1rhWiZ3whWdc9Z6lF7+UtBB9toSYYffKU/xc3L0yQ== + dependencies: + npmlog "^6.0.2" + +"@lerna/pack-directory@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-5.6.2.tgz#ced0287d13d8575fe928ad7d9ad92dc6554cc86d" + integrity sha512-w5Jk5fo+HkN4Le7WMOudTcmAymcf0xPd302TqAQncjXpk0cb8tZbj+5bbNHsGb58GRjOIm5icQbHXooQUxbHhA== + dependencies: + "@lerna/get-packed" "5.6.2" + "@lerna/package" "5.6.2" + "@lerna/run-lifecycle" "5.6.2" + "@lerna/temp-write" "5.6.2" + npm-packlist "^5.1.1" + npmlog "^6.0.2" + tar "^6.1.0" + +"@lerna/package-graph@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-5.6.2.tgz#cb0a70b83afc418c5b5363bb96746d501decdbeb" + integrity sha512-TmL61qBBvA3Tc4qICDirZzdFFwWOA6qicIXUruLiE2PblRowRmCO1bKrrP6XbDOspzwrkPef6N2F2/5gHQAnkQ== + dependencies: + "@lerna/prerelease-id-from-version" "5.6.2" + "@lerna/validation-error" "5.6.2" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + semver "^7.3.4" + +"@lerna/package@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/package/-/package-5.6.2.tgz#da73b350693fdd4154cf5b19799bfaadff57442e" + integrity sha512-LaOC8moyM5J9WnRiWZkedjOninSclBOJyPqhif6mHb2kCFX6jAroNYzE8KM4cphu8CunHuhI6Ixzswtv+Dultw== dependencies: - "@lerna/package" "3.16.0" - "@lerna/validation-error" "3.13.0" - cosmiconfig "^5.1.0" - dedent "^0.7.0" - dot-prop "^4.2.0" - glob-parent "^5.0.0" - globby "^9.2.0" - load-json-file "^5.3.0" - npmlog "^4.1.2" - p-map "^2.1.0" - resolve-from "^4.0.0" - write-json-file "^3.2.0" + load-json-file "^6.2.0" + npm-package-arg "8.1.1" + write-pkg "^4.0.0" -"@lerna/prompt@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.18.5.tgz#628cd545f225887d060491ab95df899cfc5218a1" - integrity sha512-rkKj4nm1twSbBEb69+Em/2jAERK8htUuV8/xSjN0NPC+6UjzAwY52/x9n5cfmpa9lyKf/uItp7chCI7eDmNTKQ== - dependencies: - inquirer "^6.2.0" - npmlog "^4.1.2" - -"@lerna/publish@3.22.1": - version "3.22.1" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.22.1.tgz#b4f7ce3fba1e9afb28be4a1f3d88222269ba9519" - integrity sha512-PG9CM9HUYDreb1FbJwFg90TCBQooGjj+n/pb3gw/eH5mEDq0p8wKdLFe0qkiqUkm/Ub5C8DbVFertIo0Vd0zcw== - dependencies: - "@evocateur/libnpmaccess" "^3.1.2" - "@evocateur/npm-registry-fetch" "^4.0.0" - "@evocateur/pacote" "^9.6.3" - "@lerna/check-working-tree" "3.16.5" - "@lerna/child-process" "3.16.5" - "@lerna/collect-updates" "3.20.0" - "@lerna/command" "3.21.0" - "@lerna/describe-ref" "3.16.5" - "@lerna/log-packed" "3.16.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/npm-dist-tag" "3.18.5" - "@lerna/npm-publish" "3.18.5" - "@lerna/otplease" "3.18.5" - "@lerna/output" "3.13.0" - "@lerna/pack-directory" "3.16.4" - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/prompt" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.5" - "@lerna/validation-error" "3.13.0" - "@lerna/version" "3.22.1" - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - p-finally "^1.0.0" - p-map "^2.1.0" - p-pipe "^1.2.0" - semver "^6.2.0" +"@lerna/prerelease-id-from-version@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.6.2.tgz#63002662024a261310c6fbf01a50cb5f50569ca8" + integrity sha512-7gIm9fecWFVNy2kpj/KbH11bRcpyANAwpsft3X5m6J7y7A6FTUscCbEvl3ZNdpQKHNuvnHgCtkm3A5PMSCEgkA== + dependencies: + semver "^7.3.4" -"@lerna/pulse-till-done@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz#c8e9ce5bafaf10d930a67d7ed0ccb5d958fe0110" - integrity sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA== +"@lerna/profiler@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-5.6.2.tgz#5bfd52fb666ad0506cac3b8d2839e904d0acf90a" + integrity sha512-okwkagP5zyRIOYTceu/9/esW7UZFt7lyL6q6ZgpSG3TYC5Ay+FXLtS6Xiha/FQdVdumFqKULDWTGovzUlxcwaw== dependencies: - npmlog "^4.1.2" + fs-extra "^9.1.0" + npmlog "^6.0.2" + upath "^2.0.1" -"@lerna/query-graph@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-3.18.5.tgz#df4830bb5155273003bf35e8dda1c32d0927bd86" - integrity sha512-50Lf4uuMpMWvJ306be3oQDHrWV42nai9gbIVByPBYJuVW8dT8O8pA3EzitNYBUdLL9/qEVbrR0ry1HD7EXwtRA== +"@lerna/project@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/project/-/project-5.6.2.tgz#a893851cdceeace36d30fdfdbc2da9159a9e2041" + integrity sha512-kPIMcIy/0DVWM91FPMMFmXyAnCuuLm3NdhnA8NusE//VuY9wC6QC/3OwuCY39b2dbko/fPZheqKeAZkkMH6sGg== dependencies: - "@lerna/package-graph" "3.18.5" - figgy-pudding "^3.5.1" + "@lerna/package" "5.6.2" + "@lerna/validation-error" "5.6.2" + cosmiconfig "^7.0.0" + dedent "^0.7.0" + dot-prop "^6.0.1" + glob-parent "^5.1.1" + globby "^11.0.2" + js-yaml "^4.1.0" + load-json-file "^6.2.0" + npmlog "^6.0.2" + p-map "^4.0.0" + resolve-from "^5.0.0" + write-json-file "^4.3.0" + +"@lerna/prompt@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-5.6.2.tgz#7ea10fd3543aced0bf5521741808d86ffcf4b320" + integrity sha512-4hTNmVYADEr0GJTMegWV+GW6n+dzKx1vN9v2ISqyle283Myv930WxuyO0PeYGqTrkneJsyPreCMovuEGCvZ0iQ== + dependencies: + inquirer "^8.2.4" + npmlog "^6.0.2" + +"@lerna/publish@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-5.6.2.tgz#c8a26610c4fb2c7c5a232e04852bf545b242ee65" + integrity sha512-QaW0GjMJMuWlRNjeDCjmY/vjriGSWgkLS23yu8VKNtV5U3dt5yIKA3DNGV3HgZACuu45kQxzMDsfLzgzbGNtYA== + dependencies: + "@lerna/check-working-tree" "5.6.2" + "@lerna/child-process" "5.6.2" + "@lerna/collect-updates" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/describe-ref" "5.6.2" + "@lerna/log-packed" "5.6.2" + "@lerna/npm-conf" "5.6.2" + "@lerna/npm-dist-tag" "5.6.2" + "@lerna/npm-publish" "5.6.2" + "@lerna/otplease" "5.6.2" + "@lerna/output" "5.6.2" + "@lerna/pack-directory" "5.6.2" + "@lerna/prerelease-id-from-version" "5.6.2" + "@lerna/prompt" "5.6.2" + "@lerna/pulse-till-done" "5.6.2" + "@lerna/run-lifecycle" "5.6.2" + "@lerna/run-topologically" "5.6.2" + "@lerna/validation-error" "5.6.2" + "@lerna/version" "5.6.2" + fs-extra "^9.1.0" + libnpmaccess "^6.0.3" + npm-package-arg "8.1.1" + npm-registry-fetch "^13.3.0" + npmlog "^6.0.2" + p-map "^4.0.0" + p-pipe "^3.1.0" + pacote "^13.6.1" + semver "^7.3.4" -"@lerna/resolve-symlink@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz#37fc7095fabdbcf317c26eb74e0d0bde8efd2386" - integrity sha512-Ibj5e7njVHNJ/NOqT4HlEgPFPtPLWsO7iu59AM5bJDcAJcR96mLZ7KGVIsS2tvaO7akMEJvt2P+ErwCdloG3jQ== +"@lerna/pulse-till-done@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-5.6.2.tgz#061c4ba2894fa08333fe4502299f9f9f24bdb91c" + integrity sha512-eA/X1RCxU5YGMNZmbgPi+Kyfx1Q3bn4P9jo/LZy+/NRRr1po3ASXP2GJZ1auBh/9A2ELDvvKTOXCVHqczKC6rA== dependencies: - fs-extra "^8.1.0" - npmlog "^4.1.2" - read-cmd-shim "^1.0.1" + npmlog "^6.0.2" -"@lerna/rimraf-dir@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.16.5.tgz#04316ab5ffd2909657aaf388ea502cb8c2f20a09" - integrity sha512-bQlKmO0pXUsXoF8lOLknhyQjOZsCc0bosQDoX4lujBXSWxHVTg1VxURtWf2lUjz/ACsJVDfvHZbDm8kyBk5okA== +"@lerna/query-graph@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-5.6.2.tgz#c507e9a9cb613c6d4d163d7d115a52ef8c1a9d3f" + integrity sha512-KRngr96yBP8XYDi9/U62fnGO+ZXqm04Qk6a2HtoTr/ha8QvO1s7Tgm0xs/G7qWXDQHZgunWIbmK/LhxM7eFQrw== dependencies: - "@lerna/child-process" "3.16.5" - npmlog "^4.1.2" - path-exists "^3.0.0" - rimraf "^2.6.2" + "@lerna/package-graph" "5.6.2" + +"@lerna/resolve-symlink@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-5.6.2.tgz#51b6f4bbee36a1dcbf52634d05dcd08bb286f2cf" + integrity sha512-PDQy+7M8JEFtwIVHJgWvSxHkxJf9zXCENkvIWDB+SsoDPhw9+caewt46bTeP5iGm9pOMu3oZukaWo/TvF7sNjg== + dependencies: + fs-extra "^9.1.0" + npmlog "^6.0.2" + read-cmd-shim "^3.0.0" -"@lerna/run-lifecycle@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz#67b288f8ea964db9ea4fb1fbc7715d5bbb0bce00" - integrity sha512-RqFoznE8rDpyyF0rOJy3+KjZCeTkO8y/OB9orPauR7G2xQ7PTdCpgo7EO6ZNdz3Al+k1BydClZz/j78gNCmL2A== +"@lerna/rimraf-dir@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-5.6.2.tgz#219c51a46c27b94789d683fc0424539f14505fea" + integrity sha512-jgEfzz7uBUiQKteq3G8MtJiA2D2VoKmZSSY3VSiW/tPOSXYxxSHxEsClQdCeNa6+sYrDNDT8fP6MJ3lPLjDeLA== dependencies: - "@lerna/npm-conf" "3.16.0" - figgy-pudding "^3.5.1" - npm-lifecycle "^3.1.2" - npmlog "^4.1.2" + "@lerna/child-process" "5.6.2" + npmlog "^6.0.2" + path-exists "^4.0.0" + rimraf "^3.0.2" + +"@lerna/run-lifecycle@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-5.6.2.tgz#b6954f334b40ca80caeb9e0cb7ca936222f39915" + integrity sha512-u9gGgq/50Fm8dvfcc/TSHOCAQvzLD7poVanDMhHYWOAqRDnellJEEmA1K/Yka4vZmySrzluahkry9G6jcREt+g== + dependencies: + "@lerna/npm-conf" "5.6.2" + "@npmcli/run-script" "^4.1.7" + npmlog "^6.0.2" + p-queue "^6.6.2" + +"@lerna/run-topologically@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-5.6.2.tgz#ef00aa6751b4164ae4825244917cdd4bc2562501" + integrity sha512-QQ/jGOIsVvUg3izShWsd67RlWYh9UOH2yw97Ol1zySX9+JspCMVQrn9eKq1Pk8twQOFhT87LpT/aaxbTBgREPw== + dependencies: + "@lerna/query-graph" "5.6.2" + p-queue "^6.6.2" + +"@lerna/run@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/run/-/run-5.6.2.tgz#a964110d2fd13e4a3fe0fb4d752d0497651b26cb" + integrity sha512-c2kJxdFrNg5KOkrhmgwKKUOsfSrGNlFCe26EttufOJ3xfY0VnXlEw9rHOkTgwtu7969rfCdyaVP1qckMrF1Dgw== + dependencies: + "@lerna/command" "5.6.2" + "@lerna/filter-options" "5.6.2" + "@lerna/npm-run-script" "5.6.2" + "@lerna/output" "5.6.2" + "@lerna/profiler" "5.6.2" + "@lerna/run-topologically" "5.6.2" + "@lerna/timer" "5.6.2" + "@lerna/validation-error" "5.6.2" + fs-extra "^9.1.0" + p-map "^4.0.0" -"@lerna/run-topologically@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-3.18.5.tgz#3cd639da20e967d7672cb88db0f756b92f2fdfc3" - integrity sha512-6N1I+6wf4hLOnPW+XDZqwufyIQ6gqoPfHZFkfWlvTQ+Ue7CuF8qIVQ1Eddw5HKQMkxqN10thKOFfq/9NQZ4NUg== +"@lerna/symlink-binary@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-5.6.2.tgz#f8c68273f8a4f382bc0420593815dc13027f245a" + integrity sha512-Cth+miwYyO81WAmrQbPBrLHuF+F0UUc0el5kRXLH6j5zzaRS3kMM68r40M7MmfH8m3GPi7691UARoWFEotW5jw== dependencies: - "@lerna/query-graph" "3.18.5" - figgy-pudding "^3.5.1" - p-queue "^4.0.0" + "@lerna/create-symlink" "5.6.2" + "@lerna/package" "5.6.2" + fs-extra "^9.1.0" + p-map "^4.0.0" -"@lerna/run@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.21.0.tgz#2a35ec84979e4d6e42474fe148d32e5de1cac891" - integrity sha512-fJF68rT3veh+hkToFsBmUJ9MHc9yGXA7LSDvhziAojzOb0AI/jBDp6cEcDQyJ7dbnplba2Lj02IH61QUf9oW0Q== - dependencies: - "@lerna/command" "3.21.0" - "@lerna/filter-options" "3.20.0" - "@lerna/npm-run-script" "3.16.5" - "@lerna/output" "3.13.0" - "@lerna/profiler" "3.20.0" - "@lerna/run-topologically" "3.18.5" - "@lerna/timer" "3.13.0" - "@lerna/validation-error" "3.13.0" - p-map "^2.1.0" - -"@lerna/symlink-binary@3.17.0": - version "3.17.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.17.0.tgz#8f8031b309863814883d3f009877f82e38aef45a" - integrity sha512-RLpy9UY6+3nT5J+5jkM5MZyMmjNHxZIZvXLV+Q3MXrf7Eaa1hNqyynyj4RO95fxbS+EZc4XVSk25DGFQbcRNSQ== - dependencies: - "@lerna/create-symlink" "3.16.2" - "@lerna/package" "3.16.0" - fs-extra "^8.1.0" - p-map "^2.1.0" - -"@lerna/symlink-dependencies@3.17.0": - version "3.17.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.17.0.tgz#48d6360e985865a0e56cd8b51b308a526308784a" - integrity sha512-KmjU5YT1bpt6coOmdFueTJ7DFJL4H1w5eF8yAQ2zsGNTtZ+i5SGFBWpb9AQaw168dydc3s4eu0W0Sirda+F59Q== - dependencies: - "@lerna/create-symlink" "3.16.2" - "@lerna/resolve-symlink" "3.16.0" - "@lerna/symlink-binary" "3.17.0" - fs-extra "^8.1.0" - p-finally "^1.0.0" - p-map "^2.1.0" - p-map-series "^1.0.0" - -"@lerna/timer@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-3.13.0.tgz#bcd0904551db16e08364d6c18e5e2160fc870781" - integrity sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw== - -"@lerna/validation-error@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.13.0.tgz#c86b8f07c5ab9539f775bd8a54976e926f3759c3" - integrity sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA== - dependencies: - npmlog "^4.1.2" - -"@lerna/version@3.22.1": - version "3.22.1" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.22.1.tgz#9805a9247a47ee62d6b81bd9fa5fb728b24b59e2" - integrity sha512-PSGt/K1hVqreAFoi3zjD0VEDupQ2WZVlVIwesrE5GbrL2BjXowjCsTDPqblahDUPy0hp6h7E2kG855yLTp62+g== - dependencies: - "@lerna/check-working-tree" "3.16.5" - "@lerna/child-process" "3.16.5" - "@lerna/collect-updates" "3.20.0" - "@lerna/command" "3.21.0" - "@lerna/conventional-commits" "3.22.0" - "@lerna/github-client" "3.22.0" - "@lerna/gitlab-client" "3.15.0" - "@lerna/output" "3.13.0" - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/prompt" "3.18.5" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.5" - "@lerna/validation-error" "3.13.0" - chalk "^2.3.1" +"@lerna/symlink-dependencies@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-5.6.2.tgz#263866a869c253db805a9a385741e8919b0aa341" + integrity sha512-dUVNQLEcjVOIQiT9OlSAKt0ykjyJPy8l9i4NJDe2/0XYaUjo8PWsxJ0vrutz27jzi2aZUy07ASmowQZEmnLHAw== + dependencies: + "@lerna/create-symlink" "5.6.2" + "@lerna/resolve-symlink" "5.6.2" + "@lerna/symlink-binary" "5.6.2" + fs-extra "^9.1.0" + p-map "^4.0.0" + p-map-series "^2.1.0" + +"@lerna/temp-write@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/temp-write/-/temp-write-5.6.2.tgz#724fcadfe12bfaa723c1ea0fbc14804653816db0" + integrity sha512-S5ZNVTurSwWBmc9kh5alfSjmO3+BnRT6shYtOlmVIUYqWeYVYA5C1Htj322bbU4CSNCMFK6NQl4qGKL17HMuig== + dependencies: + graceful-fs "^4.1.15" + is-stream "^2.0.0" + make-dir "^3.0.0" + temp-dir "^1.0.0" + uuid "^8.3.2" + +"@lerna/timer@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-5.6.2.tgz#57de5dde716539c699f295b8a8c182dd41801b2e" + integrity sha512-AjMOiLc2B+5Nzdd9hNORetAdZ/WK8YNGX/+2ypzM68TMAPfIT5C40hMlSva9Yg4RsBz22REopXgM5s2zQd5ZQA== + +"@lerna/validation-error@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-5.6.2.tgz#75310749d94395f009c67a8fd47e146a86ce2943" + integrity sha512-4WlDUHaa+RSJNyJRtX3gVIAPVzjZD2tle8AJ0ZYBfdZnZmG0VlB2pD1FIbOQPK8sY2h5m0cHLRvfLoLncqHvdQ== + dependencies: + npmlog "^6.0.2" + +"@lerna/version@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-5.6.2.tgz#211ed1c0af3be0bb6bf6f79ef0d3e8daa1266ff0" + integrity sha512-odNSR2rTbHW++xMZSQKu/F6Syrd/sUvwDLPaMKktoOSPKmycHt/eWcuQQyACdtc43Iqeu4uQd7PCLsniqOVFrw== + dependencies: + "@lerna/check-working-tree" "5.6.2" + "@lerna/child-process" "5.6.2" + "@lerna/collect-updates" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/conventional-commits" "5.6.2" + "@lerna/github-client" "5.6.2" + "@lerna/gitlab-client" "5.6.2" + "@lerna/output" "5.6.2" + "@lerna/prerelease-id-from-version" "5.6.2" + "@lerna/prompt" "5.6.2" + "@lerna/run-lifecycle" "5.6.2" + "@lerna/run-topologically" "5.6.2" + "@lerna/temp-write" "5.6.2" + "@lerna/validation-error" "5.6.2" + "@nrwl/devkit" ">=14.8.1 < 16" + chalk "^4.1.0" dedent "^0.7.0" - load-json-file "^5.3.0" + load-json-file "^6.2.0" minimatch "^3.0.4" - npmlog "^4.1.2" - p-map "^2.1.0" - p-pipe "^1.2.0" - p-reduce "^1.0.0" - p-waterfall "^1.0.0" - semver "^6.2.0" - slash "^2.0.0" - temp-write "^3.4.0" - write-json-file "^3.2.0" + npmlog "^6.0.2" + p-map "^4.0.0" + p-pipe "^3.1.0" + p-reduce "^2.1.0" + p-waterfall "^2.1.1" + semver "^7.3.4" + slash "^3.0.0" + write-json-file "^4.3.0" -"@lerna/write-log-file@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.13.0.tgz#b78d9e4cfc1349a8be64d91324c4c8199e822a26" - integrity sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A== +"@lerna/write-log-file@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-5.6.2.tgz#a297307c80356abe4c3cfc75664febfa4658ec31" + integrity sha512-J09l18QnWQ3sXIRwuJkjXY3+KwPR2uO5NgbZGE3GXJK1V/LzOBRMvjGAIbuQHXw25uqe7vpLUpB8drtnFrubCQ== dependencies: - npmlog "^4.1.2" - write-file-atomic "^2.3.0" + npmlog "^6.0.2" + write-file-atomic "^4.0.1" "@mapbox/node-pre-gyp@1.0.9": version "1.0.9" @@ -1465,14 +1421,6 @@ semver "^7.3.5" tar "^6.1.11" -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - "@noble/hashes@^1", "@noble/hashes@^1.0.0": version "1.1.2" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" @@ -1491,11 +1439,6 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== - "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" @@ -1504,6 +1447,46 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@npmcli/arborist@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-5.3.0.tgz#321d9424677bfc08569e98a5ac445ee781f32053" + integrity sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/installed-package-contents" "^1.0.7" + "@npmcli/map-workspaces" "^2.0.3" + "@npmcli/metavuln-calculator" "^3.0.1" + "@npmcli/move-file" "^2.0.0" + "@npmcli/name-from-folder" "^1.0.1" + "@npmcli/node-gyp" "^2.0.0" + "@npmcli/package-json" "^2.0.0" + "@npmcli/run-script" "^4.1.3" + bin-links "^3.0.0" + cacache "^16.0.6" + common-ancestor-path "^1.0.1" + json-parse-even-better-errors "^2.3.1" + json-stringify-nice "^1.1.4" + mkdirp "^1.0.4" + mkdirp-infer-owner "^2.0.0" + nopt "^5.0.0" + npm-install-checks "^5.0.0" + npm-package-arg "^9.0.0" + npm-pick-manifest "^7.0.0" + npm-registry-fetch "^13.0.0" + npmlog "^6.0.2" + pacote "^13.6.1" + parse-conflict-json "^2.0.1" + proc-log "^2.0.0" + promise-all-reject-late "^1.0.0" + promise-call-limit "^1.0.1" + read-package-json-fast "^2.0.2" + readdir-scoped-modules "^1.1.0" + rimraf "^3.0.2" + semver "^7.3.7" + ssri "^9.0.0" + treeverse "^2.0.0" + walk-up-path "^1.0.0" + "@npmcli/fs@^2.1.0": version "2.1.2" resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" @@ -1512,6 +1495,56 @@ "@gar/promisify" "^1.1.3" semver "^7.3.5" +"@npmcli/fs@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" + integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== + dependencies: + semver "^7.3.5" + +"@npmcli/git@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.2.tgz#5c5de6b4d70474cf2d09af149ce42e4e1dacb931" + integrity sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w== + dependencies: + "@npmcli/promise-spawn" "^3.0.0" + lru-cache "^7.4.4" + mkdirp "^1.0.4" + npm-pick-manifest "^7.0.0" + proc-log "^2.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^2.0.2" + +"@npmcli/installed-package-contents@^1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" + integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== + dependencies: + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + +"@npmcli/map-workspaces@^2.0.3": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz#9e5e8ab655215a262aefabf139782b894e0504fc" + integrity sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg== + dependencies: + "@npmcli/name-from-folder" "^1.0.1" + glob "^8.0.1" + minimatch "^5.0.1" + read-package-json-fast "^2.0.3" + +"@npmcli/metavuln-calculator@^3.0.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz#9359bd72b400f8353f6a28a25c8457b562602622" + integrity sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA== + dependencies: + cacache "^16.0.0" + json-parse-even-better-errors "^2.3.1" + pacote "^13.0.3" + semver "^7.3.5" + "@npmcli/move-file@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" @@ -1520,98 +1553,226 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@octokit/auth-token@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.0.tgz#b64178975218b99e4dfe948253f0673cbbb59d9f" - integrity sha512-eoOVMjILna7FVQf96iWc3+ZtE/ZT6y8ob8ZzcqKY1ibSQCnu4O/B7pJvzMx5cyZ/RjAff6DAdEb0O0Cjcxidkg== +"@npmcli/name-from-folder@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" + integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== + +"@npmcli/node-gyp@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" + integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== + +"@npmcli/package-json@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-2.0.0.tgz#3bbcf4677e21055adbe673d9f08c9f9cde942e4a" + integrity sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA== + dependencies: + json-parse-even-better-errors "^2.3.1" + +"@npmcli/promise-spawn@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" + integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== + dependencies: + infer-owner "^1.0.4" + +"@npmcli/run-script@^4.1.0", "@npmcli/run-script@^4.1.3", "@npmcli/run-script@^4.1.7": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.2.1.tgz#c07c5c71bc1c70a5f2a06b0d4da976641609b946" + integrity sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg== dependencies: - "@octokit/types" "^2.0.0" + "@npmcli/node-gyp" "^2.0.0" + "@npmcli/promise-spawn" "^3.0.0" + node-gyp "^9.0.0" + read-package-json-fast "^2.0.3" + which "^2.0.2" + +"@nrwl/cli@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-15.9.4.tgz#63b600dff1cdc126f234d16978a888f72c22a00c" + integrity sha512-FoiGFCLpb/r4HXCM3KYqT0xteP+MRV6bIHjz3bdPHIDLmBNQQnRRaV2K47jtJ6zjh1eOU5UHKyDtDDYf80Idpw== + dependencies: + nx "15.9.4" + +"@nrwl/devkit@>=14.8.1 < 16": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-15.9.4.tgz#3f0a43a9637fcd0a46c06df2a9c36012b27f006b" + integrity sha512-mUX1kXTuPMdTzFxIzH+MsSNvdppOmstPDOEtiGFZJTuJ625ki0HhNJILO3N2mJ7MeMrLqIlAiNdvelQaObxYsQ== + dependencies: + ejs "^3.1.7" + ignore "^5.0.4" + semver "7.3.4" + tmp "~0.2.1" + tslib "^2.3.0" + +"@nrwl/nx-darwin-arm64@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/nx-darwin-arm64/-/nx-darwin-arm64-15.9.4.tgz#e5a2f39d42a60397a01140a251f894788f5d1fda" + integrity sha512-XnvrnT9BJsgThY/4xUcYtE077ERq/img8CkRj7MOOBNOh0/nVcR4LGbBKDHtwE3HPk0ikyS/SxRyNa9msvi3QQ== + +"@nrwl/nx-darwin-x64@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/nx-darwin-x64/-/nx-darwin-x64-15.9.4.tgz#97a810d4ff6b4bf395a43e4740890c0def2372da" + integrity sha512-WKSfSlpVMLchpXkax0geeUNyhvNxwO7qUz/s0/HJWBekt8fizwKDwDj1gP7fOu+YWb/tHiSscbR1km8PtdjhQw== + +"@nrwl/nx-linux-arm-gnueabihf@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-15.9.4.tgz#b8dd23b8c755b7e640d744945ab2dec3fd3eda65" + integrity sha512-a/b4PP7lP/Cgrh0LjC4O2YTt5pyf4DQTGtuE8qlo8o486UiofCtk4QGJX72q80s23L0ejCaKY2ULKx/3zMLjuA== + +"@nrwl/nx-linux-arm64-gnu@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-15.9.4.tgz#5bc150c2bdb2e0a2eaf8721b3c5fdb2eb93f8739" + integrity sha512-ibBV8fMhSfLVd/2WzcDuUm32BoZsattuKkvMmOoyU6Pzoznc3AqyDjJR4xCIoAn5Rf+Nu1oeQONr5FAtb1Ugow== + +"@nrwl/nx-linux-arm64-musl@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm64-musl/-/nx-linux-arm64-musl-15.9.4.tgz#df2f18f813828000dc52f1b7668339947b1a0862" + integrity sha512-iIjvVYd7+uM4jVD461+PvU5XTALgSvJOODUaMRGOoDl0KlMuTe6pQZlw0eXjl5rcTd6paKaVFWT5j6awr8kj7w== + +"@nrwl/nx-linux-x64-gnu@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-x64-gnu/-/nx-linux-x64-gnu-15.9.4.tgz#55547b07e6aeb0c36a43e05bd07c15b013f2de9f" + integrity sha512-q4OyH72mdrE4KellBWtwpr5EwfxHKNoFP9//7FAILO68ROh0rpMd7YQMlTB7T04UEUHjKEEsFGTlVXIee3Viwg== + +"@nrwl/nx-linux-x64-musl@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-x64-musl/-/nx-linux-x64-musl-15.9.4.tgz#29cd644736f643566d9c0e1a1171c49a62a08c09" + integrity sha512-67+/XNMR1CgLPyeGX8jqSG6l8yYD0iiwUgcu1Vaxq6N05WwnqVisIW8XzLSRUtKt4WyVQgOWk3aspImpMVOG3Q== + +"@nrwl/nx-win32-arm64-msvc@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-15.9.4.tgz#55a38bf5dc201e9088729fb03e505dc63caf8b3a" + integrity sha512-2rEsq3eOGVCYpYJn2tTJkOGNJm/U8rP/FmqtZXYa6VJv/00XP3Gl00IXFEDaYV6rZo7SWqLxtEPUbjK5LwPzZA== + +"@nrwl/nx-win32-x64-msvc@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/nx-win32-x64-msvc/-/nx-win32-x64-msvc-15.9.4.tgz#56bb859bfe47d08d14f8d5822d9a31d9098d95a9" + integrity sha512-bogVju4Z/hy1jbppqaTNbmV1R4Kg0R5fKxXAXC2LaL7FL0dup31wPumdV+mXttXBNOBDjV8V/Oz1ZqdmxpOJUw== + +"@nrwl/tao@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-15.9.4.tgz#5e384af06d1fb68e326eda2c6a5d8f99ce1583b8" + integrity sha512-m90iz8UsXx1rgPm1dxsBQjSrCViWYZIrp8bpwjSCW24j3kifyilYSXGuKaRwZwUn7eNmH/kZcI9/8qeGIPF4Sg== + dependencies: + nx "15.9.4" + +"@octokit/auth-token@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" + integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== + +"@octokit/core@^4.2.1": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907" + integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== + dependencies: + "@octokit/auth-token" "^3.0.0" + "@octokit/graphql" "^5.0.0" + "@octokit/request" "^6.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^9.0.0" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^7.0.0": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2" + integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg== + dependencies: + "@octokit/types" "^9.0.0" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" -"@octokit/endpoint@^5.5.0": - version "5.5.3" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-5.5.3.tgz#0397d1baaca687a4c8454ba424a627699d97c978" - integrity sha512-EzKwkwcxeegYYah5ukEeAI/gYRLv2Y9U5PpIsseGSFDk+G3RbipQGBs8GuYS1TLCtQaqoO66+aQGtITPalxsNQ== +"@octokit/graphql@^5.0.0": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248" + integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== dependencies: - "@octokit/types" "^2.0.0" - is-plain-object "^3.0.0" - universal-user-agent "^5.0.0" + "@octokit/request" "^6.0.0" + "@octokit/types" "^9.0.0" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^18.0.0": + version "18.0.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.0.0.tgz#f43d765b3c7533fd6fb88f3f25df079c24fccf69" + integrity sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw== "@octokit/plugin-enterprise-rest@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== -"@octokit/plugin-paginate-rest@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc" - integrity sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q== +"@octokit/plugin-paginate-rest@^6.1.2": + version "6.1.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz#f86456a7a1fe9e58fec6385a85cf1b34072341f8" + integrity sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ== dependencies: - "@octokit/types" "^2.0.1" + "@octokit/tsconfig" "^1.0.2" + "@octokit/types" "^9.2.3" -"@octokit/plugin-request-log@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz#eef87a431300f6148c39a7f75f8cfeb218b2547e" - integrity sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw== +"@octokit/plugin-request-log@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== -"@octokit/plugin-rest-endpoint-methods@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" - integrity sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ== +"@octokit/plugin-rest-endpoint-methods@^7.1.2": + version "7.2.3" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz#37a84b171a6cb6658816c82c4082ac3512021797" + integrity sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA== dependencies: - "@octokit/types" "^2.0.1" - deprecation "^2.3.1" + "@octokit/types" "^10.0.0" -"@octokit/request-error@^1.0.1", "@octokit/request-error@^1.0.2": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" - integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA== +"@octokit/request-error@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" + integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== dependencies: - "@octokit/types" "^2.0.0" + "@octokit/types" "^9.0.0" deprecation "^2.0.0" once "^1.4.0" -"@octokit/request@^5.2.0": - version "5.3.2" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.3.2.tgz#1ca8b90a407772a1ee1ab758e7e0aced213b9883" - integrity sha512-7NPJpg19wVQy1cs2xqXjjRq/RmtSomja/VSWnptfYwuBxLdbYh2UjhGi0Wx7B1v5Iw5GKhfFDQL7jM7SSp7K2g== +"@octokit/request@^6.0.0": + version "6.2.8" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb" + integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw== dependencies: - "@octokit/endpoint" "^5.5.0" - "@octokit/request-error" "^1.0.1" - "@octokit/types" "^2.0.0" - deprecation "^2.0.0" - is-plain-object "^3.0.0" - node-fetch "^2.3.0" - once "^1.4.0" - universal-user-agent "^5.0.0" - -"@octokit/rest@^16.28.4": - version "16.43.1" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.1.tgz#3b11e7d1b1ac2bbeeb23b08a17df0b20947eda6b" - integrity sha512-gfFKwRT/wFxq5qlNjnW2dh+qh74XgTQ2B179UX5K1HYCluioWj8Ndbgqw2PVqa1NnVJkGHp2ovMpVn/DImlmkw== - dependencies: - "@octokit/auth-token" "^2.4.0" - "@octokit/plugin-paginate-rest" "^1.1.1" - "@octokit/plugin-request-log" "^1.0.0" - "@octokit/plugin-rest-endpoint-methods" "2.4.0" - "@octokit/request" "^5.2.0" - "@octokit/request-error" "^1.0.2" - atob-lite "^2.0.0" - before-after-hook "^2.0.0" - btoa-lite "^1.0.0" - deprecation "^2.0.0" - lodash.get "^4.4.2" - lodash.set "^4.3.2" - lodash.uniq "^4.5.0" - octokit-pagination-methods "^1.1.0" - once "^1.4.0" - universal-user-agent "^4.0.0" + "@octokit/endpoint" "^7.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^9.0.0" + is-plain-object "^5.0.0" + node-fetch "^2.6.7" + universal-user-agent "^6.0.0" -"@octokit/types@^2.0.0", "@octokit/types@^2.0.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.3.1.tgz#40cd61c125a6161cfb3bfabc75805ac7a54213b4" - integrity sha512-rvJP1Y9A/+Cky2C3var1vsw3Lf5Rjn/0sojNl2AjCX+WbpIHYccaJ46abrZoIxMYnOToul6S9tPytUVkFI7CXQ== +"@octokit/rest@^19.0.3": + version "19.0.13" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.13.tgz#e799393264edc6d3c67eeda9e5bd7832dcf974e4" + integrity sha512-/EzVox5V9gYGdbAI+ovYj3nXQT1TtTHRT+0eZPcuC05UFSWO3mdO9UY1C0i2eLF9Un1ONJkAk+IEtYGAC+TahA== dependencies: - "@types/node" ">= 8" + "@octokit/core" "^4.2.1" + "@octokit/plugin-paginate-rest" "^6.1.2" + "@octokit/plugin-request-log" "^1.0.4" + "@octokit/plugin-rest-endpoint-methods" "^7.1.2" + +"@octokit/tsconfig@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@octokit/tsconfig/-/tsconfig-1.0.2.tgz#59b024d6f3c0ed82f00d08ead5b3750469125af7" + integrity sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA== + +"@octokit/types@^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-10.0.0.tgz#7ee19c464ea4ada306c43f1a45d444000f419a4a" + integrity sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg== + dependencies: + "@octokit/openapi-types" "^18.0.0" + +"@octokit/types@^9.0.0", "@octokit/types@^9.2.3": + version "9.3.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5" + integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== + dependencies: + "@octokit/openapi-types" "^18.0.0" "@opentelemetry/api@~1.3.0": version "1.3.0" @@ -1693,6 +1854,19 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.9.1.tgz#ad3367684a57879392513479e0a436cb2ac46dad" integrity sha512-oPQdbFDmZvjXk5ZDoBGXG8B4tSB/qW5vQunJWQMFUBp7Xe8O1ByPANueJ+Jzg58esEBegyyxZ7LRmfJr7kFcFg== +"@parcel/watcher@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" + integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== + dependencies: + node-addon-api "^3.2.1" + node-gyp-build "^4.3.0" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@pkgr/utils@^2.3.1": version "2.4.2" resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc" @@ -1829,6 +2003,13 @@ dependencies: "@types/node" "*" +"@types/debug@^4.0.0": + version "4.1.8" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.8.tgz#cef723a5d0a90990313faec2d1e22aee5eecb317" + integrity sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ== + dependencies: + "@types/ms" "*" + "@types/eslint@^7.2.13": version "7.29.0" resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.29.0.tgz#e56ddc8e542815272720bb0b4ccc2aff9c3e1c78" @@ -1842,11 +2023,6 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - "@types/express-serve-static-core@^4.17.33": version "4.17.35" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f" @@ -1867,13 +2043,12 @@ "@types/qs" "*" "@types/serve-static" "*" -"@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== +"@types/glob@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-8.1.0.tgz#b63e70155391b0584dce44e7ea25190bbc38f2fc" + integrity sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w== dependencies: - "@types/events" "*" - "@types/minimatch" "*" + "@types/minimatch" "^5.1.2" "@types/node" "*" "@types/http-proxy@^1.17.8": @@ -1888,10 +2063,10 @@ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== -"@types/json-schema@*", "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== +"@types/json-schema@*", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.9": + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== "@types/json5@^0.0.29": version "0.0.29" @@ -1903,6 +2078,13 @@ resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== +"@types/mdast@^3.0.0": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af" + integrity sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA== + dependencies: + "@types/unist" "*" + "@types/microtime@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@types/microtime/-/microtime-2.1.0.tgz#adbd99f501a85c88695eb1efd3515810f2563932" @@ -1918,16 +2100,26 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== -"@types/minimatch@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== +"@types/minimatch@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@types/minimatch@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/minimist@^1.2.0": version "1.2.2" resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== +"@types/ms@*": + version "0.7.31" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" + integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== + "@types/node-fetch@^2.6.2": version "2.6.2" resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" @@ -1936,7 +2128,7 @@ "@types/node" "*" form-data "^3.0.0" -"@types/node@*", "@types/node@>= 8", "@types/node@>=13.7.0", "@types/node@^16.13.0": +"@types/node@*", "@types/node@>=13.7.0", "@types/node@^16.13.0": version "16.18.25" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.25.tgz#8863940fefa1234d3fcac7a4b7a48a6c992d67af" integrity sha512-rUDO6s9Q/El1R1I21HG4qw/LstTHCPO/oQNAwI/4b2f9EWvMnqt4d3HJwPMawfZ3UvodB8516Yg+VAq54YM+eA== @@ -1951,6 +2143,11 @@ resolved "https://registry.yarnpkg.com/@types/object-hash/-/object-hash-1.3.4.tgz#079ba142be65833293673254831b5e3e847fe58b" integrity sha512-xFdpkAkikBgqBdG9vIlsqffDV8GpvnPEzs0IUtr1v3BEB97ijsFQ4RXVbUZwjFThhB4MDSTUfvmxUD5PGx0wXA== +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + "@types/qs@*": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" @@ -1968,10 +2165,10 @@ dependencies: "@types/node" "*" -"@types/semver@^7.3.12": - version "7.3.13" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" - integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== +"@types/semver@^7.3.12", "@types/semver@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" + integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== "@types/send@*": version "0.17.1" @@ -1999,7 +2196,17 @@ resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.2.tgz#38ecb64f01aa0d02b7c8f4222d7c38af6316fef8" integrity sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g== -"@typescript-eslint/eslint-plugin@^5.1.0", "@typescript-eslint/eslint-plugin@^5.61.0": +"@types/unist@*", "@types/unist@^2.0.0": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== + +"@types/yargs-parser@^21.0.0": + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@typescript-eslint/eslint-plugin@^5.1.0": version "5.61.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.61.0.tgz#a1a5290cf33863b4db3fb79350b3c5275a7b1223" integrity sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g== @@ -2015,7 +2222,25 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.1.0", "@typescript-eslint/parser@^5.61.0": +"@typescript-eslint/eslint-plugin@^6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.1.0.tgz#96f3ca6615717659d06c9f7161a1d14ab0c49c66" + integrity sha512-qg7Bm5TyP/I7iilGyp6DRqqkt8na00lI6HbjWZObgk3FFSzH5ypRwAHXJhJkwiRtTcfn+xYQIMOR5kJgpo6upw== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.1.0" + "@typescript-eslint/type-utils" "6.1.0" + "@typescript-eslint/utils" "6.1.0" + "@typescript-eslint/visitor-keys" "6.1.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + natural-compare-lite "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@^5.1.0": version "5.61.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.61.0.tgz#7fbe3e2951904bb843f8932ebedd6e0635bffb70" integrity sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg== @@ -2025,6 +2250,17 @@ "@typescript-eslint/typescript-estree" "5.61.0" debug "^4.3.4" +"@typescript-eslint/parser@^6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.1.0.tgz#3135bf65dca5340d8650703eb8cb83113e156ee5" + integrity sha512-hIzCPvX4vDs4qL07SYzyomamcs2/tQYXg5DtdAfj35AyJ5PIUqhsLf4YrEIFzZcND7R2E8tpQIZKayxg8/6Wbw== + dependencies: + "@typescript-eslint/scope-manager" "6.1.0" + "@typescript-eslint/types" "6.1.0" + "@typescript-eslint/typescript-estree" "6.1.0" + "@typescript-eslint/visitor-keys" "6.1.0" + debug "^4.3.4" + "@typescript-eslint/scope-manager@5.53.0": version "5.53.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz#42b54f280e33c82939275a42649701024f3fafef" @@ -2041,6 +2277,14 @@ "@typescript-eslint/types" "5.61.0" "@typescript-eslint/visitor-keys" "5.61.0" +"@typescript-eslint/scope-manager@6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.1.0.tgz#a6cdbe11630614f8c04867858a42dd56590796ed" + integrity sha512-AxjgxDn27hgPpe2rQe19k0tXw84YCOsjDJ2r61cIebq1t+AIxbgiXKvD4999Wk49GVaAcdJ/d49FYel+Pp3jjw== + dependencies: + "@typescript-eslint/types" "6.1.0" + "@typescript-eslint/visitor-keys" "6.1.0" + "@typescript-eslint/type-utils@5.61.0": version "5.61.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.61.0.tgz#e90799eb2045c4435ea8378cb31cd8a9fddca47a" @@ -2051,6 +2295,16 @@ debug "^4.3.4" tsutils "^3.21.0" +"@typescript-eslint/type-utils@6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.1.0.tgz#21cc6c3bc1980b03f9eb4e64580d0c5be6f08215" + integrity sha512-kFXBx6QWS1ZZ5Ni89TyT1X9Ag6RXVIVhqDs0vZE/jUeWlBv/ixq2diua6G7ece6+fXw3TvNRxP77/5mOMusx2w== + dependencies: + "@typescript-eslint/typescript-estree" "6.1.0" + "@typescript-eslint/utils" "6.1.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" + "@typescript-eslint/types@5.53.0": version "5.53.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.53.0.tgz#f79eca62b97e518ee124086a21a24f3be267026f" @@ -2061,6 +2315,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.61.0.tgz#e99ff11b5792d791554abab0f0370936d8ca50c0" integrity sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ== +"@typescript-eslint/types@6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.1.0.tgz#2d607c62827bb416ada5c96ebfa2ef84e45a8dfa" + integrity sha512-+Gfd5NHCpDoHDOaU/yIF3WWRI2PcBRKKpP91ZcVbL0t5tQpqYWBs3z/GGhvU+EV1D0262g9XCnyqQh19prU0JQ== + "@typescript-eslint/typescript-estree@5.53.0": version "5.53.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz#bc651dc28cf18ab248ecd18a4c886c744aebd690" @@ -2087,6 +2346,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.1.0.tgz#ea382f6482ba698d7e993a88ce5391ea7a66c33d" + integrity sha512-nUKAPWOaP/tQjU1IQw9sOPCDavs/iU5iYLiY/6u7gxS7oKQoi4aUxXS1nrrVGTyBBaGesjkcwwHkbkiD5eBvcg== + dependencies: + "@typescript-eslint/types" "6.1.0" + "@typescript-eslint/visitor-keys" "6.1.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + "@typescript-eslint/utils@5.61.0": version "5.61.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.61.0.tgz#5064838a53e91c754fffbddd306adcca3fe0af36" @@ -2101,6 +2373,19 @@ eslint-scope "^5.1.1" semver "^7.3.7" +"@typescript-eslint/utils@6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.1.0.tgz#1641843792b4e3451cc692e2c73055df8b26f453" + integrity sha512-wp652EogZlKmQoMS5hAvWqRKplXvkuOnNzZSE0PVvsKjpexd/XznRVHAtrfHFYmqaJz0DFkjlDsGYC9OXw+OhQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.1.0" + "@typescript-eslint/types" "6.1.0" + "@typescript-eslint/typescript-estree" "6.1.0" + semver "^7.5.4" + "@typescript-eslint/utils@~5.53.0": version "5.53.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.53.0.tgz#e55eaad9d6fffa120575ffaa530c7e802f13bce8" @@ -2131,21 +2416,35 @@ "@typescript-eslint/types" "5.61.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.1.0.tgz#d2b84dff6b58944d3257ea03687e269a788c73be" + integrity sha512-yQeh+EXhquh119Eis4k0kYhj9vmFzNpbhM3LftWQVwqVjipCkwHBQOZutcYW+JVkjtTG9k8nrZU1UoNedPDd1A== + dependencies: + "@typescript-eslint/types" "6.1.0" + eslint-visitor-keys "^3.4.1" + "@yarnpkg/lockfile@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== -"@zkochan/cmd-shim@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" - integrity sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg== +"@yarnpkg/parsers@^3.0.0-rc.18": + version "3.0.0-rc.48.1" + resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.48.1.tgz#8636c24c02c888f2602a464edfd7fb113d75e937" + integrity sha512-qEewJouhRvaecGjbkjz9kMKn96UASbDodNrE5MYy2TrXkHcisIkbMxZdGBYfAq+s1dFtCSx/5H4k5bEkfakM+A== + dependencies: + js-yaml "^3.10.0" + tslib "^2.4.0" + +"@zkochan/js-yaml@0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz#975f0b306e705e28b8068a07737fa46d3fc04826" + integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== dependencies: - is-windows "^1.0.0" - mkdirp-promise "^5.0.1" - mz "^2.5.0" + argparse "^2.0.1" -JSONStream@^1.0.4, JSONStream@^1.3.4: +JSONStream@^1.0.4: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== @@ -2176,17 +2475,15 @@ acorn-walk@^8.2.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.2.4, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== +acorn@^8.2.4, acorn@^8.8.2, acorn@^8.9.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== -agent-base@4, agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== - dependencies: - es6-promisify "^5.0.0" +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== agent-base@6, agent-base@^6.0.2: version "6.0.2" @@ -2195,20 +2492,6 @@ agent-base@6, agent-base@^6.0.2: dependencies: debug "4" -agent-base@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== - dependencies: - es6-promisify "^5.0.0" - -agentkeepalive@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" - integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== - dependencies: - humanize-ms "^1.2.1" - agentkeepalive@^4.2.1: version "4.3.0" resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255" @@ -2244,7 +2527,7 @@ ajv@7.1.1: require-from-string "^2.0.2" uri-js "^4.2.2" -ajv@^6.10.0, ajv@^6.12.4, ajv@^6.5.5: +ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2264,10 +2547,10 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-escapes@^4.2.1: version "4.3.2" @@ -2276,21 +2559,6 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.21.3" -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -2301,7 +2569,7 @@ ansi-regex@^6.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -2320,16 +2588,11 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansi-styles@^6.0.0, ansi-styles@^6.2.1: +ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - anylogger@^0.21.0: version "0.21.0" resolved "https://registry.yarnpkg.com/anylogger/-/anylogger-0.21.0.tgz#b6cbea631cd5e1c884e5c0fa007d80bde1b22bd4" @@ -2343,11 +2606,6 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.0.3, aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - "aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" @@ -2374,14 +2632,6 @@ are-we-there-yet@^3.0.0: delegates "^1.0.0" readable-stream "^3.6.0" -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -2401,21 +2651,6 @@ aria-query@^5.1.3: dependencies: dequal "^2.0.3" -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - array-buffer-byte-length@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" @@ -2424,10 +2659,10 @@ array-buffer-byte-length@^1.0.0: call-bind "^1.0.2" is-array-buffer "^3.0.1" -array-differ@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" - integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== array-find-index@^1.0.1: version "1.0.2" @@ -2455,28 +2690,11 @@ array-includes@^3.1.5, array-includes@^3.1.6: get-intrinsic "^1.1.3" is-string "^1.0.7" -array-union@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - array.prototype.flat@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" @@ -2507,6 +2725,11 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + arrify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/arrify/-/arrify-3.0.0.tgz#ccdefb8eaf2a1d2ab0da1ca2ce53118759fd46bc" @@ -2517,23 +2740,6 @@ asap@^2.0.0: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" @@ -2544,7 +2750,7 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async@^3.1.0: +async@^3.1.0, async@^3.2.3: version "3.2.4" resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== @@ -2559,16 +2765,6 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -atob-lite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" - integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - ava@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/ava/-/ava-5.3.0.tgz#b5c9e6b92f97cb0d4f9bf09be51daa4101ff21cf" @@ -2623,16 +2819,6 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" - integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== - axe-core@^4.6.2: version "4.7.2" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" @@ -2645,6 +2831,15 @@ axios@0.21.4, axios@^0.21.2: dependencies: follow-redirects "^1.14.0" +axios@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" + integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + axobject-query@^3.1.1: version "3.2.1" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" @@ -2674,42 +2869,22 @@ base64-js@^1.3.0, base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -basic-auth@~2.0.0: +basic-auth@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== dependencies: safe-buffer "5.1.2" -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - bech32@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== -before-after-hook@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" - integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== +before-after-hook@^2.2.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" + integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== better-sqlite3@^8.2.0: version "8.2.0" @@ -2724,11 +2899,28 @@ big-integer@^1.6.44: resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== +bin-links@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.3.tgz#3842711ef3db2cd9f16a5f404a996a12db355a6e" + integrity sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA== + dependencies: + cmd-shim "^5.0.0" + mkdirp-infer-owner "^2.0.0" + npm-normalize-package-bin "^2.0.0" + read-cmd-shim "^3.0.0" + rimraf "^3.0.0" + write-file-atomic "^4.0.0" + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +binary-searching@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/binary-searching/-/binary-searching-2.0.5.tgz#ab6d08d51cd1b58878ae208ab61988f885b22dd3" + integrity sha512-v4N2l3RxL+m4zDxyxz3Ne2aTmiPn8ZUpKFpdPtO+ItW1NcTCXA7JeHG5GMBSvoKSkQZ9ycS+EouDVxYB9ufKWA== + bindings@^1.2.1, bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -2750,11 +2942,6 @@ bl@^4.0.3, bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" -bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - blueimp-md5@^2.10.0: version "2.19.0" resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.19.0.tgz#b53feea5498dcb53dc6ec4b823adb84b729c4af0" @@ -2810,22 +2997,6 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -2848,11 +3019,6 @@ browserslist@^4.21.0: node-releases "^2.0.12" update-browserslist-db "^1.0.11" -btoa-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" - integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= - buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -2884,6 +3050,13 @@ builtins@^1.0.3: resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= +builtins@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + bundle-name@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a" @@ -2891,15 +3064,10 @@ bundle-name@^3.0.0: dependencies: run-applescript "^5.0.0" -byline@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" - integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= - -byte-size@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" - integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== +byte-size@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-7.0.1.tgz#b1daf3386de7ab9d706b941a748dbfc71130dee3" + integrity sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A== bytes@3.1.2: version "3.1.2" @@ -2924,28 +3092,7 @@ c8@^7.13.0: yargs "^16.2.0" yargs-parser "^20.2.9" -cacache@^12.0.0, cacache@^12.0.3: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cacache@^16.1.0: +cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0: version "16.1.3" resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== @@ -2969,20 +3116,23 @@ cacache@^16.1.0: tar "^6.1.11" unique-filename "^2.0.0" -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== +cacache@^17.0.0: + version "17.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.3.tgz#c6ac23bec56516a7c0c52020fd48b4909d7c7044" + integrity sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg== dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^7.7.1" + minipass "^5.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" @@ -2992,30 +3142,6 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -3026,23 +3152,6 @@ callsites@^4.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-4.0.0.tgz#8014cea4fedfe681a30e2f7d2d557dd95808a92a" integrity sha512-y3jRROutgpKdz5vzEhWM34TidDU8vkJppF8dszITeb1PQmSqV3DTxyV8G/lyO/DNvtE1YTedehmw9MPZsCBHxQ== -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= - dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" - camelcase-keys@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" @@ -3052,17 +3161,7 @@ camelcase-keys@^6.2.2: map-obj "^4.0.0" quick-lru "^4.0.1" -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -camelcase@^5.0.0, camelcase@^5.3.1: +camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -3072,11 +3171,6 @@ caniuse-lite@^1.0.30001503: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001507.tgz#fae53f6286e7564783eadea9b447819410a59534" integrity sha512-SFpUDoSLCaE5XYL2jfqe9ova/pbQHEmbheDf5r4diNwbAgR3qxM9NQtfsiSscjqoya5K7kFcHPUQ+VsUkIJR4A== -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - cbor@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" @@ -3084,7 +3178,7 @@ cbor@^8.1.0: dependencies: nofilter "^3.1.0" -chalk@^2.0.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3093,7 +3187,7 @@ chalk@^2.0.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -3106,6 +3200,11 @@ chalk@^5.2.0: resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== +character-entities@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -3126,7 +3225,7 @@ chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" -chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4: +chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -3156,16 +3255,6 @@ ci-parallel-vars@^1.0.1: resolved "https://registry.yarnpkg.com/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz#e87ff0625ccf9d286985b29b4ada8485ca9ffbc2" integrity sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg== -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -3183,24 +3272,17 @@ clean-yaml-object@^0.1.0: resolved "https://registry.yarnpkg.com/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz#63fb110dc2ce1a84dc21f6d9334876d010ae8b68" integrity sha512-3yONmlN9CSAkzNwnRCiJQ7Q2xK5mWuEfL3PuTZcAUzhObbXsfsnMptJzXwz93nc5zn9V9TwCVMmV7w4xsm43dw== -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-cursor@^3.1.0: +cli-cursor@3.1.0, cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" -cli-spinners@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" - integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ== +cli-spinners@2.6.1, cli-spinners@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== cli-truncate@^3.1.0: version "3.1.0" @@ -3210,25 +3292,11 @@ cli-truncate@^3.1.0: slice-ansi "^5.0.0" string-width "^5.0.0" -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= - cli-width@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -3261,6 +3329,13 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= +cmd-shim@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" + integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== + dependencies: + mkdirp-infer-owner "^2.0.0" + code-excerpt@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/code-excerpt/-/code-excerpt-4.0.0.tgz#2de7d46e98514385cb01f7b3b741320115f4c95e" @@ -3268,19 +3343,6 @@ code-excerpt@^4.0.0: dependencies: convert-to-spaces "^2.0.1" -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - color-convert@^1.9.0, color-convert@^1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -3334,15 +3396,15 @@ colorspace@1.1.x: color "^3.1.3" text-hex "1.0.x" -columnify@^1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" - integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= +columnify@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== dependencies: - strip-ansi "^3.0.0" + strip-ansi "^6.0.1" wcwidth "^1.0.0" -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: +combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -3364,11 +3426,16 @@ commander@~2.20.3: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -comment-parser@1.3.1: +comment-parser@1.3.1, comment-parser@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.3.1.tgz#3d7ea3adaf9345594aedee6563f422348f165c1b" integrity sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA== +common-ancestor-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== + common-path-prefix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" @@ -3379,14 +3446,6 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -compare-func@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" - integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= - dependencies: - array-ify "^1.0.0" - dot-prop "^3.0.0" - compare-func@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" @@ -3395,26 +3454,11 @@ compare-func@^2.0.0: array-ify "^1.0.0" dot-prop "^5.1.0" -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - concat-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" @@ -3439,10 +3483,10 @@ concordance@^5.0.4: semver "^7.3.2" well-known-symbols "^2.0.0" -config-chain@^1.1.11: - version "1.1.12" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== +config-chain@^1.1.12: + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== dependencies: ini "^1.3.4" proto-list "~1.2.1" @@ -3452,7 +3496,7 @@ confusing-browser-globals@^1.0.10: resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== -console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: +console-control-strings@^1.0.0, console-control-strings@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= @@ -3469,12 +3513,12 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -conventional-changelog-angular@^5.0.3: - version "5.0.6" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.6.tgz#269540c624553aded809c29a3508fdc2b544c059" - integrity sha512-QDEmLa+7qdhVIv8sFZfVxU1VSyVvnXPsxq8Vam49mKUcO1Z8VTLEJk9uI21uiJUsnmm0I4Hrsdc9TgkOQo9WSA== +conventional-changelog-angular@^5.0.12: + version "5.0.13" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" + integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== dependencies: - compare-func "^1.3.1" + compare-func "^2.0.0" q "^1.5.1" conventional-changelog-conventionalcommits@^4.6.0: @@ -3486,79 +3530,78 @@ conventional-changelog-conventionalcommits@^4.6.0: lodash "^4.17.15" q "^1.5.1" -conventional-changelog-core@^3.1.6: - version "3.2.3" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz#b31410856f431c847086a7dcb4d2ca184a7d88fb" - integrity sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ== +conventional-changelog-core@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" + integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== dependencies: - conventional-changelog-writer "^4.0.6" - conventional-commits-parser "^3.0.3" + add-stream "^1.0.0" + conventional-changelog-writer "^5.0.0" + conventional-commits-parser "^3.2.0" dateformat "^3.0.0" - get-pkg-repo "^1.0.0" - git-raw-commits "2.0.0" + get-pkg-repo "^4.0.0" + git-raw-commits "^2.0.8" git-remote-origin-url "^2.0.0" - git-semver-tags "^2.0.3" - lodash "^4.2.1" - normalize-package-data "^2.3.5" + git-semver-tags "^4.1.1" + lodash "^4.17.15" + normalize-package-data "^3.0.0" q "^1.5.1" read-pkg "^3.0.0" read-pkg-up "^3.0.0" - through2 "^3.0.0" + through2 "^4.0.0" -conventional-changelog-preset-loader@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.0.tgz#580fa8ab02cef22c24294d25e52d7ccd247a9a6a" - integrity sha512-/rHb32J2EJnEXeK4NpDgMaAVTFZS3o1ExmjKMtYVgIC4MQn0vkNSbYpdGRotkfGGRWiqk3Ri3FBkiZGbAfIfOQ== +conventional-changelog-preset-loader@^2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" + integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== -conventional-changelog-writer@^4.0.6: - version "4.0.11" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.11.tgz#9f56d2122d20c96eb48baae0bf1deffaed1edba4" - integrity sha512-g81GQOR392I+57Cw3IyP1f+f42ME6aEkbR+L7v1FBBWolB0xkjKTeCWVguzRrp6UiT1O6gBpJbEy2eq7AnV1rw== +conventional-changelog-writer@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" + integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== dependencies: - compare-func "^1.3.1" - conventional-commits-filter "^2.0.2" + conventional-commits-filter "^2.0.7" dateformat "^3.0.0" - handlebars "^4.4.0" + handlebars "^4.7.7" json-stringify-safe "^5.0.1" lodash "^4.17.15" - meow "^5.0.0" + meow "^8.0.0" semver "^6.0.0" split "^1.0.0" - through2 "^3.0.0" + through2 "^4.0.0" -conventional-commits-filter@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz#f122f89fbcd5bb81e2af2fcac0254d062d1039c1" - integrity sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ== +conventional-commits-filter@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" + integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== dependencies: lodash.ismatch "^4.4.0" modify-values "^1.0.0" -conventional-commits-parser@^3.0.3: - version "3.0.8" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.8.tgz#23310a9bda6c93c874224375e72b09fb275fe710" - integrity sha512-YcBSGkZbYp7d+Cr3NWUeXbPDFUN6g3SaSIzOybi8bjHL5IJ5225OSCxJJ4LgziyEJ7AaJtE9L2/EU6H7Nt/DDQ== +conventional-commits-parser@^3.2.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" + integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== dependencies: JSONStream "^1.0.4" is-text-path "^1.0.1" lodash "^4.17.15" - meow "^5.0.0" - split2 "^2.0.0" - through2 "^3.0.0" - trim-off-newlines "^1.0.0" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" -conventional-recommended-bump@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz#5af63903947b6e089e77767601cb592cabb106ba" - integrity sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ== +conventional-recommended-bump@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz#cfa623285d1de554012f2ffde70d9c8a22231f55" + integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== dependencies: concat-stream "^2.0.0" - conventional-changelog-preset-loader "^2.1.1" - conventional-commits-filter "^2.0.2" - conventional-commits-parser "^3.0.3" - git-raw-commits "2.0.0" - git-semver-tags "^2.0.3" - meow "^4.0.0" + conventional-changelog-preset-loader "^2.3.4" + conventional-commits-filter "^2.0.7" + conventional-commits-parser "^3.2.0" + git-raw-commits "^2.0.8" + git-semver-tags "^4.1.1" + meow "^8.0.0" q "^1.5.1" convert-source-map@^1.6.0: @@ -3583,37 +3626,21 @@ cookie@0.5.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cosmiconfig@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== +cosmiconfig@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" cosmjs-types@^0.7.1: version "0.7.2" @@ -3623,7 +3650,7 @@ cosmjs-types@^0.7.1: long "^4.0.0" protobufjs "~6.11.2" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -3655,29 +3682,15 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - damerau-levenshtein@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== -dargs@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" - integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= - dependencies: - number-is-nan "^1.0.0" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== dataloader@^1.4.0: version "1.4.0" @@ -3725,28 +3738,21 @@ dd-trace@^3.3.0: retry "^0.10.1" semver "^5.5.0" -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: +debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@^3.1.0, debug@^3.2.7: +debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -3758,7 +3764,7 @@ debuglog@^1.0.1: resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= -decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: +decamelize-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= @@ -3766,15 +3772,17 @@ decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: decamelize "^1.1.0" map-obj "^1.0.0" -decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.1.0, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +decode-named-character-reference@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" + integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== + dependencies: + character-entities "^2.0.0" decompress-response@^6.0.0: version "6.0.0" @@ -3833,6 +3841,11 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + define-lazy-prop@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" @@ -3846,34 +3859,12 @@ define-properties@^1.1.3, define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" +delay@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -delay@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" - integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== - -delayed-stream@~1.0.0: +delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= @@ -3883,17 +3874,17 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= -depd@2.0.0, depd@^2.0.0, depd@~1.1.2: +depd@2.0.0, depd@^2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -deprecation@^2.0.0, deprecation@^2.3.1: +deprecation@^2.0.0: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== -dequal@^2.0.3: +dequal@^2.0.0, dequal@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== @@ -3908,6 +3899,11 @@ detect-indent@^5.0.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= +detect-indent@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" + integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -3943,12 +3939,10 @@ diff-sequences@^29.4.3: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== -dir-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== - dependencies: - path-type "^3.0.0" +diff@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" + integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== dir-glob@^3.0.1: version "3.0.1" @@ -3971,20 +3965,6 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dot-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" - integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= - dependencies: - is-obj "^1.0.0" - -dot-prop@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== - dependencies: - is-obj "^1.0.0" - dot-prop@^5.1.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" @@ -3992,6 +3972,18 @@ dot-prop@^5.1.0: dependencies: is-obj "^2.0.0" +dot-prop@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" + integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== + dependencies: + is-obj "^2.0.0" + +dotenv@~10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + dprint-node@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/dprint-node/-/dprint-node-1.0.7.tgz#f571eaf61affb3a696cff1bdde78a021875ba540" @@ -4004,34 +3996,23 @@ duplexer@^0.1.1: resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= +ejs@^3.1.7: + version "3.1.9" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + dependencies: + jake "^10.8.5" + electron-to-chromium@^1.4.431: version "1.4.440" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.440.tgz#d3b1eeb36b717eb479a240c0406ac1fa67901762" @@ -4055,11 +4036,6 @@ emittery@^1.0.1: resolved "https://registry.yarnpkg.com/emittery/-/emittery-1.0.1.tgz#e0cf36e2d7eef94dbd025969f642d57ae50a56cd" integrity sha512-2ID6FdrMD9KDLldGesP6317G78K7km/kMcwItRtVFva7I/cSEOIaLpewaUb+YLXVwdAp3Ctfxh/V5zIl1sj7dQ== -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -4080,41 +4056,43 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -encoding@^0.1.11, encoding@^0.1.13: +encoding@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" +enquirer@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + env-paths@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== -envinfo@^7.3.1: - version "7.5.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.0.tgz#91410bb6db262fb4f1409bd506e9ff57e91023f4" - integrity sha512-jDgnJaF/Btomk+m3PZDTTCb5XIIIX3zYItnCRfF73zVgvinLoRomuhi75Y4su0PtQxWz4v66XnLLckyvyJTOIQ== - -err-code@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" - integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= +envinfo@^7.7.4: + version "7.10.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" + integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== err-code@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== -error-ex@^1.2.0, error-ex@^1.3.1: +error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== @@ -4186,18 +4164,6 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -4401,10 +4367,10 @@ eslint-plugin-prettier@^4.0.0: dependencies: prettier-linter-helpers "^1.0.0" -eslint-plugin-prettier@^5.0.0-alpha.2: - version "5.0.0-alpha.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0-alpha.2.tgz#4dd7edf88ff9bc13a3bbd91c059aae267dac4576" - integrity sha512-F6YBCbrRzvZwcINw3crm1+/uX/i+rJYaFErPtwCfUoPLywRfY7pwBtI3yMe5OpIotuaiws8cd29oM80ca6NQSQ== +eslint-plugin-prettier@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz#6887780ed95f7708340ec79acfdf60c35b9be57a" + integrity sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w== dependencies: prettier-linter-helpers "^1.0.0" synckit "^0.8.5" @@ -4569,29 +4535,11 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -eventemitter3@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== - -eventemitter3@^4.0.0: +eventemitter3@^4.0.0, eventemitter3@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -4622,24 +4570,16 @@ execa@^7.1.1: signal-exit "^3.0.7" strip-final-newline "^3.0.0" -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - expand-template@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + expose-gc@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/expose-gc/-/expose-gc-1.0.0.tgz#ba0e825b390cc3e7ab38fc5b945cd2b4018584b3" @@ -4682,26 +4622,6 @@ express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -4711,25 +4631,6 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0, extsprintf@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - fast-check@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/fast-check/-/fast-check-3.1.1.tgz#72c5ae7022a4e86504762e773adfb8a5b0b01252" @@ -4747,17 +4648,16 @@ fast-diff@^1.1.2, fast-diff@^1.2.0: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== -fast-glob@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== +fast-glob@3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0: version "3.3.0" @@ -4797,19 +4697,7 @@ fecha@^4.2.0: resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== -figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -figures@^3.0.0: +figures@3.2.0, figures@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== @@ -4836,15 +4724,12 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" + minimatch "^5.0.1" fill-range@^7.0.1: version "7.0.1" @@ -4866,14 +4751,6 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - find-up@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -4881,14 +4758,7 @@ find-up@^2.0.0: dependencies: locate-path "^2.0.0" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.1.0: +find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -4932,25 +4802,22 @@ flat-cache@^3.0.4: flatted "^3.1.0" rimraf "^3.0.2" +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + flatted@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - fn.name@1.x.x: version "1.1.0" resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== -follow-redirects@^1.0.0, follow-redirects@^1.14.0: +follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.15.0: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== @@ -4962,11 +4829,6 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - foreground-child@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" @@ -4975,10 +4837,13 @@ foreground-child@^2.0.0: cross-spawn "^7.0.0" signal-exit "^3.0.2" -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" form-data@^3.0.0: version "3.0.1" @@ -4989,13 +4854,13 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" - combined-stream "^1.0.6" + combined-stream "^1.0.8" mime-types "^2.1.12" forwarded@0.2.0: @@ -5003,41 +4868,26 @@ forwarded@0.2.0: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== +fs-extra@^11.1.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" + integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== dependencies: graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" + jsonfile "^6.0.1" + universalify "^2.0.0" -fs-extra@^9.0.0: +fs-extra@^9.0.0, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -5047,13 +4897,6 @@ fs-extra@^9.0.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-minipass@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -5061,15 +4904,12 @@ fs-minipass@^2.0.0, fs-minipass@^2.1.0: dependencies: minipass "^3.0.0" -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= +fs-minipass@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.2.tgz#5b383858efa8c1eb8c33b39e994f7e8555b8b3a3" + integrity sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g== dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" + minipass "^5.0.0" fs.realpath@^1.0.0: version "1.0.0" @@ -5130,26 +4970,7 @@ gauge@^4.0.3: strip-ansi "^6.0.1" wide-align "^1.1.5" -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -genfun@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" - integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== - -get-caller-file@^2.0.1, get-caller-file@^2.0.5: +get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -5163,33 +4984,20 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@ has "^1.0.3" has-symbols "^1.0.3" -get-pkg-repo@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" - integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0= +get-pkg-repo@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" + integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== dependencies: - hosted-git-info "^2.1.4" - meow "^3.3.0" - normalize-package-data "^2.3.0" - parse-github-repo-url "^1.3.0" + "@hutson/parse-repository-url" "^3.0.0" + hosted-git-info "^4.0.0" through2 "^2.0.0" + yargs "^16.2.0" -get-port@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" - integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - -get-stream@^4.0.0, get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" +get-port@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" @@ -5204,28 +5012,16 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -git-raw-commits@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" - integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg== +git-raw-commits@^2.0.8: + version "2.0.11" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" + integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== dependencies: - dargs "^4.0.1" - lodash.template "^4.0.2" - meow "^4.0.0" - split2 "^2.0.0" - through2 "^2.0.0" + dargs "^7.0.0" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" git-remote-origin-url@^2.0.0: version "2.0.0" @@ -5235,28 +5031,28 @@ git-remote-origin-url@^2.0.0: gitconfiglocal "^1.0.0" pify "^2.3.0" -git-semver-tags@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.3.tgz#48988a718acf593800f99622a952a77c405bfa34" - integrity sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA== +git-semver-tags@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" + integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== dependencies: - meow "^4.0.0" + meow "^8.0.0" semver "^6.0.0" -git-up@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.1.tgz#cb2ef086653640e721d2042fe3104857d89007c0" - integrity sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw== +git-up@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" + integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== dependencies: - is-ssh "^1.3.0" - parse-url "^5.0.0" + is-ssh "^1.4.0" + parse-url "^8.1.0" -git-url-parse@^11.1.2: - version "11.1.2" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.1.2.tgz#aff1a897c36cc93699270587bea3dbcbbb95de67" - integrity sha512-gZeLVGY8QVKMIkckncX+iCq2/L8PlwncvDFKiWkBn9EtCfYDbliRTTp6qzyQ1VMdITUfq7293zDzfpjdiGASSQ== +git-url-parse@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4" + integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== dependencies: - git-up "^4.0.0" + git-up "^7.0.0" gitconfiglocal@^1.0.0: version "1.0.0" @@ -5270,15 +5066,7 @@ github-from-package@0.0.0: resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.0.0, glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -5292,12 +5080,30 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= +glob@7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^10.2.2: + version "10.3.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.3.tgz#8360a4ffdd6ed90df84aa8d52f21f452e86a123b" + integrity sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.0.3" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" -glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -5339,7 +5145,7 @@ globalthis@^1.0.1, globalthis@^1.0.3: dependencies: define-properties "^1.1.3" -globby@^11.0.1, globby@^11.1.0: +globby@^11.0.1, globby@^11.0.2, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -5362,20 +5168,6 @@ globby@^13.1.4: merge2 "^1.4.1" slash "^4.0.0" -globby@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" - integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^1.0.2" - dir-glob "^2.2.2" - fast-glob "^2.2.6" - glob "^7.1.3" - ignore "^4.0.3" - pify "^4.0.1" - slash "^2.0.0" - gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -5383,7 +5175,7 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.6: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -5393,7 +5185,7 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -handlebars@^4.4.0: +handlebars@^4.7.7: version "4.7.7" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== @@ -5405,19 +5197,6 @@ handlebars@^4.4.0: optionalDependencies: uglify-js "^3.1.4" -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== - dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" - hard-rejection@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" @@ -5462,42 +5241,11 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has-unicode@^2.0.0, has-unicode@^2.0.1: +has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -5522,32 +5270,41 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: +hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -hosted-git-info@^4.0.1: +hosted-git-info@^3.0.6: + version "3.0.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" + integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== dependencies: lru-cache "^6.0.0" +hosted-git-info@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.2.1.tgz#0ba1c97178ef91f3ab30842ae63d6a272341156f" + integrity sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw== + dependencies: + lru-cache "^7.5.1" + html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -http-cache-semantics@^3.8.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== - -http-cache-semantics@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== +http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-errors@2.0.0: version "2.0.0" @@ -5560,14 +5317,6 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== - dependencies: - agent-base "4" - debug "3.1.0" - http-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" @@ -5597,23 +5346,6 @@ http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-proxy-agent@^2.2.3: - version "2.2.4" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" - integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - https-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" @@ -5658,41 +5390,23 @@ ieee754@^1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - ignore-by-default@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-2.1.0.tgz#c0e0de1a99b6065bdc93315a6f728867981464db" integrity sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw== -ignore-walk@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== +ignore-walk@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" + integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== dependencies: - minimatch "^3.0.4" - -ignore@^4.0.3: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + minimatch "^5.0.1" -ignore@^5.0.5, ignore@^5.2.0: +ignore@^5.0.4, ignore@^5.0.5, ignore@^5.2.0, ignore@^5.2.4: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -5708,13 +5422,13 @@ import-in-the-middle@^1.3.3: dependencies: module-details-from-path "^1.0.3" -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" import-meta-resolve@^2.2.1: version "2.2.1" @@ -5726,18 +5440,6 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" @@ -5748,7 +5450,7 @@ indent-string@^5.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5" integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== -infer-owner@^1.0.3, infer-owner@^1.0.4: +infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== @@ -5761,7 +5463,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5771,43 +5473,23 @@ ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -init-package-json@^1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" - integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== +init-package-json@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-3.0.2.tgz#f5bc9bac93f2bdc005778bc2271be642fecfcd69" + integrity sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A== dependencies: - glob "^7.1.1" - npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" + npm-package-arg "^9.0.1" promzard "^0.3.0" - read "~1.0.1" - read-package-json "1 || 2" - semver "2.x || 3.x || 4 || 5" - validate-npm-package-license "^3.0.1" - validate-npm-package-name "^3.0.0" - -inquirer@^6.2.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" + read "^1.0.7" + read-package-json "^5.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^4.0.0" -inquirer@^8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.2.tgz#1310517a87a0814d25336c78a20b44c3d9b7629d" - integrity sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow== +inquirer@^8.2.2, inquirer@^8.2.4: + version "8.2.5" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" + integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== dependencies: ansi-escapes "^4.2.1" chalk "^4.1.1" @@ -5823,6 +5505,7 @@ inquirer@^8.2.2: string-width "^4.1.0" strip-ansi "^6.0.0" through "^2.3.6" + wrap-ansi "^7.0.0" internal-slot@^1.0.5: version "1.0.5" @@ -5833,11 +5516,6 @@ internal-slot@^1.0.5: has "^1.0.3" side-channel "^1.0.4" -ip@1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - ip@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" @@ -5858,20 +5536,6 @@ irregular-plurals@^3.2.0, irregular-plurals@^3.3.0: resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.3.0.tgz#67d0715d4361a60d9fd9ee80af3881c631a31ee2" integrity sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g== -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" @@ -5913,11 +5577,6 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - is-builtin-module@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" @@ -5937,27 +5596,13 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== +is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== dependencies: has "^1.0.3" -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - is-date-object@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -5965,33 +5610,10 @@ is-date-object@^1.0.1: dependencies: has-tostringtag "^1.0.0" -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-docker@^3.0.0: version "3.0.0" @@ -6003,40 +5625,11 @@ is-error@^2.2.2: resolved "https://registry.yarnpkg.com/is-error/-/is-error-2.2.2.tgz#c10ade187b3c93510c5470a5567833ee25649843" integrity sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg== -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: +is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-finite@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" - integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -6047,13 +5640,6 @@ is-fullwidth-code-point@^4.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -6095,23 +5681,11 @@ is-number-object@^1.0.4: dependencies: has-tostringtag "^1.0.0" -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - is-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" @@ -6127,25 +5701,23 @@ is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + is-plain-obj@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== -is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" -is-plain-object@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" - integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg== - dependencies: - isobject "^4.0.0" - is-plain-object@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" @@ -6178,17 +5750,12 @@ is-shared-array-buffer@^1.0.2: dependencies: call-bind "^1.0.2" -is-ssh@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" - integrity sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg== +is-ssh@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" + integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== dependencies: - protocols "^1.1.0" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + protocols "^2.0.1" is-stream@^2.0.0: version "2.0.1" @@ -6232,10 +5799,10 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.9: gopd "^1.0.1" has-tostringtag "^1.0.0" -is-typedarray@~1.0.0: +is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== is-unicode-supported@^0.1.0: version "0.1.0" @@ -6247,11 +5814,6 @@ is-unicode-supported@^1.2.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -6259,11 +5821,6 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -is-windows@^1.0.0, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - is-wsl@^2.1.1, is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" @@ -6271,7 +5828,7 @@ is-wsl@^2.1.1, is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -isarray@1.0.0, isarray@~1.0.0: +isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -6281,33 +5838,16 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: +isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -isobject@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" - integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== - isomorphic-ws@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - istanbul-lib-coverage@3.2.0, istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" @@ -6330,6 +5870,25 @@ istanbul-reports@^3.1.4: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +jackspeak@^2.0.3: + version "2.2.2" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.2.tgz#707c62733924b8dc2a0a629dc6248577788b5385" + integrity sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jake@^10.8.5: + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + jessie.js@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/jessie.js/-/jessie.js-0.3.2.tgz#68159e1097f86fa56a3136668313ea38e96fc9f2" @@ -6369,25 +5928,20 @@ js-yaml@4.0.0: dependencies: argparse "^2.0.1" -js-yaml@^3.13.1, js-yaml@^3.14.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^4.1.0: +js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +js-yaml@^3.10.0, js-yaml@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" jsdoc-type-pratt-parser@~4.0.0: version "4.0.0" @@ -6399,12 +5953,12 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1: +json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0: +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -6419,11 +5973,6 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -6436,7 +5985,12 @@ json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: +json-stringify-nice@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" + integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== + +json-stringify-safe@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= @@ -6448,12 +6002,15 @@ json5@^1.0.2: dependencies: minimist "^1.2.0" -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" +json5@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonc-parser@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== jsonfile@^6.0.1: version "6.1.0" @@ -6469,20 +6026,10 @@ jsonify@~0.0.0: resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= -jsonparse@^1.2.0: +jsonparse@^1.2.0, jsonparse@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== jsx-ast-utils@^3.3.2, jsx-ast-utils@^3.3.3: version "3.3.3" @@ -6492,26 +6039,17 @@ jsx-ast-utils@^3.3.2, jsx-ast-utils@^3.3.3: array-includes "^3.1.5" object.assign "^4.1.3" -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" +just-diff-apply@^5.2.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" + integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== +just-diff@^5.0.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.2.0.tgz#60dca55891cf24cd4a094e33504660692348a241" + integrity sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw== -kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: +kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -6523,6 +6061,11 @@ klaw-sync@^6.0.0: dependencies: graceful-fs "^4.1.11" +kleur@^4.0.3: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + koalas@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/koalas/-/koalas-1.0.2.tgz#318433f074235db78fae5661a02a8ca53ee295cd" @@ -6545,29 +6088,34 @@ language-tags@=1.0.5: dependencies: language-subtag-registry "~0.3.2" -lerna@^3.22.1: - version "3.22.1" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.22.1.tgz#82027ac3da9c627fd8bf02ccfeff806a98e65b62" - integrity sha512-vk1lfVRFm+UuEFA7wkLKeSF7Iz13W+N/vFd48aW2yuS7Kv0RbNm2/qcDPV863056LMfkRlsEe+QYOw3palj5Lg== - dependencies: - "@lerna/add" "3.21.0" - "@lerna/bootstrap" "3.21.0" - "@lerna/changed" "3.21.0" - "@lerna/clean" "3.21.0" - "@lerna/cli" "3.18.5" - "@lerna/create" "3.22.0" - "@lerna/diff" "3.21.0" - "@lerna/exec" "3.21.0" - "@lerna/import" "3.22.0" - "@lerna/info" "3.21.0" - "@lerna/init" "3.21.0" - "@lerna/link" "3.21.0" - "@lerna/list" "3.21.0" - "@lerna/publish" "3.22.1" - "@lerna/run" "3.21.0" - "@lerna/version" "3.22.1" - import-local "^2.0.0" - npmlog "^4.1.2" +lerna@^5.6.2: + version "5.6.2" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-5.6.2.tgz#cdcdfe4e8bf07eccb4ecff1c216def9c67e62af2" + integrity sha512-Y0yMPslvnBnTZi7Nrs/gDyYZYauNf61xWNCehISHIORxZmmpoluNkcWTfcyb47is5uJQCv5QJX5xKKubbs+a6w== + dependencies: + "@lerna/add" "5.6.2" + "@lerna/bootstrap" "5.6.2" + "@lerna/changed" "5.6.2" + "@lerna/clean" "5.6.2" + "@lerna/cli" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/create" "5.6.2" + "@lerna/diff" "5.6.2" + "@lerna/exec" "5.6.2" + "@lerna/import" "5.6.2" + "@lerna/info" "5.6.2" + "@lerna/init" "5.6.2" + "@lerna/link" "5.6.2" + "@lerna/list" "5.6.2" + "@lerna/publish" "5.6.2" + "@lerna/run" "5.6.2" + "@lerna/version" "5.6.2" + "@nrwl/devkit" ">=14.8.1 < 16" + import-local "^3.0.2" + inquirer "^8.2.4" + npmlog "^6.0.2" + nx ">=14.8.1 < 16" + typescript "^3 || ^4" levn@^0.4.1: version "0.4.1" @@ -6577,6 +6125,27 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +libnpmaccess@^6.0.3: + version "6.0.4" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-6.0.4.tgz#2dd158bd8a071817e2207d3b201d37cf1ad6ae6b" + integrity sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag== + dependencies: + aproba "^2.0.0" + minipass "^3.1.1" + npm-package-arg "^9.0.1" + npm-registry-fetch "^13.0.0" + +libnpmpublish@^6.0.4: + version "6.0.5" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-6.0.5.tgz#5a894f3de2e267d62f86be2a508e362599b5a4b1" + integrity sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg== + dependencies: + normalize-package-data "^4.0.0" + npm-package-arg "^9.0.1" + npm-registry-fetch "^13.0.0" + semver "^7.3.7" + ssri "^9.0.0" + libsodium-wrappers@^0.7.6: version "0.7.10" resolved "https://registry.yarnpkg.com/libsodium-wrappers/-/libsodium-wrappers-0.7.10.tgz#13ced44cacb0fc44d6ac9ce67d725956089ce733" @@ -6599,16 +6168,10 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" +lines-and-columns@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.3.tgz#b2f0badedb556b747020ab8ea7f0373e22efac1b" + integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w== load-json-file@^4.0.0: version "4.0.0" @@ -6620,16 +6183,15 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -load-json-file@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" - integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== +load-json-file@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" + integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== dependencies: graceful-fs "^4.1.15" - parse-json "^4.0.0" - pify "^4.0.1" - strip-bom "^3.0.0" - type-fest "^0.3.0" + parse-json "^5.0.0" + strip-bom "^4.0.0" + type-fest "^0.6.0" load-json-file@^7.0.0: version "7.0.1" @@ -6644,14 +6206,6 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -6673,26 +6227,11 @@ locate-path@^7.1.0: dependencies: p-locate "^6.0.0" -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - lodash.camelcase@4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= - lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" @@ -6713,11 +6252,6 @@ lodash.pick@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q== -lodash.set@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" - integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= - lodash.snakecase@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" @@ -6728,21 +6262,6 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash.template@^4.0.2, lodash.template@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" @@ -6758,7 +6277,7 @@ lodash.upperfirst@4.3.1: resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== -lodash@4.17.21, lodash@^4.17.12, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.2.1: +lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -6793,21 +6312,6 @@ long@^5.0.0: resolved "https://registry.yarnpkg.com/long/-/long-5.2.0.tgz#2696dadf4b4da2ce3f6f6b89186085d94d52fd61" integrity sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w== -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -6815,15 +6319,15 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru-cache@^7.14.0, lru-cache@^7.7.1: +lru-cache@^7.14.0, lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: version "7.18.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== -macos-release@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f" - integrity sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA== +"lru-cache@^9.1.1 || ^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61" + integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw== magic-string@^0.25.7: version "0.25.7" @@ -6832,13 +6336,6 @@ magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.4" -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -6854,7 +6351,7 @@ make-dir@^3.0.0, make-dir@^3.1.0: dependencies: semver "^6.0.0" -make-fetch-happen@^10.0.3: +make-fetch-happen@^10.0.6: version "10.2.1" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== @@ -6876,22 +6373,26 @@ make-fetch-happen@^10.0.3: socks-proxy-agent "^7.0.0" ssri "^9.0.0" -make-fetch-happen@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" - integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== - dependencies: - agentkeepalive "^3.4.1" - cacache "^12.0.0" - http-cache-semantics "^3.8.1" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - node-fetch-npm "^2.0.2" - promise-retry "^1.1.1" - socks-proxy-agent "^4.0.0" - ssri "^6.0.0" +make-fetch-happen@^11.0.3: + version "11.1.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" + integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^17.0.0" + http-cache-semantics "^4.1.1" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^5.0.0" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^10.0.0" map-age-cleaner@^0.1.3: version "0.1.3" @@ -6900,33 +6401,16 @@ map-age-cleaner@^0.1.3: dependencies: p-defer "^1.0.0" -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-obj@^1.0.0, map-obj@^1.0.1: +map-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= -map-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" - integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= - map-obj@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - matcher@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/matcher/-/matcher-5.0.0.tgz#cd82f1c7ae7ee472a9eeaf8ec7cac45e0fe0da62" @@ -6941,6 +6425,31 @@ md5-hex@^3.0.1: dependencies: blueimp-md5 "^2.10.0" +mdast-util-from-markdown@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz#9421a5a247f10d31d2faed2a30df5ec89ceafcf0" + integrity sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + decode-named-character-reference "^1.0.0" + mdast-util-to-string "^3.1.0" + micromark "^3.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-decode-string "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + unist-util-stringify-position "^3.0.0" + uvu "^0.5.0" + +mdast-util-to-string@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz#66f7bb6324756741c5f47a53557f0cbf16b6f789" + integrity sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg== + dependencies: + "@types/mdast" "^3.0.0" + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -6959,51 +6468,22 @@ memorystream@^0.3.1: resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= -meow@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -meow@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" - integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist "^1.1.3" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - -meow@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" - integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - yargs-parser "^10.0.0" +meow@^8.0.0: + version "8.1.2" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" meow@^9.0.0: version "9.0.0" @@ -7033,7 +6513,7 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -7043,24 +6523,199 @@ methods@^1.1.2, methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^3.1.10: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" +micromark-core-commonmark@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz#1386628df59946b2d39fb2edfd10f3e8e0a75bb8" + integrity sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-factory-destination "^1.0.0" + micromark-factory-label "^1.0.0" + micromark-factory-space "^1.0.0" + micromark-factory-title "^1.0.0" + micromark-factory-whitespace "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-classify-character "^1.0.0" + micromark-util-html-tag-name "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" + +micromark-factory-destination@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz#eb815957d83e6d44479b3df640f010edad667b9f" + integrity sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-label@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz#cc95d5478269085cfa2a7282b3de26eb2e2dec68" + integrity sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-factory-space@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz#c8f40b0640a0150751d3345ed885a080b0d15faf" + integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-title@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz#dd0fe951d7a0ac71bdc5ee13e5d1465ad7f50ea1" + integrity sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-whitespace@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz#798fb7489f4c8abafa7ca77eed6b5745853c9705" + integrity sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-character@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz#4fedaa3646db249bc58caeb000eb3549a8ca5dcc" + integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg== + dependencies: + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-chunked@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz#37a24d33333c8c69a74ba12a14651fd9ea8a368b" + integrity sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-classify-character@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz#6a7f8c8838e8a120c8e3c4f2ae97a2bff9190e9d" + integrity sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-combine-extensions@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz#192e2b3d6567660a85f735e54d8ea6e3952dbe84" + integrity sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-decode-numeric-character-reference@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz#b1e6e17009b1f20bc652a521309c5f22c85eb1c6" + integrity sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-decode-string@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz#dc12b078cba7a3ff690d0203f95b5d5537f2809c" + integrity sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz#92e4f565fd4ccb19e0dcae1afab9a173bbeb19a5" + integrity sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw== + +micromark-util-html-tag-name@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz#48fd7a25826f29d2f71479d3b4e83e94829b3588" + integrity sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q== + +micromark-util-normalize-identifier@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz#7a73f824eb9f10d442b4d7f120fecb9b38ebf8b7" + integrity sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-resolve-all@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz#4652a591ee8c8fa06714c9b54cd6c8e693671188" + integrity sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA== + dependencies: + micromark-util-types "^1.0.0" + +micromark-util-sanitize-uri@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz#613f738e4400c6eedbc53590c67b197e30d7f90d" + integrity sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-subtokenize@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz#941c74f93a93eaf687b9054aeb94642b0e92edb1" + integrity sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-util-symbol@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142" + integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag== + +micromark-util-types@^1.0.0, micromark-util-types@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283" + integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg== + +micromark@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.2.0.tgz#1af9fef3f995ea1ea4ac9c7e2f19c48fd5c006e9" + integrity sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + micromark-core-commonmark "^1.0.1" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-combine-extensions "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.5" @@ -7083,7 +6738,7 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -7095,11 +6750,6 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -7130,6 +6780,13 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= +minimatch@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" + integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== + dependencies: + brace-expansion "^1.1.7" + minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -7144,6 +6801,13 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" +minimatch@^9.0.1: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -7153,15 +6817,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist-options@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - -minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -7184,6 +6840,17 @@ minipass-fetch@^2.0.3: optionalDependencies: encoding "^0.1.13" +minipass-fetch@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.3.tgz#d9df70085609864331b533c960fd4ffaa78d15ce" + integrity sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ== + dependencies: + minipass "^5.0.0" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + minipass-flush@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" @@ -7191,6 +6858,14 @@ minipass-flush@^1.0.5: dependencies: minipass "^3.0.0" +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" + minipass-pipeline@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" @@ -7205,14 +6880,6 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@^2.3.5, minipass@^2.6.0, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: version "3.3.6" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" @@ -7220,74 +6887,43 @@ minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: dependencies: yallist "^4.0.0" -minipass@^4.0.0: - version "4.2.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.5.tgz#9e0e5256f1e3513f8c34691dd68549e85b2c8ceb" - integrity sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q== +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -minizlib@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.0.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.2.tgz#58a82b7d81c7010da5bd4b2c0c85ac4b4ec5131e" + integrity sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA== minizlib@^2.1.1, minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" + minipass "^3.0.0" + yallist "^4.0.0" mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp-promise@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" - integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= +mkdirp-infer-owner@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" + integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== dependencies: - mkdirp "*" + chownr "^2.0.0" + infer-owner "^1.0.4" + mkdirp "^1.0.3" -mkdirp@*, mkdirp@^1.0.3, mkdirp@^1.0.4: +mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@^0.5.1, mkdirp@^0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - modify-values@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" @@ -7298,28 +6934,21 @@ module-details-from-path@^1.0.3: resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" integrity sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A== -morgan@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" - integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA== +morgan@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" + integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== dependencies: - basic-auth "~2.0.0" + basic-auth "~2.0.1" debug "2.6.9" - depd "~1.1.2" + depd "~2.0.0" on-finished "~2.3.0" - on-headers "~1.0.1" + on-headers "~1.0.2" -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" +mri@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== ms@2.0.0: version "2.0.0" @@ -7336,35 +6965,22 @@ ms@2.1.3, ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -multimatch@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" - integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA== +multimatch@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" + integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== dependencies: - array-differ "^2.0.3" - array-union "^1.0.2" - arrify "^1.0.1" + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" minimatch "^3.0.4" -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - mute-stream@0.0.8, mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -mz@^2.5.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - n-readlines@^1.0.0, n-readlines@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/n-readlines/-/n-readlines-1.0.1.tgz#bbb7364d38bc31a170a199f986fcacfa76b95f6e" @@ -7375,23 +6991,6 @@ nan@^2.16.0: resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - napi-build-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" @@ -7439,24 +7038,20 @@ node-addon-api@^1.7.1: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.1.tgz#cf813cd69bb8d9100f6bdca6755fc268f54ac492" integrity sha512-2+DuKodWvwRTrCfKOeR24KIc5unKjOh8mz17NCzVnHWfjAdDqbfbjqh7gUT+BkXBRQM52+xCHciKWonJ3CbJMQ== +node-addon-api@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== + node-addon-api@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.0.0.tgz#7d7e6f9ef89043befdb20c1989c905ebde18c501" integrity sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA== -node-fetch-npm@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" - integrity sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw== - dependencies: - encoding "^0.1.11" - json-parse-better-errors "^1.0.0" - safe-buffer "^5.1.1" - -node-fetch@^2.3.0, node-fetch@^2.5.0, node-fetch@^2.6.0, node-fetch@^2.6.7: - version "2.6.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" - integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== +node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7: + version "2.6.12" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" + integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== dependencies: whatwg-url "^5.0.0" @@ -7465,37 +7060,21 @@ node-gyp-build@^3.9.0: resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-3.9.0.tgz#53a350187dd4d5276750da21605d1cb681d09e25" integrity sha512-zLcTg6P4AbcHPq465ZMFNXx7XpKKJh+7kkN699NiQWisR2uWYOWNWqRHAmbnmKiL4e9aLSlmy5U7rEMUXV59+A== -node-gyp-build@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" - integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== - -node-gyp@^5.0.2: - version "5.1.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.0.tgz#8e31260a7af4a2e2f994b0673d4e0b3866156332" - integrity sha512-OUTryc5bt/P8zVgNUmC6xdXiDJxLMAW8cF5tLQOT9E5sOQj+UeQxnnPy74K3CLCa/SOjjBlbuzDLR8ANwA+wmw== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.2" - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.1.2" - request "^2.88.0" - rimraf "^2.6.3" - semver "^5.7.1" - tar "^4.4.12" - which "^1.3.1" +node-gyp-build@^4.3.0, node-gyp-build@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" + integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== -node-gyp@^9.3.1: - version "9.3.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.3.1.tgz#1e19f5f290afcc9c46973d68700cbd21a96192e4" - integrity sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg== +node-gyp@^9.0.0, node-gyp@^9.3.1: + version "9.4.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.0.tgz#2a7a91c7cba4eccfd95e949369f27c9ba704f369" + integrity sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg== dependencies: env-paths "^2.2.0" + exponential-backoff "^3.1.1" glob "^7.1.4" graceful-fs "^4.2.6" - make-fetch-happen "^10.0.3" + make-fetch-happen "^11.0.3" nopt "^6.0.0" npmlog "^6.0.0" rimraf "^3.0.2" @@ -7513,14 +7092,6 @@ nofilter@^3.1.0: resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - nopt@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" @@ -7535,7 +7106,7 @@ nopt@^6.0.0: dependencies: abbrev "^1.0.0" -normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -7555,69 +7126,103 @@ normalize-package-data@^3.0.0: semver "^7.3.4" validate-npm-package-license "^3.0.1" +normalize-package-data@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.1.tgz#b46b24e0616d06cadf9d5718b29b6d445a82a62c" + integrity sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg== + dependencies: + hosted-git-info "^5.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== - -npm-bundled@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== +npm-bundled@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== dependencies: npm-normalize-package-bin "^1.0.1" -npm-lifecycle@^3.1.2: - version "3.1.4" - resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.4.tgz#de6975c7d8df65f5150db110b57cce498b0b604c" - integrity sha512-tgs1PaucZwkxECGKhC/stbEgFyc3TGh2TJcg2CDr6jbvQRdteHNhmMeljRzpe4wgFAXQADoy1cSqqi7mtiAa5A== +npm-bundled@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-2.0.1.tgz#94113f7eb342cd7a67de1e789f896b04d2c600f4" + integrity sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw== dependencies: - byline "^5.0.0" - graceful-fs "^4.1.15" - node-gyp "^5.0.2" - resolve-from "^4.0.0" - slide "^1.1.6" - uid-number "0.0.6" - umask "^1.1.0" - which "^1.3.1" + npm-normalize-package-bin "^2.0.0" + +npm-install-checks@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234" + integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== + dependencies: + semver "^7.1.1" -npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: +npm-normalize-package-bin@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" - integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== +npm-normalize-package-bin@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff" + integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== + +npm-package-arg@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.1.tgz#00ebf16ac395c63318e67ce66780a06db6df1b04" + integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== dependencies: - hosted-git-info "^2.7.1" - osenv "^0.1.5" - semver "^5.6.0" + hosted-git-info "^3.0.6" + semver "^7.0.0" validate-npm-package-name "^3.0.0" -npm-packlist@^1.4.4: - version "1.4.8" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" - integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== +npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: + version "9.1.2" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.2.tgz#fc8acecb00235f42270dda446f36926ddd9ac2bc" + integrity sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg== dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-normalize-package-bin "^1.0.1" + hosted-git-info "^5.0.0" + proc-log "^2.0.1" + semver "^7.3.5" + validate-npm-package-name "^4.0.0" -npm-pick-manifest@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" - integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== +npm-packlist@^5.1.0, npm-packlist@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.3.tgz#69d253e6fd664b9058b85005905012e00e69274b" + integrity sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg== + dependencies: + glob "^8.0.1" + ignore-walk "^5.0.1" + npm-bundled "^2.0.0" + npm-normalize-package-bin "^2.0.0" + +npm-pick-manifest@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz#1d372b4e7ea7c6712316c0e99388a73ed3496e84" + integrity sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw== + dependencies: + npm-install-checks "^5.0.0" + npm-normalize-package-bin "^2.0.0" + npm-package-arg "^9.0.0" + semver "^7.3.5" + +npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.3.0: + version "13.3.1" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz#bb078b5fa6c52774116ae501ba1af2a33166af7e" + integrity sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw== dependencies: - figgy-pudding "^3.5.1" - npm-package-arg "^6.0.0" - semver "^5.4.1" + make-fetch-happen "^10.0.6" + minipass "^3.1.6" + minipass-fetch "^2.0.3" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^9.0.1" + proc-log "^2.0.0" npm-run-all@^4.1.5: version "4.1.5" @@ -7634,13 +7239,6 @@ npm-run-all@^4.1.5: shell-quote "^1.6.1" string.prototype.padend "^3.0.0" -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -7655,16 +7253,6 @@ npm-run-path@^5.1.0: dependencies: path-key "^4.0.0" -npmlog@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - npmlog@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" @@ -7675,7 +7263,7 @@ npmlog@^5.0.1: gauge "^3.0.0" set-blocking "^2.0.0" -npmlog@^6.0.0: +npmlog@^6.0.0, npmlog@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== @@ -7685,30 +7273,62 @@ npmlog@^6.0.0: gauge "^4.0.3" set-blocking "^2.0.0" -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +nx@15.9.4, "nx@>=14.8.1 < 16": + version "15.9.4" + resolved "https://registry.yarnpkg.com/nx/-/nx-15.9.4.tgz#1075bc33fe8ee6c6546c21ec6ffcfd2e000946c6" + integrity sha512-P1G4t59UvE/lkHyruLeSOB5ZuNyh01IwU0tTUOi8f9s/NbP7+OQ8MYVwDV74JHTr6mQgjlS+n+4Eox8tVm9itA== + dependencies: + "@nrwl/cli" "15.9.4" + "@nrwl/tao" "15.9.4" + "@parcel/watcher" "2.0.4" + "@yarnpkg/lockfile" "^1.1.0" + "@yarnpkg/parsers" "^3.0.0-rc.18" + "@zkochan/js-yaml" "0.0.6" + axios "^1.0.0" + chalk "^4.1.0" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^7.0.2" + dotenv "~10.0.0" + enquirer "~2.3.6" + fast-glob "3.2.7" + figures "3.2.0" + flat "^5.0.2" + fs-extra "^11.1.0" + glob "7.1.4" + ignore "^5.0.4" + js-yaml "4.1.0" + jsonc-parser "3.2.0" + lines-and-columns "~2.0.3" + minimatch "3.0.5" + npm-run-path "^4.0.1" + open "^8.4.0" + semver "7.3.4" + string-width "^4.2.3" + strong-log-transformer "^2.1.0" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^4.1.2" + tslib "^2.3.0" + v8-compile-cache "2.3.0" + yargs "^17.6.2" + yargs-parser "21.1.1" + optionalDependencies: + "@nrwl/nx-darwin-arm64" "15.9.4" + "@nrwl/nx-darwin-x64" "15.9.4" + "@nrwl/nx-linux-arm-gnueabihf" "15.9.4" + "@nrwl/nx-linux-arm64-gnu" "15.9.4" + "@nrwl/nx-linux-arm64-musl" "15.9.4" + "@nrwl/nx-linux-x64-gnu" "15.9.4" + "@nrwl/nx-linux-x64-musl" "15.9.4" + "@nrwl/nx-win32-arm64-msvc" "15.9.4" + "@nrwl/nx-win32-x64-msvc" "15.9.4" + +object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - object-hash@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" @@ -7724,13 +7344,6 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - object.assign@^4.1.2, object.assign@^4.1.3, object.assign@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" @@ -7759,22 +7372,6 @@ object.fromentries@^2.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" -object.getownpropertydescriptors@^2.0.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" - integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - object.values@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" @@ -7784,11 +7381,6 @@ object.values@^1.1.6: define-properties "^1.1.4" es-abstract "^1.20.4" -octokit-pagination-methods@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" - integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== - on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -7803,7 +7395,7 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -on-headers@~1.0.1: +on-headers@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== @@ -7822,13 +7414,6 @@ one-time@^1.0.0: dependencies: fn.name "1.x.x" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" @@ -7851,6 +7436,15 @@ open@^7.4.2: is-docker "^2.0.0" is-wsl "^2.1.1" +open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + open@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6" @@ -7898,32 +7492,11 @@ ora@^5.4.1: strip-ansi "^6.0.0" wcwidth "^1.0.1" -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-name@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" - integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== - dependencies: - macos-release "^2.2.0" - windows-release "^3.1.0" - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: +os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@^0.1.4, osenv@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -7948,7 +7521,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -7976,13 +7549,6 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -8004,17 +7570,10 @@ p-locate@^6.0.0: dependencies: p-limit "^4.0.0" -p-map-series@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" - integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco= - dependencies: - p-reduce "^1.0.0" - -p-map@^2.1.0: +p-map-series@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" + integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== p-map@^4.0.0: version "4.0.0" @@ -8030,22 +7589,30 @@ p-map@^5.5.0: dependencies: aggregate-error "^4.0.0" -p-pipe@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" - integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k= +p-pipe@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" + integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== -p-queue@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-4.0.0.tgz#ed0eee8798927ed6f2c2f5f5b77fdb2061a5d346" - integrity sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg== +p-queue@^6.6.2: + version "6.6.2" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== dependencies: - eventemitter3 "^3.1.0" + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" -p-reduce@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" - integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= +p-reduce@^2.0.0, p-reduce@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" + integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== + +p-timeout@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" p-timeout@^5.0.2: version "5.1.0" @@ -8062,27 +7629,45 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -p-waterfall@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00" - integrity sha1-ftlLPOszMngjU69qrhGqn8I1uwA= +p-waterfall@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" + integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== + dependencies: + p-reduce "^2.0.0" + +pacote@^13.0.3, pacote@^13.6.1: + version "13.6.2" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.2.tgz#0d444ba3618ab3e5cd330b451c22967bbd0ca48a" + integrity sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg== dependencies: - p-reduce "^1.0.0" + "@npmcli/git" "^3.0.0" + "@npmcli/installed-package-contents" "^1.0.7" + "@npmcli/promise-spawn" "^3.0.0" + "@npmcli/run-script" "^4.1.0" + cacache "^16.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + infer-owner "^1.0.4" + minipass "^3.1.6" + mkdirp "^1.0.4" + npm-package-arg "^9.0.0" + npm-packlist "^5.1.0" + npm-pick-manifest "^7.0.0" + npm-registry-fetch "^13.0.1" + proc-log "^2.0.0" + promise-retry "^2.0.1" + read-package-json "^5.0.0" + read-package-json-fast "^2.0.3" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" pako@^2.0.2: version "2.1.0" resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -8090,17 +7675,14 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-github-repo-url@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" - integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A= - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= +parse-conflict-json@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" + integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== dependencies: - error-ex "^1.2.0" + json-parse-even-better-errors "^2.3.1" + just-diff "^5.0.1" + just-diff-apply "^5.2.0" parse-json@^4.0.0: version "4.0.0" @@ -8125,34 +7707,25 @@ parse-ms@^3.0.0: resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-3.0.0.tgz#3ea24a934913345fcc3656deda72df921da3a70e" integrity sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw== -parse-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.1.tgz#0ec769704949778cb3b8eda5e994c32073a1adff" - integrity sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA== +parse-path@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" + integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== dependencies: - is-ssh "^1.3.0" - protocols "^1.4.0" + protocols "^2.0.0" -parse-url@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.1.tgz#99c4084fc11be14141efa41b3d117a96fcb9527f" - integrity sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg== +parse-url@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" + integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== dependencies: - is-ssh "^1.3.0" - normalize-url "^3.3.0" - parse-path "^4.0.0" - protocols "^1.4.0" + parse-path "^7.0.0" parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - patch-package@^6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.5.1.tgz#3e5d00c16997e6160291fee06a521c42ac99b621" @@ -8173,18 +7746,6 @@ patch-package@^6.5.1: tmp "^0.0.33" yaml "^1.10.2" -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -8205,7 +7766,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-key@^2.0.0, path-key@^2.0.1: +path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= @@ -8225,20 +7786,19 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-to-regexp@0.1.7, path-to-regexp@^0.1.2: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -8251,11 +7811,6 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -8271,7 +7826,7 @@ pidtree@^0.3.0: resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== -pify@^2.0.0, pify@^2.3.0: +pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= @@ -8291,18 +7846,6 @@ pify@^5.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - pkg-conf@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-4.0.0.tgz#63ace00cbacfa94c2226aee133800802d3e3b80c" @@ -8311,12 +7854,12 @@ pkg-conf@^4.0.0: find-up "^6.0.0" load-json-file "^7.0.0" -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: - find-up "^3.0.0" + find-up "^4.0.0" plur@^4.0.0: version "4.0.0" @@ -8332,11 +7875,6 @@ plur@^5.1.0: dependencies: irregular-plurals "^3.3.0" -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - prebuild-install@^7.1.0: version "7.1.1" resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" @@ -8367,6 +7905,15 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" +prettier-plugin-jsdoc@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prettier-plugin-jsdoc/-/prettier-plugin-jsdoc-1.0.1.tgz#7fb6741969cb503e8f40e96cdc4f5dd9b7ebd2a9" + integrity sha512-07q74MfX9m+xHK2+Lr4c+igiEzAKVDWhqkvlm65WoYJUlRiaV6STXcEtcZMhrPPYgNeQRgb9FJmgE/n+OI4MpQ== + dependencies: + binary-searching "^2.0.5" + comment-parser "^1.3.1" + mdast-util-from-markdown "^1.2.0" + prettier@^2.2.1: version "2.8.8" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" @@ -8393,6 +7940,11 @@ pretty-ms@^8.0.0: dependencies: parse-ms "^3.0.0" +proc-log@^2.0.0, proc-log@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" + integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -8405,19 +7957,21 @@ prom-client@13.1.0: dependencies: tdigest "^0.1.1" +promise-all-reject-late@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" + integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== + +promise-call-limit@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.2.tgz#f64b8dd9ef7693c9c7613e7dfe8d6d24de3031ea" + integrity sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA== + promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -promise-retry@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" - integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= - dependencies: - err-code "^1.0.0" - retry "^0.10.0" - promise-retry@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" @@ -8476,17 +8030,10 @@ protobufjs@^7.0.0: "@types/node" ">=13.7.0" long "^5.0.0" -protocols@^1.1.0, protocols@^1.4.0: - version "1.4.7" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" - integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg== - -protoduck@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" - integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== - dependencies: - genfun "^5.0.0" +protocols@^2.0.0, protocols@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" + integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== proxy-addr@~2.0.7: version "2.0.7" @@ -8496,18 +8043,10 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -psl@^1.1.24: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pump@^3.0.0: version "3.0.0" @@ -8517,20 +8056,6 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -8553,21 +8078,11 @@ qs@6.10.3: dependencies: side-channel "^1.0.4" -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -quick-lru@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" - integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= - quick-lru@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" @@ -8603,41 +8118,28 @@ react-is@^18.0.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -read-cmd-shim@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" - integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== - dependencies: - graceful-fs "^4.1.2" - -"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13: - version "2.1.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" - integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== - dependencies: - glob "^7.1.1" - json-parse-better-errors "^1.0.1" - normalize-package-data "^2.0.0" - npm-normalize-package-bin "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.2" +read-cmd-shim@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz#868c235ec59d1de2db69e11aec885bc095aea087" + integrity sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g== -read-package-tree@^5.1.6: - version "5.3.1" - resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" - integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== +read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" + integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== dependencies: - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - util-promisify "^2.1.0" + json-parse-even-better-errors "^2.3.0" + npm-normalize-package-bin "^1.0.1" -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= +read-package-json@^5.0.0, read-package-json@^5.0.1: + version "5.0.2" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.2.tgz#b8779ccfd169f523b67208a89cc912e3f663f3fa" + integrity sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q== dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" + glob "^8.0.1" + json-parse-even-better-errors "^2.3.1" + normalize-package-data "^4.0.0" + npm-normalize-package-bin "^2.0.0" read-pkg-up@^3.0.0: version "3.0.0" @@ -8656,15 +8158,6 @@ read-pkg-up@^7.0.0, read-pkg-up@^7.0.1: read-pkg "^5.2.0" type-fest "^0.8.1" -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -8684,14 +8177,23 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -read@1, read@~1.0.1: +read@1, read@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -8704,16 +8206,7 @@ read@1, read@~1.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.1.tgz#f9f9b5f536920253b3d26e7660e7da4ccff9bb62" - integrity sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdir-scoped-modules@^1.0.0: +readdir-scoped-modules@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== @@ -8738,23 +8231,7 @@ readline-transform@^1.0.0: readonly-date@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/readonly-date/-/readonly-date-1.0.0.tgz#5af785464d8c7d7c40b9d738cbde8c646f97dcd9" - integrity sha512-tMKIV7hlk0h4mO3JTmmVuIlJVXjKk3Sep9Bf5OH0O+758ruuVkUy2J9SttDLm91IEX/WHlXPSpxMGjPj4beMIQ== - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -redent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" - integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= - dependencies: - indent-string "^3.0.0" - strip-indent "^2.0.0" + integrity sha512-tMKIV7hlk0h4mO3JTmmVuIlJVXjKk3Sep9Bf5OH0O+758ruuVkUy2J9SttDLm91IEX/WHlXPSpxMGjPj4beMIQ== redent@^3.0.0: version "3.0.0" @@ -8769,14 +8246,6 @@ regenerator-runtime@^0.13.11: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" @@ -8786,49 +8255,6 @@ regexp.prototype.flags@^1.4.3: define-properties "^1.1.3" functions-have-names "^1.2.2" -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - -request@^2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.0" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.4.3" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -8839,11 +8265,6 @@ require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - requireindex@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162" @@ -8854,13 +8275,6 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -8868,11 +8282,6 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -8883,11 +8292,6 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - resolve@^1.10.0, resolve@^1.12.0, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.22.1: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" @@ -8897,14 +8301,6 @@ resolve@^1.10.0, resolve@^1.12.0, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.2 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -8913,12 +8309,7 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.10.0, retry@^0.10.1: +retry@^0.10.1: version "0.10.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= @@ -8933,7 +8324,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@~2.6.2: +rimraf@^2.6.3, rimraf@~2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== @@ -8981,7 +8372,7 @@ run-applescript@^5.0.0: dependencies: execa "^5.0.0" -run-async@^2.2.0, run-async@^2.4.0: +run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== @@ -8993,20 +8384,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -rxjs@^6.4.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - rxjs@^7.5.5: version "7.5.5" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" @@ -9014,12 +8391,19 @@ rxjs@^7.5.5: dependencies: tslib "^2.1.0" +sade@^1.7.3: + version "1.8.1" + resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" + integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== + dependencies: + mri "^1.1.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1: +safe-buffer@5.2.1, safe-buffer@^5.0.1: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -9033,34 +8417,34 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - safe-stable-stringify@^2.3.1: version "2.4.2" resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.2.tgz#ec7b037768098bf65310d1d64370de0dc02353aa" integrity sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: +semver@7.3.4: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + +semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.1: +semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.1, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -9103,26 +8487,18 @@ serve-static@1.15.0: parseurl "~1.3.3" send "0.18.0" -ses@^0.18.4: - version "0.18.4" - resolved "https://registry.yarnpkg.com/ses/-/ses-0.18.4.tgz#28781719870262afc6928b7d6d94dc16318dbd86" - integrity sha512-Ph0PC38Q7uutHmMM9XPqA7rp/2taiRwW6pIZJwTr4gz90DtrBvy/x7AmNPH2uqNPhKriZpYKvPi1xKWjM9xJuQ== +ses@^0.18.5: + version "0.18.5" + resolved "https://registry.yarnpkg.com/ses/-/ses-0.18.5.tgz#fc7a88c48dd292dd7253ce060104df5f1a36470d" + integrity sha512-paLV2JHUqGGpbLn+V4LM9g20WVzAn9jLU22Bx5/18fo6h6nF8SwhC+3cAMYxzmHmkAzplY5lkg1ms3xSkmSzdw== + dependencies: + "@endo/env-options" "^0.1.1" -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - setprototypeof@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" @@ -9236,54 +8612,11 @@ slice-ansi@^5.0.0: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" -slide@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= - -smart-buffer@^4.1.0, smart-buffer@^4.2.0: +smart-buffer@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -socks-proxy-agent@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" - integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== - dependencies: - agent-base "~4.2.1" - socks "~2.3.2" - socks-proxy-agent@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" @@ -9301,14 +8634,6 @@ socks@^2.6.2: ip "^2.0.0" smart-buffer "^4.2.0" -socks@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" - integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== - dependencies: - ip "1.1.5" - smart-buffer "^4.1.0" - sort-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" @@ -9316,23 +8641,14 @@ sort-keys@^2.0.0: dependencies: is-plain-obj "^1.0.0" -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== +sort-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18" + integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg== dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + is-plain-obj "^2.0.0" -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -9378,19 +8694,12 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -split2@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" - integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== dependencies: - through2 "^2.0.2" + readable-stream "^3.0.0" split@^1.0.0, split@^1.0.1: version "1.0.1" @@ -9404,29 +8713,14 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^6.0.0, ssri@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" - integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== +ssri@^10.0.0: + version "10.0.4" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.4.tgz#5a20af378be586df139ddb2dfb3bf992cf0daba6" + integrity sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ== dependencies: - figgy-pudding "^3.5.1" + minipass "^5.0.0" -ssri@^9.0.0: +ssri@^9.0.0, ssri@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== @@ -9445,42 +8739,12 @@ stack-utils@^2.0.6: dependencies: escape-string-regexp "^2.0.0" -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -9489,24 +8753,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^5.0.0: +string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== @@ -9558,28 +8805,7 @@ string_decoder@^1.1.1, string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -9593,22 +8819,15 @@ strip-ansi@^7.0.1: dependencies: ansi-regex "^6.0.1" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-final-newline@^2.0.0: version "2.0.0" @@ -9620,18 +8839,6 @@ strip-final-newline@^3.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - dependencies: - get-stdin "^4.0.1" - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -9649,7 +8856,7 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -strong-log-transformer@^2.0.0: +strong-log-transformer@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== @@ -9734,7 +8941,7 @@ tar-fs@^2.0.0: pump "^3.0.0" tar-stream "^2.1.4" -tar-stream@^2.1.4: +tar-stream@^2.1.4, tar-stream@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== @@ -9745,27 +8952,14 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: - version "4.4.19" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" - integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== - dependencies: - chownr "^1.1.4" - fs-minipass "^1.2.7" - minipass "^2.9.0" - minizlib "^1.3.3" - mkdirp "^0.5.5" - safe-buffer "^5.2.1" - yallist "^3.1.1" - -tar@^6.1.11, tar@^6.1.2: - version "6.1.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" - integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== +tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: + version "6.1.15" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" + integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" - minipass "^4.0.0" + minipass "^5.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" @@ -9787,18 +8981,6 @@ temp-dir@^3.0.0: resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-3.0.0.tgz#7f147b42ee41234cc6ba3138cd8e8aa2302acffa" integrity sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw== -temp-write@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492" - integrity sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI= - dependencies: - graceful-fs "^4.1.2" - is-stream "^1.1.0" - make-dir "^1.0.0" - pify "^3.0.0" - temp-dir "^1.0.0" - uuid "^3.0.1" - temp@^0.9.0, temp@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.1.tgz#2d666114fafa26966cd4065996d7ceedd4dd4697" @@ -9830,21 +9012,7 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.0" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" - integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk= - dependencies: - any-promise "^1.0.0" - -through2@^2.0.0, through2@^2.0.2: +through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -9852,12 +9020,12 @@ through2@^2.0.0, through2@^2.0.2: readable-stream "~2.3.6" xtend "~4.0.1" -through2@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" - integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww== +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== dependencies: - readable-stream "2 || 3" + readable-stream "3" through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: version "2.3.8" @@ -9881,7 +9049,7 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@^0.2.1: +tmp@^0.2.1, tmp@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== @@ -9893,21 +9061,6 @@ to-fast-properties@^2.0.0: resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -9915,66 +9068,36 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - toidentifier@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= - dependencies: - punycode "^2.1.0" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - -trim-newlines@^2.0.0: +treeverse@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" - integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= + resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca" + integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A== trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== -trim-off-newlines@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz#8df24847fcb821b0ab27d58ab6efec9f2fe961a1" - integrity sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg== - triple-beam@1.3.0, triple-beam@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== +ts-api-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.1.tgz#8144e811d44c749cd65b2da305a032510774452d" + integrity sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A== + ts-poet@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/ts-poet/-/ts-poet-6.1.0.tgz#c5c3d679dfce1fe39acb5f5415275c5d6a598cb7" @@ -10012,6 +9135,15 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" +tsconfig-paths@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + tsd@^0.28.1: version "0.28.1" resolved "https://registry.yarnpkg.com/tsd/-/tsd-0.28.1.tgz#a470bd88a80ff138496c71606072893fe5820e62" @@ -10025,15 +9157,15 @@ tsd@^0.28.1: path-exists "^4.0.0" read-pkg-up "^7.0.0" -tslib@^1.8.1, tslib@^1.9.0: +tslib@^1.8.1: version "1.13.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== -tslib@^2.1.0, tslib@^2.5.0, tslib@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" - integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== +tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" + integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== tsutils@^3.21.0, tsutils@~3.21.0: version "3.21.0" @@ -10049,11 +9181,6 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -10081,10 +9208,10 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== +type-fest@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" + integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== type-fest@^0.6.0: version "0.6.0" @@ -10113,12 +9240,19 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@~4.9.5: +"typescript@^3 || ^4", typescript@~4.9.5: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== @@ -10136,16 +9270,6 @@ uglify-js@^3.1.4: commander "~2.20.3" source-map "~0.6.1" -uid-number@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= - -umask@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" - integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= - unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -10156,23 +9280,6 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - unique-filename@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" @@ -10180,12 +9287,12 @@ unique-filename@^2.0.0: dependencies: unique-slug "^3.0.0" -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== dependencies: - imurmurhash "^0.1.4" + unique-slug "^4.0.0" unique-slug@^3.0.0: version "3.0.0" @@ -10194,24 +9301,24 @@ unique-slug@^3.0.0: dependencies: imurmurhash "^0.1.4" -universal-user-agent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557" - integrity sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg== +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== dependencies: - os-name "^3.1.0" + imurmurhash "^0.1.4" -universal-user-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-5.0.0.tgz#a3182aa758069bf0e79952570ca757de3579c1d9" - integrity sha512-B5TPtzZleXyPrUMKCpEHFmVhMN6EhmJYjG5PQna9s7mXeSqGTLap4OpqLl5FCEFUI3UBmllkETwKf/db66Y54Q== +unist-util-stringify-position@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d" + integrity sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg== dependencies: - os-name "^3.1.0" + "@types/unist" "^2.0.0" -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== universalify@^2.0.0: version "2.0.0" @@ -10223,23 +9330,15 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - untildify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -upath@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +upath@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" + integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== update-browserslist-db@^1.0.11: version "1.0.11" @@ -10256,37 +9355,35 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util-promisify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" - integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= - dependencies: - object.getownpropertydescriptors "^2.0.3" - utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.0.1, uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uvu@^0.5.0: + version "0.5.6" + resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df" + integrity sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA== + dependencies: + dequal "^2.0.0" + diff "^5.0.0" + kleur "^4.0.3" + sade "^1.7.3" + +v8-compile-cache@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== v8-to-istanbul@^9.0.0: version "9.0.1" @@ -10297,7 +9394,7 @@ v8-to-istanbul@^9.0.0: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== @@ -10312,19 +9409,22 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" +validate-npm-package-name@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" + integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== + dependencies: + builtins "^5.0.0" + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" +walk-up-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" + integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== wbasenodejscpp@latest: version "0.3.134" @@ -10343,11 +9443,6 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - well-known-symbols@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/well-known-symbols/-/well-known-symbols-2.0.0.tgz#e9c7c07dbd132b7b84212c8174391ec1f9871ba5" @@ -10361,15 +9456,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -10381,11 +9467,6 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - which-typed-array@^1.1.9: version "1.1.9" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" @@ -10398,7 +9479,7 @@ which-typed-array@^1.1.9: has-tostringtag "^1.0.0" is-typed-array "^1.1.10" -which@^1.2.9, which@^1.3.1: +which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -10412,20 +9493,13 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -wide-align@^1.1.0, wide-align@^1.1.2, wide-align@^1.1.5: +wide-align@^1.1.2, wide-align@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: string-width "^1.0.2 || 2 || 3 || 4" -windows-release@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f" - integrity sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA== - dependencies: - execa "^1.0.0" - winston-transport@^4.4.0: version "4.5.0" resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.5.0.tgz#6e7b0dd04d393171ed5e4e4905db265f7ab384fa" @@ -10455,16 +9529,7 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -10473,12 +9538,21 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: +write-file-atomic@^2.4.2: version "2.4.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== @@ -10487,6 +9561,24 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: imurmurhash "^0.1.4" signal-exit "^3.0.2" +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +write-file-atomic@^4.0.0, write-file-atomic@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + write-file-atomic@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" @@ -10495,18 +9587,6 @@ write-file-atomic@^5.0.1: imurmurhash "^0.1.4" signal-exit "^4.0.1" -write-json-file@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" - integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= - dependencies: - detect-indent "^5.0.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - pify "^3.0.0" - sort-keys "^2.0.0" - write-file-atomic "^2.0.0" - write-json-file@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" @@ -10519,13 +9599,26 @@ write-json-file@^3.2.0: sort-keys "^2.0.0" write-file-atomic "^2.4.2" -write-pkg@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21" - integrity sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw== +write-json-file@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-4.3.0.tgz#908493d6fd23225344af324016e4ca8f702dd12d" + integrity sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ== + dependencies: + detect-indent "^6.0.0" + graceful-fs "^4.1.15" + is-plain-obj "^2.0.0" + make-dir "^3.0.0" + sort-keys "^4.0.0" + write-file-atomic "^3.0.0" + +write-pkg@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" + integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== dependencies: sort-keys "^2.0.0" - write-json-file "^2.2.0" + type-fest "^0.4.1" + write-json-file "^3.2.0" ws@^7, ws@^7.2.0: version "7.5.7" @@ -10545,73 +9638,36 @@ xtend@~4.0.1: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.2: +yaml@^1.10.0, yaml@^1.10.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== - dependencies: - camelcase "^4.1.0" +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== -yargs-parser@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.0.tgz#cdd7a97490ec836195f59f3f4dbe5ea9e8f75f08" - integrity sha512-xLTUnCMc4JhxrPEPUYD5IBR1mWCK/aT6+RJ/K29JY2y1vD+FhtgKK0AXRWvI262q3QSffAQuTouFIKUuHX89wQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" +yargs-parser@21.1.1, yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs-parser@^20.2.2, yargs-parser@^20.2.3, yargs-parser@^20.2.9: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^14.2.2: - version "14.2.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.2.tgz#2769564379009ff8597cdd38fba09da9b493c4b5" - integrity sha512-/4ld+4VV5RnrynMhPZJ/ZpOCGSCeghMykZ3BhdFBDa9Wy/RH6uEGNWDJog+aUlq+9OM1CFTgtYRW5Is1Po9NOA== - dependencies: - cliui "^5.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^15.0.0" - yargs@^16.1.0, yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" @@ -10625,7 +9681,7 @@ yargs@^16.1.0, yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.7.2: +yargs@^17.6.2, yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==