diff --git a/examples/deserialize-transaction/package.json b/examples/deserialize-transaction/package.json index 18e35ae9f2e0..3ccf95206828 100644 --- a/examples/deserialize-transaction/package.json +++ b/examples/deserialize-transaction/package.json @@ -19,6 +19,6 @@ }, "devDependencies": { "start-server-and-test": "^2.0.5", - "tsx": "^4.17.0" + "tsx": "^4.18.0" } } diff --git a/examples/rpc-custom-api/package.json b/examples/rpc-custom-api/package.json index c611a3dd19da..9042766f795e 100644 --- a/examples/rpc-custom-api/package.json +++ b/examples/rpc-custom-api/package.json @@ -15,6 +15,6 @@ "@solana/web3.js": "workspace:*" }, "devDependencies": { - "tsx": "^4.17.0" + "tsx": "^4.18.0" } } diff --git a/examples/rpc-transport-throttled/package.json b/examples/rpc-transport-throttled/package.json index aeb6aa299f1b..8eff2f69573e 100644 --- a/examples/rpc-transport-throttled/package.json +++ b/examples/rpc-transport-throttled/package.json @@ -17,6 +17,6 @@ }, "devDependencies": { "start-server-and-test": "^2.0.5", - "tsx": "^4.17.0" + "tsx": "^4.18.0" } } diff --git a/examples/signers/package.json b/examples/signers/package.json index 1996a6b89d32..21218d2fbf01 100644 --- a/examples/signers/package.json +++ b/examples/signers/package.json @@ -18,6 +18,6 @@ }, "devDependencies": { "start-server-and-test": "^2.0.5", - "tsx": "^4.17.0" + "tsx": "^4.18.0" } } diff --git a/examples/transfer-lamports/package.json b/examples/transfer-lamports/package.json index 74c66cf723ee..816145ad3f6c 100644 --- a/examples/transfer-lamports/package.json +++ b/examples/transfer-lamports/package.json @@ -18,6 +18,6 @@ }, "devDependencies": { "start-server-and-test": "^2.0.5", - "tsx": "^4.17.0" + "tsx": "^4.18.0" } } diff --git a/packages/rpc-api/src/__tests__/get-stake-minimum-delegation-test.ts b/packages/rpc-api/src/__tests__/get-stake-minimum-delegation-test.ts index f41b05de1782..5d2fd27f28f8 100644 --- a/packages/rpc-api/src/__tests__/get-stake-minimum-delegation-test.ts +++ b/packages/rpc-api/src/__tests__/get-stake-minimum-delegation-test.ts @@ -11,7 +11,7 @@ describe('getStakeMinimumDelegation', () => { }); (['confirmed', 'finalized', 'processed'] as Commitment[]).forEach(commitment => { describe(`when called with \`${commitment}\` commitment`, () => { - it('returns the result as a bigint wrapped in an RpcResponse', async () => { + it('returns the result as a bigint wrapped in an RpcResponseData', async () => { expect.assertions(1); const result = await rpc.getStakeMinimumDelegation({ commitment }).send(); expect(result.value).toEqual(expect.any(BigInt)); diff --git a/packages/rpc-api/src/__tests__/is-blockhash-valid-test.ts b/packages/rpc-api/src/__tests__/is-blockhash-valid-test.ts index 90e8510b0918..a007953ebb1c 100644 --- a/packages/rpc-api/src/__tests__/is-blockhash-valid-test.ts +++ b/packages/rpc-api/src/__tests__/is-blockhash-valid-test.ts @@ -11,7 +11,7 @@ describe('isBlockhashValid', () => { }); (['confirmed', 'finalized', 'processed'] as Commitment[]).forEach(commitment => { describe(`when called with \`${commitment}\` commitment`, () => { - it('returns the result as a bool wrapped in an RpcResponse', async () => { + it('returns the result as a bool wrapped in an RpcResponseData', async () => { expect.assertions(1); const blockhash = '9PCVWkKP3bq1sT5eLFurUysMvVs4PxJsTfza5QSBB4d1' as Blockhash; const result = await rpc.isBlockhashValid(blockhash, { commitment }).send(); diff --git a/packages/rpc-spec-types/src/rpc-response.ts b/packages/rpc-spec-types/src/rpc-response.ts index 9b391507e5ef..485323271f71 100644 --- a/packages/rpc-spec-types/src/rpc-response.ts +++ b/packages/rpc-spec-types/src/rpc-response.ts @@ -2,10 +2,11 @@ interface IHasIdentifier { readonly id: number; } -type RpcErrorResponse = Readonly<{ +type RpcErrorResponsePayload = Readonly<{ code: number; data?: unknown; message: string; }>; -export type RpcResponse = IHasIdentifier & Readonly<{ error: RpcErrorResponse } | { result: TResponse }>; +export type RpcResponseData = IHasIdentifier & + Readonly<{ error: RpcErrorResponsePayload } | { result: TResponse }>; diff --git a/packages/rpc-spec/README.md b/packages/rpc-spec/README.md index 3773ed9f6c1b..77534045a2f0 100644 --- a/packages/rpc-spec/README.md +++ b/packages/rpc-spec/README.md @@ -43,13 +43,13 @@ An object that exposes all of the functions described by `TRpcMethods`, and fulf ### `RpcApi` -For each of `TRpcMethods` this object exposes a method with the same name that maps between its input arguments and a `RpcRequest` that describes how to prepare a JSON RPC request to fetch `TResponse`. +For each of `TRpcMethods` this object exposes a method with the same name that maps between its input arguments and a `PendingRpcApiRequest` that describes how to prepare a JSON RPC request to fetch `TResponse`. ### `RpcApiMethods` This is a marker interface that all RPC method definitions must extend to be accepted for use with the `RpcApi` creator. -### `RpcRequest` +### `PendingRpcApiRequest` This type describes how a particular request should be issued to the JSON RPC server. Given a function that was called on a `Rpc`, this object gives you the opportunity to: @@ -85,7 +85,7 @@ A config object with the following properties: ### `createRpcApi(config)` -Creates a JavaScript proxy that converts _any_ function call called on it to a `RpcRequest` by: +Creates a JavaScript proxy that converts _any_ function call called on it to a `PendingRpcApiRequest` by: - setting `methodName` to the name of the function called - setting `params` to the arguments supplied to that function, optionally transformed by `config.parametersTransformer` @@ -101,7 +101,7 @@ const rpcApi = createRpcApi({ // ...the following function call: rpcApi.foo('bar', { baz: 'bat' }); -// ...will produce the following `RpcRequest` object: +// ...will produce the following `PendingRpcApiRequest` object: // // { // methodName: 'foo', diff --git a/packages/rpc-spec/src/__tests__/rpc-test.ts b/packages/rpc-spec/src/__tests__/rpc-test.ts index c37b09e5be52..d2d398d337d9 100644 --- a/packages/rpc-spec/src/__tests__/rpc-test.ts +++ b/packages/rpc-spec/src/__tests__/rpc-test.ts @@ -2,7 +2,7 @@ import { createRpcMessage } from '@solana/rpc-spec-types'; import { createRpc, Rpc } from '../rpc'; import { RpcApi } from '../rpc-api'; -import { RpcRequest } from '../rpc-request'; +import { PendingRpcApiRequest } from '../rpc-request'; import { RpcTransport } from '../rpc-transport'; interface TestRpcMethods { @@ -50,7 +50,7 @@ describe('JSON-RPC 2.0', () => { beforeEach(() => { rpc = createRpc({ api: { - someMethod(...params: unknown[]): RpcRequest { + someMethod(...params: unknown[]): PendingRpcApiRequest { return { methodName: 'someMethodAugmented', params: [...params, 'augmented', 'params'], @@ -77,7 +77,7 @@ describe('JSON-RPC 2.0', () => { responseTransformer = jest.fn(response => `${response} processed response`); rpc = createRpc({ api: { - someMethod(...params: unknown[]): RpcRequest { + someMethod(...params: unknown[]): PendingRpcApiRequest { return { methodName: 'someMethod', params, diff --git a/packages/rpc-spec/src/rpc-api.ts b/packages/rpc-spec/src/rpc-api.ts index f0ed256a00cb..a30984545c7b 100644 --- a/packages/rpc-spec/src/rpc-api.ts +++ b/packages/rpc-spec/src/rpc-api.ts @@ -1,6 +1,6 @@ import { Callable } from '@solana/rpc-spec-types'; -import { RpcRequest } from './rpc-request'; +import { PendingRpcApiRequest } from './rpc-request'; export type RpcApiConfig = Readonly<{ parametersTransformer?: (params: T, methodName: string) => unknown; @@ -12,7 +12,7 @@ export type RpcApi = { }; type RpcReturnTypeMapper = TRpcMethod extends Callable - ? (...rawParams: unknown[]) => RpcRequest> + ? (...rawParams: unknown[]) => PendingRpcApiRequest> : never; // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -38,7 +38,7 @@ export function createRpcApi(config?: RpcApiC ...rawParams: Parameters< TRpcMethods[TMethodName] extends CallableFunction ? TRpcMethods[TMethodName] : never > - ): RpcRequest> { + ): PendingRpcApiRequest> { const params = config?.parametersTransformer ? config?.parametersTransformer(rawParams, methodName) : rawParams; diff --git a/packages/rpc-spec/src/rpc-request.ts b/packages/rpc-spec/src/rpc-request.ts index d3ade2828d5d..bb5eb934b2da 100644 --- a/packages/rpc-spec/src/rpc-request.ts +++ b/packages/rpc-spec/src/rpc-request.ts @@ -1,4 +1,4 @@ -export type RpcRequest = { +export type PendingRpcApiRequest = { methodName: string; params: unknown; responseTransformer?: (response: unknown, methodName: string) => TResponse; diff --git a/packages/rpc-spec/src/rpc.ts b/packages/rpc-spec/src/rpc.ts index dec275b7f66d..f6a6532aa79b 100644 --- a/packages/rpc-spec/src/rpc.ts +++ b/packages/rpc-spec/src/rpc.ts @@ -3,12 +3,12 @@ import { createRpcMessage, Flatten, OverloadImplementations, - RpcResponse, + RpcResponseData, UnionToIntersection, } from '@solana/rpc-spec-types'; import { RpcApi } from './rpc-api'; -import { PendingRpcRequest, RpcRequest, RpcSendOptions } from './rpc-request'; +import { PendingRpcApiRequest, PendingRpcRequest, RpcSendOptions } from './rpc-request'; import { RpcTransport } from './rpc-transport'; export type RpcConfig = Readonly<{ @@ -63,13 +63,13 @@ function makeProxy( function createPendingRpcRequest( rpcConfig: RpcConfig, - pendingRequest: RpcRequest, + pendingRequest: PendingRpcApiRequest, ): PendingRpcRequest { return { async send(options?: RpcSendOptions): Promise { const { methodName, params, responseTransformer } = pendingRequest; const payload = createRpcMessage(methodName, params); - const response = await rpcConfig.transport>({ + const response = await rpcConfig.transport>({ payload, signal: options?.abortSignal, }); diff --git a/packages/rpc-subscriptions-spec/src/rpc-subscriptions.ts b/packages/rpc-subscriptions-spec/src/rpc-subscriptions.ts index 694fe0df9396..4c956e658383 100644 --- a/packages/rpc-subscriptions-spec/src/rpc-subscriptions.ts +++ b/packages/rpc-subscriptions-spec/src/rpc-subscriptions.ts @@ -9,7 +9,7 @@ import { createRpcMessage, Flatten, OverloadImplementations, - RpcResponse, + RpcResponseData, UnionToIntersection, } from '@solana/rpc-spec-types'; @@ -155,7 +155,7 @@ function createPendingRpcSubscription< * STEP 2: Wait for the acknowledgement from the server with the subscription id. */ for await (const message of connection as AsyncIterable< - RpcNotification | RpcResponse + RpcNotification | RpcResponseData >) { if ('id' in message && message.id === subscribeMessage.id) { if ('error' in message) { @@ -175,7 +175,7 @@ function createPendingRpcSubscription< return { async *[Symbol.asyncIterator]() { for await (const message of connection as AsyncIterable< - RpcNotification | RpcResponse + RpcNotification | RpcResponseData >) { if (!('params' in message) || message.params.subscription !== subscriptionId) { continue; diff --git a/packages/rpc-subscriptions/src/__tests__/cached-abortable-iterable-test.ts b/packages/rpc-subscriptions/src/__tests__/cached-abortable-iterable-test.ts index 2f1a9093e1ff..5ecc4b3df700 100644 --- a/packages/rpc-subscriptions/src/__tests__/cached-abortable-iterable-test.ts +++ b/packages/rpc-subscriptions/src/__tests__/cached-abortable-iterable-test.ts @@ -1,7 +1,7 @@ import { getCachedAbortableIterableFactory } from '../cached-abortable-iterable'; describe('getCachedAbortableIterableFactory', () => { - let asyncGenerator: jest.Mock>; + let getAsyncIterable: jest.MockedFn<() => AsyncIterable>; let factory: (...args: unknown[]) => Promise>; let getAbortSignalFromInputArgs: jest.Mock; let getCacheKeyFromInputArgs: jest.Mock; @@ -9,7 +9,7 @@ describe('getCachedAbortableIterableFactory', () => { let onCreateIterable: jest.Mock; beforeEach(() => { jest.useFakeTimers(); - asyncGenerator = jest.fn().mockImplementation(async function* () { + getAsyncIterable = jest.fn().mockImplementation(async function* () { yield await new Promise(() => { /* never resolve */ }); @@ -17,8 +17,10 @@ describe('getCachedAbortableIterableFactory', () => { getAbortSignalFromInputArgs = jest.fn().mockImplementation(() => new AbortController().signal); getCacheKeyFromInputArgs = jest.fn().mockReturnValue('cache-key'); onCacheHit = jest.fn(); - onCreateIterable = jest.fn().mockResolvedValue({ - [Symbol.asyncIterator]: asyncGenerator, + onCreateIterable = jest.fn().mockReturnValue({ + [Symbol.asyncIterator]() { + return getAsyncIterable()[Symbol.asyncIterator](); + }, }); factory = getCachedAbortableIterableFactory({ getAbortSignalFromInputArgs, @@ -137,7 +139,7 @@ describe('getCachedAbortableIterableFactory', () => { it('creates a new iterable for a message given that the prior iterable threw', async () => { expect.assertions(2); let throwFromIterable; - asyncGenerator.mockImplementationOnce(async function* () { + getAsyncIterable.mockImplementationOnce(async function* () { yield await new Promise((_, reject) => { throwFromIterable = reject; }); @@ -155,7 +157,7 @@ describe('getCachedAbortableIterableFactory', () => { it('creates a new iterable for a message given that prior iterable returned', async () => { expect.assertions(1); let returnFromIterable; - asyncGenerator.mockImplementationOnce(async function* () { + getAsyncIterable.mockImplementationOnce(async function* () { try { yield await new Promise((_, reject) => { returnFromIterable = reject; @@ -197,7 +199,7 @@ describe('getCachedAbortableIterableFactory', () => { Promise.all([factory('A'), factory('B')]); expect(onCacheHit).not.toHaveBeenCalled(); await jest.runAllTimersAsync(); - const iterable = asyncGenerator(); + const iterable = getAsyncIterable(); // FIXME: https://github.com/microsoft/TypeScript/issues/11498 // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore @@ -206,7 +208,7 @@ describe('getCachedAbortableIterableFactory', () => { expect(onCacheHit).toHaveBeenCalledWith(iterable, 'B'); }); it('calls `onCacheHit` in the same runloop when the cached iterable is already resolved', () => { - const iterable = asyncGenerator(); + const iterable = getAsyncIterable(); onCreateIterable.mockReturnValue(iterable); Promise.all([factory('A'), factory('B')]); expect(onCacheHit).toHaveBeenCalledWith(iterable, 'B'); @@ -225,7 +227,7 @@ describe('getCachedAbortableIterableFactory', () => { factory('B'); await jest.runAllTimersAsync(); expect(onCacheHit).not.toHaveBeenCalled(); - const iterable = asyncGenerator(); + const iterable = getAsyncIterable(); // FIXME: https://github.com/microsoft/TypeScript/issues/11498 // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore @@ -235,7 +237,7 @@ describe('getCachedAbortableIterableFactory', () => { }); it('calls `onCacheHit` in different runloops when the cached iterable is already resolved', async () => { expect.assertions(1); - const iterable = asyncGenerator(); + const iterable = getAsyncIterable(); onCreateIterable.mockReturnValue(iterable); await factory('A'); await factory('B'); diff --git a/packages/rpc-subscriptions/src/__tests__/rpc-subscriptions-coalescer-test.ts b/packages/rpc-subscriptions/src/__tests__/rpc-subscriptions-coalescer-test.ts index 87ca87c3d77c..b41ea77500da 100644 --- a/packages/rpc-subscriptions/src/__tests__/rpc-subscriptions-coalescer-test.ts +++ b/packages/rpc-subscriptions/src/__tests__/rpc-subscriptions-coalescer-test.ts @@ -8,21 +8,23 @@ interface TestRpcSubscriptionNotifications { } describe('getRpcSubscriptionsWithSubscriptionCoalescing', () => { - let asyncGenerator: jest.Mock>; + let getAsyncIterable: jest.MockedFn<() => AsyncIterable>; let createPendingSubscription: jest.Mock; let getDeduplicationKey: jest.Mock; let subscribe: jest.Mock; let rpcSubscriptions: RpcSubscriptions; beforeEach(() => { jest.useFakeTimers(); - asyncGenerator = jest.fn().mockImplementation(async function* () { + getAsyncIterable = jest.fn().mockImplementation(async function* () { yield await new Promise(() => { /* never resolve */ }); }); getDeduplicationKey = jest.fn(); - subscribe = jest.fn().mockResolvedValue({ - [Symbol.asyncIterator]: asyncGenerator, + subscribe = jest.fn().mockReturnValue({ + [Symbol.asyncIterator]() { + return getAsyncIterable()[Symbol.asyncIterator](); + }, }); createPendingSubscription = jest.fn().mockReturnValue({ subscribe }); rpcSubscriptions = getRpcSubscriptionsWithSubscriptionCoalescing({ @@ -98,7 +100,7 @@ describe('getRpcSubscriptionsWithSubscriptionCoalescing', () => { }); it('publishes the same messages through both iterables', async () => { expect.assertions(2); - asyncGenerator.mockImplementation(async function* () { + getAsyncIterable.mockImplementation(async function* () { yield Promise.resolve('hello'); }); const iterableA = await rpcSubscriptions @@ -117,7 +119,7 @@ describe('getRpcSubscriptionsWithSubscriptionCoalescing', () => { }); it('publishes the final message when the iterable returns', async () => { expect.assertions(1); - asyncGenerator.mockImplementation( + getAsyncIterable.mockImplementation( // eslint-disable-next-line require-yield async function* () { return await Promise.resolve('hello'); @@ -132,7 +134,7 @@ describe('getRpcSubscriptionsWithSubscriptionCoalescing', () => { }); it('aborting a subscription causes it to return', async () => { expect.assertions(1); - asyncGenerator.mockImplementation(async function* () { + getAsyncIterable.mockImplementation(async function* () { yield Promise.resolve('hello'); }); const abortController = new AbortController(); @@ -146,7 +148,7 @@ describe('getRpcSubscriptionsWithSubscriptionCoalescing', () => { }); it('aborting one subscription does not abort the other', async () => { expect.assertions(1); - asyncGenerator.mockImplementation(async function* () { + getAsyncIterable.mockImplementation(async function* () { yield Promise.resolve('hello'); }); const abortControllerA = new AbortController(); @@ -258,7 +260,7 @@ describe('getRpcSubscriptionsWithSubscriptionCoalescing', () => { }); it('aborting a subscription causes it to return', async () => { expect.assertions(1); - asyncGenerator.mockImplementation(async function* () { + getAsyncIterable.mockImplementation(async function* () { yield Promise.resolve('hello'); }); const abortController = new AbortController(); @@ -272,7 +274,7 @@ describe('getRpcSubscriptionsWithSubscriptionCoalescing', () => { }); it('aborting one subscription does not abort the other', async () => { expect.assertions(1); - asyncGenerator.mockImplementation(async function* () { + getAsyncIterable.mockImplementation(async function* () { yield Promise.resolve('hello'); }); const abortControllerA = new AbortController(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e5d3da7eda64..d4de5f41a3de 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -124,7 +124,7 @@ importers: version: 10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.5.0)(typescript@5.5.4) tsup: specifier: ^8.2.4 - version: 8.2.4(@swc/core@1.6.5(@swc/helpers@0.5.11))(jiti@1.21.0)(postcss@8.4.41)(tsx@4.17.0)(typescript@5.5.4)(yaml@2.4.5) + version: 8.2.4(@swc/core@1.6.5(@swc/helpers@0.5.11))(jiti@1.21.0)(postcss@8.4.41)(tsx@4.18.0)(typescript@5.5.4)(yaml@2.4.5) turbo: specifier: ^2.0.14 version: 2.0.14 @@ -151,8 +151,8 @@ importers: specifier: ^2.0.5 version: 2.0.5 tsx: - specifier: ^4.17.0 - version: 4.17.0 + specifier: ^4.18.0 + version: 4.18.0 examples/react-app: dependencies: @@ -222,8 +222,8 @@ importers: version: link:../../packages/library devDependencies: tsx: - specifier: ^4.17.0 - version: 4.17.0 + specifier: ^4.18.0 + version: 4.18.0 examples/rpc-transport-throttled: dependencies: @@ -238,8 +238,8 @@ importers: specifier: ^2.0.5 version: 2.0.5 tsx: - specifier: ^4.17.0 - version: 4.17.0 + specifier: ^4.18.0 + version: 4.18.0 examples/signers: dependencies: @@ -257,8 +257,8 @@ importers: specifier: ^2.0.5 version: 2.0.5 tsx: - specifier: ^4.17.0 - version: 4.17.0 + specifier: ^4.18.0 + version: 4.18.0 examples/transfer-lamports: dependencies: @@ -276,8 +276,8 @@ importers: specifier: ^2.0.5 version: 2.0.5 tsx: - specifier: ^4.17.0 - version: 4.17.0 + specifier: ^4.18.0 + version: 4.18.0 examples/utils: dependencies: @@ -6387,8 +6387,8 @@ packages: peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - tsx@4.17.0: - resolution: {integrity: sha512-eN4mnDA5UMKDt4YZixo9tBioibaMBpoxBkD+rIPAjVmYERSG0/dWEY1CEFuV89CgASlKL499q8AhmkMnnjtOJg==} + tsx@4.18.0: + resolution: {integrity: sha512-a1jaKBSVQkd6yEc1/NI7G6yHFfefIcuf3QJST7ZEyn4oQnxLYrZR5uZAM8UrwUa3Ge8suiZHcNS1gNrEvmobqg==} engines: {node: '>=18.0.0'} hasBin: true @@ -12168,13 +12168,13 @@ snapshots: dependencies: find-up: 4.1.0 - postcss-load-config@6.0.1(jiti@1.21.0)(postcss@8.4.41)(tsx@4.17.0)(yaml@2.4.5): + postcss-load-config@6.0.1(jiti@1.21.0)(postcss@8.4.41)(tsx@4.18.0)(yaml@2.4.5): dependencies: lilconfig: 3.1.2 optionalDependencies: jiti: 1.21.0 postcss: 8.4.41 - tsx: 4.17.0 + tsx: 4.18.0 yaml: 2.4.5 postcss@8.4.41: @@ -12801,7 +12801,7 @@ snapshots: tslib@2.6.3: {} - tsup@8.2.4(@swc/core@1.6.5(@swc/helpers@0.5.11))(jiti@1.21.0)(postcss@8.4.41)(tsx@4.17.0)(typescript@5.5.4)(yaml@2.4.5): + tsup@8.2.4(@swc/core@1.6.5(@swc/helpers@0.5.11))(jiti@1.21.0)(postcss@8.4.41)(tsx@4.18.0)(typescript@5.5.4)(yaml@2.4.5): dependencies: bundle-require: 5.0.0(esbuild@0.23.0) cac: 6.7.14 @@ -12813,7 +12813,7 @@ snapshots: globby: 11.1.0 joycon: 3.1.1 picocolors: 1.0.1 - postcss-load-config: 6.0.1(jiti@1.21.0)(postcss@8.4.41)(tsx@4.17.0)(yaml@2.4.5) + postcss-load-config: 6.0.1(jiti@1.21.0)(postcss@8.4.41)(tsx@4.18.0)(yaml@2.4.5) resolve-from: 5.0.0 rollup: 4.19.0 source-map: 0.8.0-beta.0 @@ -12834,7 +12834,7 @@ snapshots: tslib: 1.14.1 typescript: 5.5.4 - tsx@4.17.0: + tsx@4.18.0: dependencies: esbuild: 0.23.0 get-tsconfig: 4.7.5