diff --git a/packages/cli/package.json b/packages/cli/package.json index 6f9ccd032..26be8c149 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -29,6 +29,7 @@ }, "dependencies": { "@float-capital/float-subgraph-uncrashable": "^0.0.0-alpha.4", + "@graphprotocol/graph-cli-core": "workspace:*", "@oclif/core": "2.8.6", "@oclif/plugin-autocomplete": "^2.3.6", "@oclif/plugin-not-found": "^2.4.0", diff --git a/packages/cli/src/commands/codegen.ts b/packages/cli/src/commands/codegen.ts index 13789465e..c10c3ba9b 100644 --- a/packages/cli/src/commands/codegen.ts +++ b/packages/cli/src/commands/codegen.ts @@ -1,9 +1,9 @@ import path from 'path'; import { Args, Command, Flags } from '@oclif/core'; -import * as DataSourcesExtractor from '../command-helpers/data-sources'; import { assertGraphTsVersion, assertManifestApiVersion } from '../command-helpers/version'; import debug from '../debug'; -import Protocol from '../protocols'; +import { loadManifest } from '../migrations/util/load-manifest'; +import Protocol from '../protocols/new-protocol'; import TypeGenerator from '../type-generator'; const codegenDebug = debug('graph-cli:codegen'); @@ -61,7 +61,7 @@ export default class CodegenCommand extends Command { codegenDebug('Initialized codegen manifest: %o', manifest); - let protocol; + let protocol: Protocol; try { // Checks to make sure codegen doesn't run against // older subgraphs (both apiVersion and graph-ts version). @@ -69,12 +69,15 @@ export default class CodegenCommand extends Command { // We don't want codegen to run without these conditions // because that would mean the CLI would generate code to // the wrong AssemblyScript version. + + // TODO: rewrite these functions to utilize manfiest data await assertManifestApiVersion(manifest, '0.0.5'); await assertGraphTsVersion(path.dirname(manifest), '0.25.0'); + // ---- - const dataSourcesAndTemplates = await DataSourcesExtractor.fromFilePath(manifest); + const manifestData = await loadManifest(manifest); - protocol = Protocol.fromDataSources(dataSourcesAndTemplates); + protocol = new Protocol(manifestData); } catch (e) { this.error(e, { exit: 1 }); } diff --git a/packages/cli/src/migrations/util/load-manifest.ts b/packages/cli/src/migrations/util/load-manifest.ts index 8bc763830..48482ca10 100644 --- a/packages/cli/src/migrations/util/load-manifest.ts +++ b/packages/cli/src/migrations/util/load-manifest.ts @@ -1,10 +1,9 @@ -import path from 'path'; import fs from 'fs-extra'; -import yaml from 'js-yaml'; +import { parseManifest } from '@graphprotocol/graph-cli-core'; -export async function loadManifest(manifestFile: string) { - if (manifestFile.match(/.js$/)) { - return require(path.resolve(manifestFile)); - } - return yaml.safeLoad(await fs.readFile(manifestFile, 'utf-8')); +export async function loadManifest(manifestFileName: string) { + // if (manifestFile.match(/.js$/)) { + // return require(path.resolve(manifestFile)); + // } + return parseManifest(await fs.readFile(manifestFileName, 'utf-8')); } diff --git a/packages/cli/src/protocols/ethereum/abi.ts b/packages/cli/src/protocols/ethereum/abi.ts index 6208f29ee..e344295f3 100644 --- a/packages/cli/src/protocols/ethereum/abi.ts +++ b/packages/cli/src/protocols/ethereum/abi.ts @@ -141,6 +141,7 @@ export default class ABI { } static load(name: string, file: string) { + // TODO: make it async const data = JSON.parse(fs.readFileSync(file).toString()); const abi = ABI.normalized(data); diff --git a/packages/cli/src/protocols/ethereum/type-generator.ts b/packages/cli/src/protocols/ethereum/type-generator.ts index 87c8410df..2458addcd 100644 --- a/packages/cli/src/protocols/ethereum/type-generator.ts +++ b/packages/cli/src/protocols/ethereum/type-generator.ts @@ -5,55 +5,70 @@ import prettier from 'prettier'; import { GENERATED_FILE_NOTE } from '../../codegen/typescript'; import { displayPath } from '../../command-helpers/fs'; import { Spinner, step, withSpinner } from '../../command-helpers/spinner'; -import { TypeGeneratorOptions } from '../../type-generator'; +import { DataSource } from '../utils'; import ABI from './abi'; export default class EthereumTypeGenerator { - private sourceDir: TypeGeneratorOptions['sourceDir']; - private outputDir: TypeGeneratorOptions['outputDir']; + private datasource: DataSource; - constructor(options: TypeGeneratorOptions) { - this.sourceDir = options.sourceDir; - this.outputDir = options.outputDir; + constructor(datasource: DataSource) { + this.datasource = datasource; } - async loadABIs(subgraph: immutable.Map) { + async loadABIs({ sourceDir }: { sourceDir: string }) { return await withSpinner( 'Load contract ABIs', 'Failed to load contract ABIs', `Warnings while loading contract ABIs`, async spinner => { - try { - return subgraph - .get('dataSources') - .reduce( - (abis: any[], dataSource: any) => - dataSource - .getIn(['mapping', 'abis']) - .reduce( - (abis: any[], abi: any) => - abis.push( - this._loadABI(dataSource, abi.get('name'), abi.get('file'), spinner), - ), - abis, - ), - immutable.List(), + switch (this.datasource.kind) { + case 'ethereum': + case 'ethereum/contract': { + const abis = this.datasource.mapping.abis; + try { + const a = await Promise.all( + abis.map(abi => + this._loadABI({ + name: abi.name, + file: abi.file, + spinner, + sourceDir, + }), + ), + ); + + return a; + } catch (e) { + throw Error(`Failed to load contract ABIs: ${e.message}`); + } + } + default: + throw Error( + `Cannot use 'EthereumTypeGenerator' with data source kind '${this.datasource.kind}'`, ); - } catch (e) { - throw Error(`Failed to load contract ABIs: ${e.message}`); } }, ); } - _loadABI(dataSource: any, name: string, maybeRelativePath: string, spinner: Spinner) { + _loadABI({ + name, + file, + spinner, + sourceDir, + }: { + name: string; + file: string; + spinner: Spinner; + sourceDir: string | undefined; + }) { try { - if (this.sourceDir) { - const absolutePath = path.resolve(this.sourceDir, maybeRelativePath); + if (sourceDir) { + const absolutePath = path.resolve(sourceDir, file); step(spinner, `Load contract ABI from`, displayPath(absolutePath)); - return { dataSource, abi: ABI.load(name, absolutePath) }; + return ABI.load(name, absolutePath); } - return { dataSource, abi: ABI.load(name, maybeRelativePath) }; + return ABI.load(name, file); } catch (e) { throw Error(`Failed to load contract ABI: ${e.message}`); } diff --git a/packages/cli/src/protocols/new-protocol.ts b/packages/cli/src/protocols/new-protocol.ts new file mode 100644 index 000000000..f89ee6912 --- /dev/null +++ b/packages/cli/src/protocols/new-protocol.ts @@ -0,0 +1,60 @@ +import type { Manifest } from '@graphprotocol/graph-cli-core'; +import EthereumTypeGenerator from './ethereum/type-generator'; +import { DataSource, DataSourceKind, protocolDebugger, ProtocolName } from './utils'; + +export default class Protocol { + public datasource: DataSource; + public name: ProtocolName; + public kind: DataSourceKind; + + constructor(manifest: Manifest) { + // we only support one datasource for now + this.datasource = manifest.dataSources[0]; + protocolDebugger('Initialized protocol: %o', this.datasource); + + this.kind = this.datasource.kind; + + switch (this.kind) { + case 'arweave': + this.name = 'arweave'; + break; + case 'cosmos': + this.name = 'cosmos'; + break; + case 'ethereum': + this.name = 'ethereum'; + break; + case 'near': + this.name = 'near'; + break; + case 'substreams': + this.name = 'substreams'; + break; + default: + throw new Error(`Unsupported data source kind '${this.kind}'`); + } + } + + hasAbis() { + return 'abis' in this.datasource.mapping ? this.datasource.mapping.abis.length > 0 : false; + } + + getTypeGenerator() { + switch (this.kind) { + case 'arweave': + return null; + case 'cosmos': + return null; + case 'ethereum': + case 'ethereum/contract': + return new EthereumTypeGenerator(this.datasource); + case 'near': + return null; + case 'substreams': + return null; + break; + default: + throw new Error(`Unsupported data source kind '${this.kind}'`); + } + } +} diff --git a/packages/cli/src/protocols/utils.ts b/packages/cli/src/protocols/utils.ts new file mode 100644 index 000000000..9361c4325 --- /dev/null +++ b/packages/cli/src/protocols/utils.ts @@ -0,0 +1,8 @@ +import type { Manifest } from '@graphprotocol/graph-cli-core'; +import debug from '../debug'; + +export const protocolDebugger = debug('graph-cli:protocol'); + +export type ProtocolName = 'arweave' | 'ethereum' | 'near' | 'cosmos' | 'substreams'; +export type DataSource = Manifest['dataSources'][number]; +export type DataSourceKind = Manifest['dataSources'][number]['kind']; diff --git a/packages/cli/src/type-generator.ts b/packages/cli/src/type-generator.ts index c3540ed6c..df8dc3bb2 100644 --- a/packages/cli/src/type-generator.ts +++ b/packages/cli/src/type-generator.ts @@ -34,7 +34,7 @@ export default class TypeGenerator { private sourceDir: string; private options: TypeGeneratorOptions; private protocol: Protocol; - private protocolTypeGenerator: any; + private protocolTypeGenerator; constructor(options: TypeGeneratorOptions) { this.options = options; @@ -43,10 +43,7 @@ export default class TypeGenerator { (this.options.subgraphManifest && path.dirname(this.options.subgraphManifest)); this.protocol = this.options.protocol; - this.protocolTypeGenerator = this.protocol?.getTypeGenerator?.({ - sourceDir: this.sourceDir, - outputDir: this.options.outputDir, - }); + this.protocolTypeGenerator = this.protocol?.getTypeGenerator(); process.on('uncaughtException', e => { toolbox.print.error(`UNCAUGHT EXCEPTION: ${e}`); @@ -75,9 +72,11 @@ export default class TypeGenerator { const subgraph = await this.loadSubgraph(); // Not all protocols support/have ABIs. - if (this.protocol.hasABIs()) { + if (this.protocol.hasAbis()) { typeGenDebug.extend('generateTypes')('Generating types for ABIs'); - const abis = await this.protocolTypeGenerator.loadABIs(subgraph); + const abis = await this.protocolTypeGenerator?.loadABIs({ + sourceDir: this.sourceDir, + }); await this.protocolTypeGenerator.generateTypesForABIs(abis); } @@ -85,7 +84,7 @@ export default class TypeGenerator { await this.generateTypesForDataSourceTemplates(subgraph); // Not all protocols support/have ABIs. - if (this.protocol.hasABIs()) { + if (this.protocol.hasAbis()) { const templateAbis = await this.protocolTypeGenerator.loadDataSourceTemplateABIs(subgraph); await this.protocolTypeGenerator.generateTypesForDataSourceTemplateABIs(templateAbis); } diff --git a/packages/core/package.json b/packages/core/package.json new file mode 100644 index 000000000..79a82227b --- /dev/null +++ b/packages/core/package.json @@ -0,0 +1,25 @@ +{ + "name": "@graphprotocol/graph-cli-core", + "version": "0.0.1", + "description": "Core helpers for the Graph CLI", + "author": "Saihajpreet Singh (https://saihaj.dev)", + "license": "MIT", + "private": true, + "main": "src/index.ts", + "scripts": { + "lint:eslint": "eslint .", + "lint:eslint:fix": "eslint . --fix", + "lint:prettier": "prettier -c .", + "lint:prettier:fix": "prettier . --write", + "test": "vitest" + }, + "dependencies": { + "js-yaml": "3.14.1", + "zod": "^3.23.8" + }, + "devDependencies": { + "@types/js-yaml": "^3.12.7", + "prettier": "3.0.3", + "vitest": "^1.0.2" + } +} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts new file mode 100644 index 000000000..4a1442566 --- /dev/null +++ b/packages/core/src/index.ts @@ -0,0 +1 @@ +export { parseManifest, type Manifest } from './manifest'; diff --git a/packages/core/src/manifest.spec.ts b/packages/core/src/manifest.spec.ts new file mode 100644 index 000000000..f3344560f --- /dev/null +++ b/packages/core/src/manifest.spec.ts @@ -0,0 +1,54 @@ +import assert from 'assert'; +import { readFile } from 'fs/promises'; +import { join } from 'path'; +import { safeLoad } from 'js-yaml'; +import { expect, test } from 'vitest'; +import { parseManifest } from './manifest'; + +const stubsPath = join(__dirname, '..', 'stubs'); + +test('parse "blockHandlers"', async () => { + const yaml = safeLoad(await readFile(join(stubsPath, 'block-handler.yaml'), 'utf8')); + const manifest = parseManifest(yaml); + const blockHandler = manifest.dataSources.map(({ mapping }) => mapping.blockHandlers).flat(); + + expect(blockHandler.length).toBe(1); +}); + +test('parse "callHandlers"', async () => { + const yaml = safeLoad(await readFile(join(stubsPath, 'block-handler.yaml'), 'utf8')); + const manifest = parseManifest(yaml); + const blockHandler = manifest.dataSources.map(({ mapping }) => mapping.callHandlers).flat(); + + expect(blockHandler.length).toBe(1); +}); + +test('parse "eventHandlers"', async () => { + const yaml = safeLoad(await readFile(join(stubsPath, 'block-handler.yaml'), 'utf8')); + const manifest = parseManifest(yaml); + const eventHandlers = manifest.dataSources.map(({ mapping }) => mapping.eventHandlers).flat(); + + expect(eventHandlers.length).toBe(1); +}); + +test('parse "package source"', async () => { + const yaml = safeLoad(await readFile(join(stubsPath, 'substream-subgraph.yaml'), 'utf8')); + const manifest = parseManifest(yaml); + const substream = manifest.dataSources.find(({ kind }) => kind === 'substreams'); + + assert(substream); + assert(substream.kind === 'substreams'); + expect(substream.source.package.moduleName).equal('graph_out'); +}); + +test('parse "substreams params"', async () => { + const yaml = safeLoad( + await readFile(join(stubsPath, 'substream-subgraph-with-params.yaml'), 'utf8'), + ); + const manifest = parseManifest(yaml); + const substream = manifest.dataSources.find(({ kind }) => kind === 'substreams'); + + assert(substream); + assert(substream.kind === 'substreams'); + expect(substream.source.package.params).toEqual(['a', 'b', 123]); +}); diff --git a/packages/core/src/manifest.ts b/packages/core/src/manifest.ts new file mode 100644 index 000000000..c8972b905 --- /dev/null +++ b/packages/core/src/manifest.ts @@ -0,0 +1,224 @@ +import { z } from 'zod'; + +// https://github.com/graphprotocol/graph-node/blob/master/docs/subgraph-manifest.md#14-schema +const Schema = z.object({ + file: z.string().describe('The path of the GraphQL IDL file, either local or on IPFS.'), +}); + +// https://github.com/graphprotocol/graph-node/blob/master/docs/subgraph-manifest.md#151-ethereumcontractsource +const EthereumContractSource = z.object({ + address: z.string(), + abi: z.string(), + startBlock: z.union([z.bigint(), z.number()]).optional(), +}); + +const SubstreamSource = z.object({ + package: z.object({ + moduleName: z.string(), + file: z.string(), + params: z.union([z.string(), z.array(z.union([z.string(), z.number()]))]).optional(), + }), +}); + +// https://github.com/graphprotocol/graph-node/blob/master/docs/subgraph-manifest.md#1522-eventhandler +const EventHandler = z.object({ + event: z + .string() + .describe( + 'An identifier for an event that will be handled in the mapping script. For Ethereum contracts, this must be the full event signature to distinguish from events that may share the same name. No alias types can be used.', + ), + handler: z + .string() + .describe( + 'The name of an exported function in the mapping script that should handle the specified event.', + ), + topic0: z + .string() + .optional() + .describe( + 'A 0x prefixed hex string. If provided, events whose topic0 is equal to this value will be processed by the given handler. When topic0 is provided, only the topic0 value will be matched, and not the hash of the event signature. This is useful for processing anonymous events in Solidity, which can have their topic0 set to anything. By default, topic0 is equal to the hash of the event signature.', + ), +}); + +// https://github.com/graphprotocol/graph-node/blob/master/docs/subgraph-manifest.md#1523-callhandler +const CallHandler = z.object({ + function: z + .string() + .describe( + 'An identifier for a function that will be handled in the mapping script. For Ethereum contracts, this is the normalized function signature to filter calls by.', + ), + handler: z + .string() + .describe( + 'The name of an exported function in the mapping script that should handle the specified event.', + ), +}); + +// https://github.com/graphprotocol/graph-node/blob/master/docs/subgraph-manifest.md#15241-blockhandlerfilter +const BlockHandlerFilter = z.object({ + kind: z.literal('call').describe('The selected block handler filter.'), +}); + +// https://github.com/graphprotocol/graph-node/blob/master/docs/subgraph-manifest.md#1524-blockhandler +const BlockHandler = z.object({ + handler: z + .string() + .describe( + 'The name of an exported function in the mapping script that should handle the specified event.', + ), + filter: BlockHandlerFilter.optional().describe( + 'Definition of the filter to apply. If none is supplied, the handler will be called on every block.', + ), +}); + +// https://github.com/graphprotocol/graph-node/blob/master/docs/subgraph-manifest.md#1521-ethereum-mapping +const EthereumMapping = z.object({ + kind: z + .literal('ethereum/events') + .describe('Must be "ethereum/events" for Ethereum Events Mapping.'), + apiVersion: z + .string() + .describe( + 'Semver string of the version of the Mappings API that will be used by the mapping script.', + ), + language: z + .literal('wasm/assemblyscript') + .describe('The language of the runtime for the Mapping API.'), + entities: z + .array(z.string()) + .describe( + 'A list of entities that will be ingested as part of this mapping. Must correspond to names of entities in the GraphQL IDL.', + ), + eventHandlers: z + .array(EventHandler) + .optional() + .describe('Handlers for specific events, which will be defined in the mapping script.'), + callHandlers: z + .array(CallHandler) + .optional() + .describe( + 'A list of functions that will trigger a handler and the name of the corresponding handlers in the mapping.', + ), + blockHandlers: z + .array(BlockHandler) + .optional() + .describe('Defines block filters and handlers to process matching blocks.'), + file: z.string().describe('The path of the mapping script.'), + abis: z + .array( + z.object({ + name: z.string(), + file: z.string(), + }), + ) + .describe( + 'ABIs for the contract classes that should be generated in the Mapping ABI. Name is also used to reference the ABI elsewhere in the manifest.', + ), +}); + +// https://github.com/graphprotocol/graph-node/blob/master/docs/subgraph-manifest.md#15-data-source +const EthereumDataSource = z.object({ + kind: z + .enum([ + // https://github.com/graphprotocol/graph-node/blob/79703bad55dd905cef1aa38ba9fae6ab389746e2/chain/arweave/src/data_source.rs#L21-L22 + 'arweave', + // https://github.com/graphprotocol/graph-node/blob/79703bad55dd905cef1aa38ba9fae6ab389746e2/chain/cosmos/src/data_source.rs#L20-L21 + 'cosmos', + // https://github.com/graphprotocol/graph-node/blob/79703bad55dd905cef1aa38ba9fae6ab389746e2/chain/ethereum/src/data_source.rs#L38-L39 + 'ethereum/contract', // for backwards compatibility + 'ethereum', // preferred + // https://github.com/graphprotocol/graph-node/blob/79703bad55dd905cef1aa38ba9fae6ab389746e2/chain/near/src/data_source.rs#L21-L22 + 'near', + ]) + .describe('The type of data source'), + name: z + .string() + .describe( + 'The name of the source data. Will be used to generate APIs in the mapping and also for self-documentation purposes.', + ), + network: z + .string() + .describe('For blockchains, this describes which network the subgraph targets'), + source: EthereumContractSource.describe('The source data on a blockchain such as Ethereum.'), + mapping: EthereumMapping.describe('The mapping that defines how to ingest the data.'), +}); + +const SubstreamMapping = z.object({ + kind: z + .literal('substreams/graph-entities') + .describe('Must be "ethereum/events" for Ethereum Events Mapping.'), + apiVersion: z + .string() + .describe( + 'Semver string of the version of the Mappings API that will be used by the mapping script.', + ), +}); + +const SubstreamDataSource = z.object({ + kind: z + .enum([ + // https://github.com/graphprotocol/graph-node/blob/79703bad55dd905cef1aa38ba9fae6ab389746e2/chain/substreams/src/data_source.rs#L17 + 'substreams', + ]) + .describe('The type of data source'), + name: z + .string() + .describe( + 'The name of the source data. Will be used to generate APIs in the mapping and also for self-documentation purposes.', + ), + network: z + .string() + .describe('For blockchains, this describes which network the subgraph targets'), + source: SubstreamSource.describe('The source data on a blockchain such as Ethereum.'), + mapping: SubstreamMapping.describe('The mapping that defines how to ingest the data.'), +}); + +const DataSource = z.union([EthereumDataSource, SubstreamDataSource]); + +// https://github.com/graphprotocol/graph-node/blob/master/docs/subgraph-manifest.md#17-data-source-templates +const TemplateSource = z.object({ + kind: z.string().describe('The type of data source. Possible values: ethereum/contract.'), + name: z + .string() + .describe( + 'The name of the source data. Will be used to generate APIs in the mapping and also for self-documentation purposes.', + ), + mapping: EthereumMapping.describe('The mapping that defines how to ingest the data.'), +}); + +// https://github.com/graphprotocol/graph-node/blob/master/docs/subgraph-manifest.md#18-graft-base +const GraftBase = z.object({ + base: z.string().describe('The subgraph ID of the base subgraph'), + block: z.bigint().describe('The block number up to which to use data from the base subgraph'), +}); + +// https://github.com/graphprotocol/graph-node/blob/master/docs/subgraph-manifest.md#13-top-level-api +const Manifest = z.object({ + specVersion: z + .string() + .describe('A Semver version indicating which version of this API is being used.'), + schema: Schema.describe('The GraphQL schema of this subgraph.'), + description: z.string().describe("An optional description of the subgraph's purpose.").optional(), + repository: z.string().describe('An optional link to where the subgraph lives.').optional(), + graft: GraftBase.describe('An optional base to graft onto.').optional(), + dataSources: z + .array(DataSource) + .describe( + "Each data source spec defines the data that will be ingested as well as the transformation logic to derive the state of the subgraph's entities based on the source data.", + ), + templates: z + .array(TemplateSource) + .optional() + .describe( + 'Each data source template defines a data source that can be created dynamically from the mappings.', + ), +}); + +export type Manifest = z.infer; + +/** + * Provide a JSON object and get a typesafe Manifest object. + */ +export function parseManifest(manifest: unknown): Manifest { + return Manifest.parse(manifest); +} diff --git a/packages/core/stubs/block-handler.yaml b/packages/core/stubs/block-handler.yaml new file mode 100644 index 000000000..8b5e2698f --- /dev/null +++ b/packages/core/stubs/block-handler.yaml @@ -0,0 +1,22 @@ +specVersion: 0.0.7 +schema: + file: ./schema.graphql +dataSources: + - kind: ethereum/contract + name: Contract + network: test + source: + address: '0x0000000000000000000000000000000000000000' + abi: Contract + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + entities: + - Gravatar + abis: + - name: Contract + file: ./abis/Contract.json + blockHandlers: + - handler: handleBlock + file: ./src/mapping.ts diff --git a/packages/core/stubs/call-handler.yaml b/packages/core/stubs/call-handler.yaml new file mode 100644 index 000000000..1b356d12d --- /dev/null +++ b/packages/core/stubs/call-handler.yaml @@ -0,0 +1,22 @@ +specVersion: 0.0.7 +schema: + file: ./schema.graphql +dataSources: + - kind: ethereum/contract + name: Contract + network: test + source: + address: '0x0000000000000000000000000000000000000000' + abi: Contract + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + entities: + - Gravatar + abis: + - name: Contract + file: ./abis/Contract.json + callHandlers: + - handler: handleBlock + file: ./src/mapping.ts diff --git a/packages/core/stubs/substream-subgraph-with-params.yaml b/packages/core/stubs/substream-subgraph-with-params.yaml new file mode 100644 index 000000000..876b80b71 --- /dev/null +++ b/packages/core/stubs/substream-subgraph-with-params.yaml @@ -0,0 +1,20 @@ +specVersion: 0.0.4 +description: Ethereum Contract Tracking Subgraph (powered by Substreams) +repository: https://github.com/graphprotocol/graph-tooling +schema: + file: schema.graphql +dataSources: + - kind: substreams + name: substream_test + network: mainnet + source: + package: + moduleName: graph_out + file: substreams-test-v1.0.1.spkg + params: + - a + - b + - 123 + mapping: + kind: substreams/graph-entities + apiVersion: 0.0.5 diff --git a/packages/core/stubs/substream-subgraph.yaml b/packages/core/stubs/substream-subgraph.yaml new file mode 100644 index 000000000..f8f061f5b --- /dev/null +++ b/packages/core/stubs/substream-subgraph.yaml @@ -0,0 +1,16 @@ +specVersion: 0.0.4 +description: Ethereum Contract Tracking Subgraph (powered by Substreams) +repository: https://github.com/graphprotocol/graph-tooling +schema: + file: schema.graphql +dataSources: + - kind: substreams + name: substream_test + network: mainnet + source: + package: + moduleName: graph_out + file: substreams-test-v1.0.1.spkg + mapping: + kind: substreams/graph-entities + apiVersion: 0.0.5 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 896ea418b..df0642b28 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,7 +48,7 @@ importers: dependencies: '@graphprotocol/graph-cli': specifier: 0.71.2 - version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.4.5) + version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.4.5) '@graphprotocol/graph-ts': specifier: ^0.32.0 version: 0.32.0 @@ -61,7 +61,7 @@ importers: devDependencies: '@graphprotocol/graph-cli': specifier: 0.71.2 - version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.4.5) + version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.4.5) '@graphprotocol/graph-ts': specifier: 0.35.1 version: 0.35.1 @@ -77,7 +77,7 @@ importers: devDependencies: '@graphprotocol/graph-cli': specifier: 0.71.2 - version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.4.5) + version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.4.5) '@graphprotocol/graph-ts': specifier: 0.35.1 version: 0.35.1 @@ -96,7 +96,7 @@ importers: devDependencies: '@graphprotocol/graph-cli': specifier: 0.71.2 - version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.4.5) + version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.4.5) '@graphprotocol/graph-ts': specifier: 0.35.1 version: 0.35.1 @@ -115,7 +115,7 @@ importers: devDependencies: '@graphprotocol/graph-cli': specifier: 0.71.2 - version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.4.5) + version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.4.5) '@graphprotocol/graph-ts': specifier: 0.35.1 version: 0.35.1 @@ -134,7 +134,7 @@ importers: devDependencies: '@graphprotocol/graph-cli': specifier: 0.71.2 - version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.4.5) + version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.4.5) '@graphprotocol/graph-ts': specifier: 0.35.1 version: 0.35.1 @@ -189,7 +189,7 @@ importers: devDependencies: '@graphprotocol/graph-cli': specifier: 0.71.2 - version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.0.4) + version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.0.4) '@graphprotocol/graph-ts': specifier: 0.35.1 version: 0.35.1 @@ -207,7 +207,7 @@ importers: devDependencies: '@graphprotocol/graph-cli': specifier: 0.71.2 - version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.4.5) + version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.4.5) '@graphprotocol/graph-ts': specifier: 0.35.1 version: 0.35.1 @@ -228,7 +228,7 @@ importers: dependencies: '@graphprotocol/graph-cli': specifier: 0.71.2 - version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.4.5) + version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.4.5) '@graphprotocol/graph-ts': specifier: 0.35.1 version: 0.35.1 @@ -241,7 +241,7 @@ importers: devDependencies: '@graphprotocol/graph-cli': specifier: 0.71.2 - version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.4.5) + version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.4.5) '@graphprotocol/graph-ts': specifier: 0.35.1 version: 0.35.1 @@ -250,7 +250,7 @@ importers: devDependencies: '@graphprotocol/graph-cli': specifier: 0.71.2 - version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.4.5) + version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.4.5) '@graphprotocol/graph-ts': specifier: 0.35.1 version: 0.35.1 @@ -259,13 +259,16 @@ importers: devDependencies: '@graphprotocol/graph-cli': specifier: 0.71.2 - version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.4.5) + version: 0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.4.5) packages/cli: dependencies: '@float-capital/float-subgraph-uncrashable': specifier: ^0.0.0-alpha.4 version: 0.0.0-alpha.6 + '@graphprotocol/graph-cli-core': + specifier: workspace:* + version: link:../core '@oclif/core': specifier: 2.8.6 version: 2.8.6(@types/node@20.12.11)(typescript@5.0.2) @@ -385,6 +388,25 @@ importers: specifier: ^1.0.2 version: 1.0.2(@types/node@20.12.11)(terser@5.31.0) + packages/core: + dependencies: + js-yaml: + specifier: 3.14.1 + version: 3.14.1 + zod: + specifier: ^3.23.8 + version: 3.23.8 + devDependencies: + '@types/js-yaml': + specifier: ^3.12.7 + version: 3.12.10 + prettier: + specifier: 3.0.3 + version: 3.0.3 + vitest: + specifier: ^1.0.2 + version: 1.0.2(@types/node@20.12.11)(terser@5.31.0) + packages/ts: dependencies: assemblyscript: @@ -422,7 +444,7 @@ importers: version: 5.37.1(react@18.3.1) '@tanstack/react-router': specifier: ^1.40.0 - version: 1.40.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.43.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) base-x: specifier: ^4.0.0 version: 4.0.0 @@ -440,7 +462,7 @@ importers: version: 18.7.0 gql.tada: specifier: ^1.7.6 - version: 1.7.6(graphql@15.5.0)(svelte@4.2.18)(typescript@5.4.5) + version: 1.8.1(graphql@15.5.0)(svelte@4.2.18)(typescript@5.4.5) graphql: specifier: 15.5.0 version: 15.5.0 @@ -486,10 +508,10 @@ importers: devDependencies: '@0no-co/graphqlsp': specifier: ^1.12.8 - version: 1.12.8(graphql@15.5.0)(typescript@5.4.5) + version: 1.12.11(graphql@15.5.0)(typescript@5.4.5) '@tanstack/router-cli': specifier: ^1.37.0 - version: 1.37.0 + version: 1.43.12 '@tanstack/router-vite-plugin': specifier: ^1.32.17 version: 1.32.17(vite@5.2.11(@types/node@20.12.11)(terser@5.31.0)) @@ -552,8 +574,8 @@ packages: graphql: optional: true - '@0no-co/graphqlsp@1.12.8': - resolution: {integrity: sha512-arW3ZzifyKIJhehoAlsP069AX73EN6q358bOCf+8z00PmfPR2DSxq7uGGSj0oFNe3vEDtGYl88HmFEWQ+0+dwQ==} + '@0no-co/graphqlsp@1.12.11': + resolution: {integrity: sha512-vLja9r7L6BBXwxW86Wyi5z5hjTHscH7qoQooy+MXHkM9srBB6ZuesYZq5DQ/+SErQrFyaxeY+hwv2qBAksxriw==} peerDependencies: graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 typescript: ^5.0.0 @@ -1833,14 +1855,15 @@ packages: '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} - '@gql.tada/cli-utils@1.3.10': - resolution: {integrity: sha512-wmKW/4UuDR9rkgpXnzP2skftNO4Kc/LNkFImKXe0waus+ipvJLaV3dwQ1CghKQ1THzWl2KLp/yJ80BdFWA+HzA==} + '@gql.tada/cli-utils@1.5.0': + resolution: {integrity: sha512-BqbrcpKmE2FyM3tQgK3vzTIn1ghCOf+lH9MThPow7NbtS9K2+bH4u/1fPAhZMR1Zg5GExKsDvij+zLP64Ge6Ig==} peerDependencies: + '@0no-co/graphqlsp': ^1.12.9 graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 typescript: ^5.0.0 - '@gql.tada/internal@1.0.1': - resolution: {integrity: sha512-VglE9pEUqCD7YwytLehI1RiEpxJsEkO+8onrMI8DEFTcrn+Irv2tQfPUHBC0LjtY5sFgoodCSLIcnxyZOKggYA==} + '@gql.tada/internal@1.0.3': + resolution: {integrity: sha512-n52/OjAkoPsX4ZyEufFBnncjnv0UrbXKs4OUG66db8gxtV5437EkLjI4MTAI1M6dsaj+VLi0unpraPPPbFR59A==} peerDependencies: graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 typescript: ^5.0.0 @@ -3069,51 +3092,26 @@ packages: cpu: [arm] os: [android] - '@rollup/rollup-android-arm-eabi@4.6.1': - resolution: {integrity: sha512-0WQ0ouLejaUCRsL93GD4uft3rOmB8qoQMU05Kb8CmMtMBe7XUDLAltxVZI1q6byNqEtU7N1ZX1Vw5lIpgulLQA==} - cpu: [arm] - os: [android] - '@rollup/rollup-android-arm64@4.17.2': resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==} cpu: [arm64] os: [android] - '@rollup/rollup-android-arm64@4.6.1': - resolution: {integrity: sha512-1TKm25Rn20vr5aTGGZqo6E4mzPicCUD79k17EgTLAsXc1zysyi4xXKACfUbwyANEPAEIxkzwue6JZ+stYzWUTA==} - cpu: [arm64] - os: [android] - '@rollup/rollup-darwin-arm64@4.17.2': resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-arm64@4.6.1': - resolution: {integrity: sha512-cEXJQY/ZqMACb+nxzDeX9IPLAg7S94xouJJCNVE5BJM8JUEP4HeTF+ti3cmxWeSJo+5D+o8Tc0UAWUkfENdeyw==} - cpu: [arm64] - os: [darwin] - '@rollup/rollup-darwin-x64@4.17.2': resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-darwin-x64@4.6.1': - resolution: {integrity: sha512-LoSU9Xu56isrkV2jLldcKspJ7sSXmZWkAxg7sW/RfF7GS4F5/v4EiqKSMCFbZtDu2Nc1gxxFdQdKwkKS4rwxNg==} - cpu: [x64] - os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.17.2': resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.6.1': - resolution: {integrity: sha512-EfI3hzYAy5vFNDqpXsNxXcgRDcFHUWSx5nnRSCKwXuQlI5J9dD84g2Usw81n3FLBNsGCegKGwwTVsSKK9cooSQ==} - cpu: [arm] - os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.17.2': resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==} cpu: [arm] @@ -3124,21 +3122,11 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.6.1': - resolution: {integrity: sha512-9lhc4UZstsegbNLhH0Zu6TqvDfmhGzuCWtcTFXY10VjLLUe4Mr0Ye2L3rrtHaDd/J5+tFMEuo5LTCSCMXWfUKw==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-arm64-musl@4.17.2': resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.6.1': - resolution: {integrity: sha512-FfoOK1yP5ksX3wwZ4Zk1NgyGHZyuRhf99j64I5oEmirV8EFT7+OhUZEnP+x17lcP/QHJNWGsoJwrz4PJ9fBEXw==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==} cpu: [ppc64] @@ -3159,51 +3147,26 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.6.1': - resolution: {integrity: sha512-DNGZvZDO5YF7jN5fX8ZqmGLjZEXIJRdJEdTFMhiyXqyXubBa0WVLDWSNlQ5JR2PNgDbEV1VQowhVRUh+74D+RA==} - cpu: [x64] - os: [linux] - '@rollup/rollup-linux-x64-musl@4.17.2': resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.6.1': - resolution: {integrity: sha512-RkJVNVRM+piYy87HrKmhbexCHg3A6Z6MU0W9GHnJwBQNBeyhCJG9KDce4SAMdicQnpURggSvtbGo9xAWOfSvIQ==} - cpu: [x64] - os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.17.2': resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.6.1': - resolution: {integrity: sha512-v2FVT6xfnnmTe3W9bJXl6r5KwJglMK/iRlkKiIFfO6ysKs0rDgz7Cwwf3tjldxQUrHL9INT/1r4VA0n9L/F1vQ==} - cpu: [arm64] - os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.17.2': resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.6.1': - resolution: {integrity: sha512-YEeOjxRyEjqcWphH9dyLbzgkF8wZSKAKUkldRY6dgNR5oKs2LZazqGB41cWJ4Iqqcy9/zqYgmzBkRoVz3Q9MLw==} - cpu: [ia32] - os: [win32] - '@rollup/rollup-win32-x64-msvc@4.17.2': resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.6.1': - resolution: {integrity: sha512-0zfTlFAIhgz8V2G8STq8toAjsYYA6eci1hnXuyOTUFnymrtJwnS6uGKiv3v5UrPZkBlamLvrLV2iiaeqCKzb0A==} - cpu: [x64] - os: [win32] - '@rushstack/eslint-patch@1.3.3': resolution: {integrity: sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==} @@ -3355,8 +3318,8 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} - '@tanstack/history@1.40.0': - resolution: {integrity: sha512-0sfmfxiG4B5O2dB0S/BQbyY5F2rnNDJhd2/5wtMThAy9+D2WAWSKzMNMH1ycO0d8hZvZfp8/c1Pr9ZX/lJROKw==} + '@tanstack/history@1.43.12': + resolution: {integrity: sha512-Ngj9SVzz368VVV6Iiwye9hq9MheBAW22w05LG72M0Dhb4CpIWwvra56IF8PsDfFZw0KiX32d1MPxdN57no/hXQ==} engines: {node: '>=12'} '@tanstack/query-core@5.36.1': @@ -3367,12 +3330,12 @@ packages: peerDependencies: react: ^18.0.0 - '@tanstack/react-router@1.40.0': - resolution: {integrity: sha512-6OxHndj9gSpgoDya88V1Tom6QBpT9qkD8nACrybRPKEYxyA0b2Dgs7nIhCJm1hpbcGFja8G70RWIzNjHjWf+Pg==} + '@tanstack/react-router@1.43.12': + resolution: {integrity: sha512-79FW0imVBY9GsTdZNpIKJTtRnF3RbGCTzJQfhKff5FnSk2xK6rVgPUsMGrMY5j/LhJnW6HanN1JAYcCJo8UOjw==} engines: {node: '>=12'} peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' + react: '>=18' + react-dom: '>=18' '@tanstack/react-store@0.2.1': resolution: {integrity: sha512-tEbMCQjbeVw9KOP/202LfqZMSNAVi6zYkkp1kBom8nFuMx/965Hzes3+6G6b/comCwVxoJU8Gg9IrcF8yRPthw==} @@ -3380,8 +3343,8 @@ packages: react: '>=16' react-dom: '>=16' - '@tanstack/router-cli@1.37.0': - resolution: {integrity: sha512-JlhgNLUr5AffHuoAJXSG6wi12lNFXyuQ+0nG9Vw8WfQfqPoWEDIzg1BwXVTMr1g+G6TksXGoAE5WEoZXKP4BCg==} + '@tanstack/router-cli@1.43.12': + resolution: {integrity: sha512-33ViEAdVJIecvsoUQgd467miIar6b9PEo3viOuUI0f0BF1C/9wyzNlopWXvxsiY6HHTkCRTm3Omkg9/fMrqKlw==} engines: {node: '>=12'} hasBin: true @@ -3389,8 +3352,8 @@ packages: resolution: {integrity: sha512-WYGYnbZxJRM5JvP1VyQCA7IQneUPx9clviRIy8NbpKytxKK5eln5pvzBfPmwCKfV+s4pEGD8SDZ8JxcuP+bnfA==} engines: {node: '>=12'} - '@tanstack/router-generator@1.37.0': - resolution: {integrity: sha512-sI1B1Zd1SjeY1Uc6Tehi4BfBEl+e5mR7c4COWYRkZRIC3P4870Q54t+7aMGDY/lw4Yd9J2vUcxZ7F4qiTgo62w==} + '@tanstack/router-generator@1.43.12': + resolution: {integrity: sha512-vlEuh/tYwP20Tg1mi5QSezgbImxo+AswPDhrc1m9LH5EnnGg6xlLLUuPycNcK3zhPU1jnNq2y6IfT9YNuS1tMw==} engines: {node: '>=12'} '@tanstack/router-vite-plugin@1.32.17': @@ -3840,28 +3803,28 @@ packages: '@vitest/utils@1.0.2': resolution: {integrity: sha512-GPQkGHAnFAP/+seSbB9pCsj339yRrMgILoI5H2sPevTLCYgBq0VRjF8QSllmnQyvf0EontF6KUIt2t5s2SmqoQ==} - '@volar/language-core@2.3.4': - resolution: {integrity: sha512-wXBhY11qG6pCDAqDnbBRFIDSIwbqkWI7no+lj5+L7IlA7HRIjRP7YQLGzT0LF4lS6eHkMSsclXqy9DwYJasZTQ==} + '@volar/language-core@2.4.0-alpha.15': + resolution: {integrity: sha512-mt8z4Fm2WxfQYoQHPcKVjLQV6PgPqyKLbkCVY2cr5RSaamqCHjhKEpsFX66aL4D/7oYguuaUw9Bx03Vt0TpIIA==} - '@volar/source-map@2.3.4': - resolution: {integrity: sha512-C+t63nwcblqLIVTYXaVi/+gC8NukDaDIQI72J3R7aXGvtgaVB16c+J8Iz7/VfOy7kjYv7lf5GhBny6ACw9fTGQ==} + '@volar/source-map@2.4.0-alpha.15': + resolution: {integrity: sha512-8Htngw5TmBY4L3ClDqBGyfLhsB8EmoEXUH1xydyEtEoK0O6NX5ur4Jw8jgvscTlwzizyl/wsN1vn0cQXVbbXYg==} - '@vue/compiler-core@3.4.30': - resolution: {integrity: sha512-ZL8y4Xxdh8O6PSwfdZ1IpQ24PjTAieOz3jXb/MDTfDtANcKBMxg1KLm6OX2jofsaQGYfIVzd3BAG22i56/cF1w==} + '@vue/compiler-core@3.4.31': + resolution: {integrity: sha512-skOiodXWTV3DxfDhB4rOf3OGalpITLlgCeOwb+Y9GJpfQ8ErigdBUHomBzvG78JoVE8MJoQsb+qhZiHfKeNeEg==} - '@vue/compiler-dom@3.4.30': - resolution: {integrity: sha512-+16Sd8lYr5j/owCbr9dowcNfrHd+pz+w2/b5Lt26Oz/kB90C9yNbxQ3bYOvt7rI2bxk0nqda39hVcwDFw85c2Q==} + '@vue/compiler-dom@3.4.31': + resolution: {integrity: sha512-wK424WMXsG1IGMyDGyLqB+TbmEBFM78hIsOJ9QwUVLGrcSk0ak6zYty7Pj8ftm7nEtdU/DGQxAXp0/lM/2cEpQ==} - '@vue/language-core@2.0.22': - resolution: {integrity: sha512-dNTAAtEOuMiz7N1s5tKpypnVVCtawxVSF5BukD0ELcYSw+DSbrSlYYSw8GuwvurodCeYFSHsmslE+c2sYDNoiA==} + '@vue/language-core@2.0.26': + resolution: {integrity: sha512-/lt6SfQ3O1yDAhPsnLv9iSUgXd1dMHqUm/t3RctfqjuwQf1LnftZ414X3UBn6aXT4MiwXWtbNJ4Z0NZWwDWgJQ==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true - '@vue/shared@3.4.30': - resolution: {integrity: sha512-CLg+f8RQCHQnKvuHY9adMsMaQOcqclh6Z5V9TaoMgy0ut0tz848joZ7/CYFFyF/yZ5i2yaw7Fn498C+CNZVHIg==} + '@vue/shared@3.4.31': + resolution: {integrity: sha512-Yp3wtJk//8cO4NItOPpi3QkLExAr/aLBGZMmTtW9WpdwBCJpRM6zj9WgWktXAl8IDIozwNMByT45JP3tO3ACWA==} '@wagmi/connectors@5.0.2': resolution: {integrity: sha512-2YgcgVn6S8kuOe/PVweK0ucxNqO651VqlPWD+MrPxEVwcpEPLNKvtrYdLRDTSnwwUEqEzgnDwEAhcrniK76+Kw==} @@ -4057,11 +4020,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} @@ -6523,8 +6481,8 @@ packages: resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} engines: {node: '>=10.19.0'} - gql.tada@1.7.6: - resolution: {integrity: sha512-wuFq2qmWFFQETV1qz2rWqIJ65qlLxxpiuMEDOB7zqmWnKGHYQ2k/bttyDGOKwroK2cgPZ8TGhzzaUQj9MZmwxw==} + gql.tada@1.8.1: + resolution: {integrity: sha512-SKiWid+21JP1rCqXsWJr+A+fPcEUY2kz4XcQ6marzbMaFyXaf8LSLdYQPaZAFfqQ6tP2ZabG6Al7RFYByAsZwg==} hasBin: true peerDependencies: typescript: ^5.0.0 @@ -8170,9 +8128,6 @@ packages: engines: {node: '>=10'} hasBin: true - mlly@1.4.2: - resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} - mlly@1.7.0: resolution: {integrity: sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ==} @@ -9599,11 +9554,6 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rollup@4.6.1: - resolution: {integrity: sha512-jZHaZotEHQaHLgKr8JnQiDT1rmatjgKlMekyksz+yk9jt/8z9quNjnKNRoaM0wd9DC2QKXjmWWuDYtM3jfF8pQ==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} @@ -10174,8 +10124,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svelte2tsx@0.7.11: - resolution: {integrity: sha512-5EIbDaIvOchM2bGXbXqNJcbN6Z0JXGHnIJr8drgpbMefAgKf3nsHxtYIMu3BKKiSzMwSZreQexq0g66uYFH+JQ==} + svelte2tsx@0.7.13: + resolution: {integrity: sha512-aObZ93/kGAiLXA/I/kP+x9FriZM+GboB/ReOIGmLNbVGEd2xC+aTCppm3mk1cc9I/z60VQf7b2QDxC3jOXu3yw==} peerDependencies: svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 typescript: ^4.9.4 || ^5.0.0 @@ -10566,9 +10516,6 @@ packages: resolution: {integrity: sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==} engines: {node: '>=8'} - ufo@1.3.2: - resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} - ufo@1.5.3: resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} @@ -11411,9 +11358,9 @@ snapshots: optionalDependencies: graphql: 15.5.0 - '@0no-co/graphqlsp@1.12.8(graphql@15.5.0)(typescript@5.4.5)': + '@0no-co/graphqlsp@1.12.11(graphql@15.5.0)(typescript@5.4.5)': dependencies: - '@gql.tada/internal': 1.0.1(graphql@15.5.0)(typescript@5.4.5) + '@gql.tada/internal': 1.0.3(graphql@15.5.0)(typescript@5.4.5) graphql: 15.5.0 typescript: 5.4.5 @@ -12998,25 +12945,25 @@ snapshots: '@gar/promisify@1.1.3': {} - '@gql.tada/cli-utils@1.3.10(graphql@15.5.0)(svelte@4.2.18)(typescript@5.4.5)': + '@gql.tada/cli-utils@1.5.0(@0no-co/graphqlsp@1.12.11(graphql@15.5.0)(typescript@5.4.5))(graphql@15.5.0)(svelte@4.2.18)(typescript@5.4.5)': dependencies: - '@0no-co/graphqlsp': 1.12.8(graphql@15.5.0)(typescript@5.4.5) - '@gql.tada/internal': 1.0.1(graphql@15.5.0)(typescript@5.4.5) - '@vue/compiler-dom': 3.4.30 - '@vue/language-core': 2.0.22(typescript@5.4.5) + '@0no-co/graphqlsp': 1.12.11(graphql@15.5.0)(typescript@5.4.5) + '@gql.tada/internal': 1.0.3(graphql@15.5.0)(typescript@5.4.5) + '@vue/compiler-dom': 3.4.31 + '@vue/language-core': 2.0.26(typescript@5.4.5) graphql: 15.5.0 - svelte2tsx: 0.7.11(svelte@4.2.18)(typescript@5.4.5) + svelte2tsx: 0.7.13(svelte@4.2.18)(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - svelte - '@gql.tada/internal@1.0.1(graphql@15.5.0)(typescript@5.4.5)': + '@gql.tada/internal@1.0.3(graphql@15.5.0)(typescript@5.4.5)': dependencies: '@0no-co/graphql.web': 1.0.7(graphql@15.5.0) graphql: 15.5.0 typescript: 5.4.5 - '@graphprotocol/graph-cli@0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.0.4)': + '@graphprotocol/graph-cli@0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.0.4)': dependencies: '@float-capital/float-subgraph-uncrashable': 0.0.0-internal-testing.5 '@oclif/core': 2.8.6(@types/node@20.12.11)(typescript@5.0.4) @@ -13056,7 +13003,7 @@ snapshots: - typescript - utf-8-validate - '@graphprotocol/graph-cli@0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.4.5)': + '@graphprotocol/graph-cli@0.71.2(@types/node@20.12.11)(bufferutil@4.0.8)(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.4.5)': dependencies: '@float-capital/float-subgraph-uncrashable': 0.0.0-internal-testing.5 '@oclif/core': 2.8.6(@types/node@20.12.11)(typescript@5.4.5) @@ -15057,48 +15004,27 @@ snapshots: '@rollup/rollup-android-arm-eabi@4.17.2': optional: true - '@rollup/rollup-android-arm-eabi@4.6.1': - optional: true - '@rollup/rollup-android-arm64@4.17.2': optional: true - '@rollup/rollup-android-arm64@4.6.1': - optional: true - '@rollup/rollup-darwin-arm64@4.17.2': optional: true - '@rollup/rollup-darwin-arm64@4.6.1': - optional: true - '@rollup/rollup-darwin-x64@4.17.2': optional: true - '@rollup/rollup-darwin-x64@4.6.1': - optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.17.2': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.6.1': - optional: true - '@rollup/rollup-linux-arm-musleabihf@4.17.2': optional: true '@rollup/rollup-linux-arm64-gnu@4.17.2': optional: true - '@rollup/rollup-linux-arm64-gnu@4.6.1': - optional: true - '@rollup/rollup-linux-arm64-musl@4.17.2': optional: true - '@rollup/rollup-linux-arm64-musl@4.6.1': - optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': optional: true @@ -15111,33 +15037,18 @@ snapshots: '@rollup/rollup-linux-x64-gnu@4.17.2': optional: true - '@rollup/rollup-linux-x64-gnu@4.6.1': - optional: true - '@rollup/rollup-linux-x64-musl@4.17.2': optional: true - '@rollup/rollup-linux-x64-musl@4.6.1': - optional: true - '@rollup/rollup-win32-arm64-msvc@4.17.2': optional: true - '@rollup/rollup-win32-arm64-msvc@4.6.1': - optional: true - '@rollup/rollup-win32-ia32-msvc@4.17.2': optional: true - '@rollup/rollup-win32-ia32-msvc@4.6.1': - optional: true - '@rollup/rollup-win32-x64-msvc@4.17.2': optional: true - '@rollup/rollup-win32-x64-msvc@4.6.1': - optional: true - '@rushstack/eslint-patch@1.3.3': {} '@safe-global/safe-apps-provider@0.18.1(bufferutil@4.0.8)(typescript@5.4.5)(zod@3.23.8)': @@ -15358,7 +15269,7 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tanstack/history@1.40.0': {} + '@tanstack/history@1.43.12': {} '@tanstack/query-core@5.36.1': {} @@ -15367,9 +15278,9 @@ snapshots: '@tanstack/query-core': 5.36.1 react: 18.3.1 - '@tanstack/react-router@1.40.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-router@1.43.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/history': 1.40.0 + '@tanstack/history': 1.43.12 '@tanstack/react-store': 0.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -15383,9 +15294,9 @@ snapshots: react-dom: 18.3.1(react@18.3.1) use-sync-external-store: 1.2.2(react@18.3.1) - '@tanstack/router-cli@1.37.0': + '@tanstack/router-cli@1.43.12': dependencies: - '@tanstack/router-generator': 1.37.0 + '@tanstack/router-generator': 1.43.12 chokidar: 3.5.3 yargs: 17.6.2 @@ -15394,7 +15305,7 @@ snapshots: prettier: 3.2.5 zod: 3.23.8 - '@tanstack/router-generator@1.37.0': + '@tanstack/router-generator@1.43.12': dependencies: prettier: 3.2.5 zod: 3.23.8 @@ -15559,7 +15470,7 @@ snapshots: '@types/chai-as-promised@7.1.5': dependencies: - '@types/chai': 4.3.4 + '@types/chai': 4.3.14 '@types/chai@4.3.14': {} @@ -15936,18 +15847,18 @@ snapshots: dependencies: '@vitest/spy': 1.0.2 '@vitest/utils': 1.0.2 - chai: 4.3.10 + chai: 4.4.1 '@vitest/runner@1.0.2': dependencies: '@vitest/utils': 1.0.2 p-limit: 5.0.0 - pathe: 1.1.1 + pathe: 1.1.2 '@vitest/snapshot@1.0.2': dependencies: magic-string: 0.30.5 - pathe: 1.1.1 + pathe: 1.1.2 pretty-format: 29.7.0 '@vitest/spy@1.0.2': @@ -15960,30 +15871,30 @@ snapshots: loupe: 2.3.7 pretty-format: 29.7.0 - '@volar/language-core@2.3.4': + '@volar/language-core@2.4.0-alpha.15': dependencies: - '@volar/source-map': 2.3.4 + '@volar/source-map': 2.4.0-alpha.15 - '@volar/source-map@2.3.4': {} + '@volar/source-map@2.4.0-alpha.15': {} - '@vue/compiler-core@3.4.30': + '@vue/compiler-core@3.4.31': dependencies: '@babel/parser': 7.24.7 - '@vue/shared': 3.4.30 + '@vue/shared': 3.4.31 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.0 - '@vue/compiler-dom@3.4.30': + '@vue/compiler-dom@3.4.31': dependencies: - '@vue/compiler-core': 3.4.30 - '@vue/shared': 3.4.30 + '@vue/compiler-core': 3.4.31 + '@vue/shared': 3.4.31 - '@vue/language-core@2.0.22(typescript@5.4.5)': + '@vue/language-core@2.0.26(typescript@5.4.5)': dependencies: - '@volar/language-core': 2.3.4 - '@vue/compiler-dom': 3.4.30 - '@vue/shared': 3.4.30 + '@volar/language-core': 2.4.0-alpha.15 + '@vue/compiler-dom': 3.4.31 + '@vue/shared': 3.4.31 computeds: 0.0.1 minimatch: 9.0.4 muggle-string: 0.4.1 @@ -15992,7 +15903,7 @@ snapshots: optionalDependencies: typescript: 5.4.5 - '@vue/shared@3.4.30': {} + '@vue/shared@3.4.31': {} '@wagmi/connectors@5.0.2(@types/react@18.3.2)(@wagmi/core@2.10.2(@tanstack/query-core@5.36.1)(@types/react@18.3.2)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(viem@2.11.0(bufferutil@4.0.8)(typescript@5.4.5)(zod@3.23.8))(zod@3.23.8))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.5)(@babel/preset-env@7.24.5(@babel/core@7.24.5))(@types/react@18.3.2)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1))(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.5)(@babel/preset-env@7.24.5(@babel/core@7.24.5))(@types/react@18.3.2)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1))(react@18.3.1)(rollup@4.17.2)(typescript@5.4.5)(viem@2.11.0(bufferutil@4.0.8)(typescript@5.4.5)(zod@3.23.8))(zod@3.23.8)': dependencies: @@ -16456,8 +16367,6 @@ snapshots: acorn@6.4.2: {} - acorn@8.10.0: {} - acorn@8.11.3: {} address@1.2.2: {} @@ -17356,7 +17265,7 @@ snapshots: check-error: 1.0.3 deep-eql: 4.1.3 get-func-name: 2.0.2 - loupe: 2.3.6 + loupe: 2.3.7 pathval: 1.1.1 type-detect: 4.0.8 @@ -17941,7 +17850,7 @@ snapshots: debug@3.2.6(supports-color@6.0.0): dependencies: - ms: 2.1.1 + ms: 2.1.3 optionalDependencies: supports-color: 6.0.0 @@ -19647,11 +19556,12 @@ snapshots: p-cancelable: 2.1.1 responselike: 2.0.1 - gql.tada@1.7.6(graphql@15.5.0)(svelte@4.2.18)(typescript@5.4.5): + gql.tada@1.8.1(graphql@15.5.0)(svelte@4.2.18)(typescript@5.4.5): dependencies: '@0no-co/graphql.web': 1.0.7(graphql@15.5.0) - '@gql.tada/cli-utils': 1.3.10(graphql@15.5.0)(svelte@4.2.18)(typescript@5.4.5) - '@gql.tada/internal': 1.0.1(graphql@15.5.0)(typescript@5.4.5) + '@0no-co/graphqlsp': 1.12.11(graphql@15.5.0)(typescript@5.4.5) + '@gql.tada/cli-utils': 1.5.0(@0no-co/graphqlsp@1.12.11(graphql@15.5.0)(typescript@5.4.5))(graphql@15.5.0)(svelte@4.2.18)(typescript@5.4.5) + '@gql.tada/internal': 1.0.3(graphql@15.5.0)(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - graphql @@ -20967,7 +20877,7 @@ snapshots: local-pkg@0.5.0: dependencies: - mlly: 1.4.2 + mlly: 1.7.0 pkg-types: 1.0.3 locate-character@3.0.0: {} @@ -21847,13 +21757,6 @@ snapshots: mkdirp@1.0.4: {} - mlly@1.4.2: - dependencies: - acorn: 8.11.3 - pathe: 1.1.1 - pkg-types: 1.0.3 - ufo: 1.3.2 - mlly@1.7.0: dependencies: acorn: 8.11.3 @@ -22756,8 +22659,8 @@ snapshots: pkg-types@1.0.3: dependencies: jsonc-parser: 3.2.0 - mlly: 1.4.2 - pathe: 1.1.1 + mlly: 1.7.0 + pathe: 1.1.2 pkg-types@1.1.1: dependencies: @@ -23541,22 +23444,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.17.2 fsevents: 2.3.3 - rollup@4.6.1: - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.6.1 - '@rollup/rollup-android-arm64': 4.6.1 - '@rollup/rollup-darwin-arm64': 4.6.1 - '@rollup/rollup-darwin-x64': 4.6.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.6.1 - '@rollup/rollup-linux-arm64-gnu': 4.6.1 - '@rollup/rollup-linux-arm64-musl': 4.6.1 - '@rollup/rollup-linux-x64-gnu': 4.6.1 - '@rollup/rollup-linux-x64-musl': 4.6.1 - '@rollup/rollup-win32-arm64-msvc': 4.6.1 - '@rollup/rollup-win32-ia32-msvc': 4.6.1 - '@rollup/rollup-win32-x64-msvc': 4.6.1 - fsevents: 2.3.3 - run-async@2.4.1: {} run-parallel@1.2.0: @@ -24165,7 +24052,7 @@ snapshots: strip-literal@1.3.0: dependencies: - acorn: 8.10.0 + acorn: 8.11.3 strnum@1.0.5: {} @@ -24242,7 +24129,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte2tsx@0.7.11(svelte@4.2.18)(typescript@5.4.5): + svelte2tsx@0.7.13(svelte@4.2.18)(typescript@5.4.5): dependencies: dedent-js: 1.0.1 pascal-case: 3.1.2 @@ -24755,8 +24642,6 @@ snapshots: typical@5.2.0: {} - ufo@1.3.2: {} - ufo@1.5.3: {} uglify-js@3.17.4: @@ -24808,7 +24693,7 @@ snapshots: defu: 6.1.4 mime: 3.0.0 node-fetch-native: 1.6.4 - pathe: 1.1.1 + pathe: 1.1.2 unfetch@4.2.0: {} @@ -25159,7 +25044,7 @@ snapshots: dependencies: cac: 6.7.14 debug: 4.3.4(supports-color@5.5.0) - pathe: 1.1.1 + pathe: 1.1.2 picocolors: 1.0.0 vite: 5.2.11(@types/node@20.12.11)(terser@5.31.0) transitivePeerDependencies: @@ -25184,7 +25069,7 @@ snapshots: dependencies: esbuild: 0.19.8 postcss: 8.4.38 - rollup: 4.6.1 + rollup: 4.17.2 optionalDependencies: '@types/node': 20.12.11 fsevents: 2.3.3