diff --git a/jest.config.js b/jest.config.js index 27194f5f..bc6fab37 100644 --- a/jest.config.js +++ b/jest.config.js @@ -2,6 +2,7 @@ module.exports = { preset: 'ts-jest', testEnvironment: 'node', + setupFilesAfterEnv: ['/jest.setup.js'], testPathIgnorePatterns: ["/node_modules/","/dist/"], testTimeout: 60000, moduleNameMapper: { diff --git a/jest.setup.js b/jest.setup.js new file mode 100644 index 00000000..b3e67c43 --- /dev/null +++ b/jest.setup.js @@ -0,0 +1,40 @@ +/** + * Copyright (c) Whales Corp. + * All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// Polyfill Buffer for Node.js environment (similar to karma.setup.js) +const { Buffer } = require('buffer'); +global.Buffer = Buffer; + +// Extend default timeout for network operations and blockchain interactions +jest.setTimeout(60000); + +// Setup fetch polyfill if needed +require('isomorphic-fetch'); + +// Global test utilities could be added here +global.testUtils = { + // Add any common test utilities here +}; + +// Mock console methods in test environment to reduce noise (optional) +// Uncomment if you want to suppress console output during tests +// const originalError = console.error; +// beforeAll(() => { +// console.error = (...args) => { +// if (args[0]?.includes?.('Warning:')) { +// return; +// } +// originalError.call(console, ...args); +// }; +// }); + +// Setup process.env defaults for testing +if (!process.env.NODE_ENV) { + process.env.NODE_ENV = 'test'; +} + diff --git a/package.json b/package.json index 5ae4239b..21b83f77 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ ], "scripts": { "docs": "rm -fr docs && typedoc src/index.ts", - "build": "rm -fr dist && tsc --declaration", + "build": "tsc --declaration", "test": "jest --verbose --runInBand", "release": "yarn build && yarn release-it --npm.yarn1" }, @@ -20,9 +20,10 @@ "@ton/crypto": "3.2.0", "@ton/emulator": "^2.1.1", "@types/jest": "^27.0.1", - "@types/node": "^16.7.10", + "@types/node": "^24.3.0", "buffer": "^6.0.3", "expect": "^27.1.0", + "isomorphic-fetch": "^3.0.0", "jest": "^27.1.0", "jest-mock": "^27.1.0", "karma": "^6.3.4", @@ -32,11 +33,11 @@ "karma-webpack": "^5.0.0", "prando": "^6.0.1", "release-it": "^17.1.1", - "ts-jest": "^27.0.5", - "ts-loader": "^9.2.5", - "ts-node": "^10.7.0", + "ts-jest": "^29.4.1", + "ts-loader": "^9.5.4", + "ts-node": "^10.9.2", "typedoc": "^0.23.24", - "typescript": "^5.6.3", + "typescript": "^5.9.2", "webpack": "^5.51.2" }, "dependencies": { diff --git a/src/client/TonClient.ts b/src/client/TonClient.ts index ef8dcb64..3f6fa0d5 100644 --- a/src/client/TonClient.ts +++ b/src/client/TonClient.ts @@ -7,7 +7,6 @@ */ import { HttpApi } from "./api/HttpApi"; -import { AxiosAdapter } from 'axios'; import { Address, beginCell, @@ -30,6 +29,7 @@ import { ExtraCurrency } from '@ton/core'; import { Maybe } from "../utils/maybe"; +import { Fetch } from "../types"; export type TonClientParameters = { /** @@ -48,9 +48,9 @@ export type TonClientParameters = { apiKey?: string; /** - * HTTP Adapter for axios + * HTTP Adapter for fetch */ - httpAdapter?: AxiosAdapter; + httpAdapter?: Fetch; } export class TonClient { diff --git a/src/client/TonClient4.ts b/src/client/TonClient4.ts index 2ab28cac..dc0d7220 100644 --- a/src/client/TonClient4.ts +++ b/src/client/TonClient4.ts @@ -6,11 +6,13 @@ * LICENSE file in the root directory of this source tree. */ -import axios, { AxiosAdapter, InternalAxiosRequestConfig, AxiosInstance } from "axios"; +// import axios, { AxiosAdapter, InternalAxiosRequestConfig, AxiosInstance } from "axios"; import { Address, beginCell, Cell, comment, Contract, ContractProvider, ContractState, external, ExtraCurrency, loadTransaction, openContract, OpenedContract, parseTuple, serializeTuple, StateInit, storeMessage, toNano, Transaction, TupleItem, TupleReader } from "@ton/core"; import { Maybe } from "../utils/maybe"; import { toUrlSafe } from "../utils/toUrlSafe"; import { z } from 'zod'; +import { Fetch } from "../types"; +import util from "util"; export type TonClient4Parameters = { @@ -25,31 +27,91 @@ export type TonClient4Parameters = { timeout?: number; /** - * HTTP Adapter for axios + * HTTP Adapter for fetch */ - httpAdapter?: AxiosAdapter; + httpAdapter?: Fetch; /** * HTTP request interceptor for axios */ - requestInterceptor?: (config: InternalAxiosRequestConfig) => InternalAxiosRequestConfig; + // requestInterceptor?: (config: InternalAxiosRequestConfig) => InternalAxiosRequestConfig; } export class TonClient4 { #endpoint: string; #timeout: number; - #adapter?: AxiosAdapter; - #axios: AxiosInstance + #adapter?: Fetch; + // #axios: AxiosInstance constructor(args: TonClient4Parameters) { - this.#axios = axios.create() + // this.#axios = axios.create() this.#endpoint = args.endpoint; this.#timeout = args.timeout || 5000; this.#adapter = args.httpAdapter; - if (args.requestInterceptor) { - this.#axios.interceptors.request.use(args.requestInterceptor) + // if (args.requestInterceptor) { + // this.#axios.interceptors.request.use(args.requestInterceptor) + // } + } + + async getJson(url: string, options: RequestInit, { + timeout = this.#timeout, + }: { + timeout?: number; + } = {}) { + const timeoutAbortController = new AbortController(); + setTimeout(() => { + timeoutAbortController.abort(); + }, timeout); + let res = await fetch(url, { + ...options, + signal: timeoutAbortController.signal + }); + // if (res.status !== 200 || !res.ok) { + // throw Error('Received error: ' + res.statusText); + // } + let result; + try { + result = await res.json(); + } catch (error) { + throw Error('Received error: ' + JSON.stringify(error)); } + return {res, data: result}; + } + + async postJson(url: string, body: any, options: RequestInit, { + timeout = this.#timeout, + }: { + timeout?: number; + } = {}) { + const timeoutAbortController = new AbortController(); + setTimeout(() => { + timeoutAbortController.abort(); + }, timeout); + console.log('postJson', body, JSON.stringify(body)); + let res = await fetch(url, { + ...options, + headers: { + 'Content-Type': 'application/json', + }, + method: 'POST', + body: JSON.stringify(body), + signal: timeoutAbortController.signal + }); + // if (res.status !== 200 || !res.ok) { + // throw Error('Received error: ' + res.statusText); + // } + let result; + try { + const responseText = await res.text(); + console.log('postJson response text', responseText); + result = JSON.parse(responseText) //await res.json(); + } catch (error) { + // const responseText = await res.text(); + // console.log('postJson response text', responseText); + throw Error('Received error: ' + JSON.stringify(error)); + } + return {res, data: result}; } /** @@ -57,7 +119,7 @@ export class TonClient4 { * @returns last block info */ async getLastBlock() { - let res = await this.#axios.get(this.#endpoint + '/block/latest', { adapter: this.#adapter, timeout: this.#timeout }); + let res = await this.getJson(this.#endpoint + '/block/latest', {}, { timeout: this.#timeout }); let lastBlock = lastBlockCodec.safeParse(res.data); if (!lastBlock.success) { throw Error('Mailformed response: ' + lastBlock.error.format()._errors.join(', ')); @@ -71,7 +133,7 @@ export class TonClient4 { * @returns block info */ async getBlock(seqno: number) { - let res = await this.#axios.get(this.#endpoint + '/block/' + seqno, { adapter: this.#adapter, timeout: this.#timeout }); + let res = await this.getJson(this.#endpoint + '/block/' + seqno, {}, { timeout: this.#timeout }); let block = blockCodec.safeParse(res.data); if (!block.success) { throw Error('Mailformed response'); @@ -88,7 +150,7 @@ export class TonClient4 { * @returns block info */ async getBlockByUtime(ts: number) { - let res = await this.#axios.get(this.#endpoint + '/block/utime/' + ts, { adapter: this.#adapter, timeout: this.#timeout }); + let res = await this.getJson(this.#endpoint + '/block/utime/' + ts, {}, { timeout: this.#timeout }); let block = blockCodec.safeParse(res.data); if (!block.success) { throw Error('Mailformed response'); @@ -106,7 +168,7 @@ export class TonClient4 { * @returns account info */ async getAccount(seqno: number, address: Address) { - let res = await this.#axios.get(this.#endpoint + '/block/' + seqno + '/' + address.toString({ urlSafe: true }), { adapter: this.#adapter, timeout: this.#timeout }); + let res = await this.getJson(this.#endpoint + '/block/' + seqno + '/' + address.toString({ urlSafe: true }), {}, { timeout: this.#timeout }); let account = accountCodec.safeParse(res.data); if (!account.success) { throw Error('Mailformed response'); @@ -121,7 +183,7 @@ export class TonClient4 { * @returns account lite info */ async getAccountLite(seqno: number, address: Address) { - let res = await this.#axios.get(this.#endpoint + '/block/' + seqno + '/' + address.toString({ urlSafe: true }) + '/lite', { adapter: this.#adapter, timeout: this.#timeout }); + let res = await this.getJson(this.#endpoint + '/block/' + seqno + '/' + address.toString({ urlSafe: true }) + '/lite', {}, { timeout: this.#timeout }); let account = accountLiteCodec.safeParse(res.data); if (!account.success) { throw Error('Mailformed response'); @@ -148,7 +210,7 @@ export class TonClient4 { * @returns account change info */ async isAccountChanged(seqno: number, address: Address, lt: bigint) { - let res = await this.#axios.get(this.#endpoint + '/block/' + seqno + '/' + address.toString({ urlSafe: true }) + '/changed/' + lt.toString(10), { adapter: this.#adapter, timeout: this.#timeout }); + let res = await this.getJson(this.#endpoint + '/block/' + seqno + '/' + address.toString({ urlSafe: true }) + '/changed/' + lt.toString(10), {}, { timeout: this.#timeout }); let changed = changedCodec.safeParse(res.data); if (!changed.success) { throw Error('Mailformed response'); @@ -164,7 +226,7 @@ export class TonClient4 { * @returns unparsed transactions */ async getAccountTransactions(address: Address, lt: bigint, hash: Buffer) { - let res = await this.#axios.get(this.#endpoint + '/account/' + address.toString({ urlSafe: true }) + '/tx/' + lt.toString(10) + '/' + toUrlSafe(hash.toString('base64')), { adapter: this.#adapter, timeout: this.#timeout }); + let res = await this.getJson(this.#endpoint + '/account/' + address.toString({ urlSafe: true }) + '/tx/' + lt.toString(10) + '/' + toUrlSafe(hash.toString('base64')), {}, { timeout: this.#timeout }); let transactions = transactionsCodec.safeParse(res.data); if (!transactions.success) { throw Error('Mailformed response'); @@ -199,14 +261,12 @@ export class TonClient4 { * @returns parsed transactions */ async getAccountTransactionsParsed(address: Address, lt: bigint, hash: Buffer, count: number = 20) { - let res = await this.#axios.get( - this.#endpoint + '/account/' + address.toString({ urlSafe: true }) + '/tx/parsed/' + lt.toString(10) + '/' + toUrlSafe(hash.toString('base64')), + // todo check count + let res = await this.getJson( + this.#endpoint + '/account/' + address.toString({ urlSafe: true }) + '/tx/parsed/' + lt.toString(10) + '/' + toUrlSafe(hash.toString('base64')) + '?' + new URLSearchParams({ count: count.toString() }), + {}, { - adapter: this.#adapter, timeout: this.#timeout, - params: { - count - } } ); let parsedTransactionsRes = parsedTransactionsCodec.safeParse(res.data); @@ -229,7 +289,7 @@ export class TonClient4 { if (ids && ids.length > 0) { tail = '/' + [...ids].sort().join(','); } - let res = await this.#axios.get(this.#endpoint + '/block/' + seqno + '/config' + tail, { adapter: this.#adapter, timeout: this.#timeout }); + let res = await this.getJson(this.#endpoint + '/block/' + seqno + '/config' + tail, {}, { timeout: this.#timeout }); let config = configCodec.safeParse(res.data); if (!config.success) { throw Error('Mailformed response'); @@ -248,7 +308,7 @@ export class TonClient4 { async runMethod(seqno: number, address: Address, name: string, args?: TupleItem[]) { let tail = args && args.length > 0 ? '/' + toUrlSafe(serializeTuple(args).toBoc({ idx: false, crc32: false }).toString('base64')) : ''; let url = this.#endpoint + '/block/' + seqno + '/' + address.toString({ urlSafe: true }) + '/run/' + encodeURIComponent(name) + tail; - let res = await this.#axios.get(url, { adapter: this.#adapter, timeout: this.#timeout }); + let res = await this.getJson(url, {}, { timeout: this.#timeout }); let runMethod = runMethodCodec.safeParse(res.data); if (!runMethod.success) { throw Error('Mailformed response'); @@ -270,8 +330,9 @@ export class TonClient4 { * @returns message status */ async sendMessage(message: Buffer) { - let res = await this.#axios.post(this.#endpoint + '/send', { boc: message.toString('base64') }, { adapter: this.#adapter, timeout: this.#timeout }); + let res = await this.postJson(this.#endpoint + '/send', { boc: message.toString('base64') }, {}, { timeout: this.#timeout }); let send = sendCodec.safeParse(res.data); + console.log('send', res.data, util.inspect((send as any)?.error, { depth: null })); if (!send.success) { throw Error('Mailformed response'); } diff --git a/src/client/api/HttpApi.ts b/src/client/api/HttpApi.ts index e6917138..3d0194e3 100644 --- a/src/client/api/HttpApi.ts +++ b/src/client/api/HttpApi.ts @@ -7,9 +7,11 @@ */ import { InMemoryCache, TonCache } from './TonCache'; import DataLoader from 'dataloader'; -import axios, { AxiosAdapter } from 'axios'; +// import axios, { AxiosAdapter } from 'axios'; import { Address, Cell, TupleItem } from '@ton/core'; import { z } from 'zod'; +import { Fetch } from '../../types'; +import axios from 'axios'; const version = require('../../../package.json').version as string; @@ -185,7 +187,7 @@ export interface HttpApiParameters { /** * Adapter for Axios */ - adapter?: AxiosAdapter; + adapter?: Fetch; } interface HttpApiResolvedParameters extends HttpApiParameters { @@ -346,11 +348,49 @@ export class HttpApi { }), { headers, timeout: this.parameters.timeout, - adapter: this.parameters.adapter + // adapter: this.parameters.adapter }) - if (res.status !== 200 || !res.data.ok) { - throw Error('Received error: ' + JSON.stringify(res.data)); - } + // const timeoutAbortController = new AbortController(); + // setTimeout(() => { + // timeoutAbortController.abort(); + // }, this.parameters.timeout); + // let res = await fetch(this.endpoint, { + // method: 'POST', + // body: JSON.stringify({ + // id: '1', + // jsonrpc: '2.0', + // method: method, + // params: body + // }), + // headers, + // signal: timeoutAbortController.signal + // }) + // if (res.status !== 200 || !res.ok) { + // let result + // try { + // result = await res.json(); + // } catch (error) { + // // + // } + // if (!result) { + // try { + // result = await res.text(); + // } catch (error) { + // // + // } + // } + // console.log('result', res, result); + // throw Error('Received error: ' + JSON.stringify(result)); + // } + + // let result; + // try { + // result = await res.json(); + // } catch (error) { + // throw new Error('Received error: ' + JSON.stringify(error)); + // } + + let decoded = codec.safeParse(res.data.result); if (decoded.success) { return decoded.data; diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 00000000..7a0ec934 --- /dev/null +++ b/src/types.ts @@ -0,0 +1 @@ +export type Fetch = typeof fetch; diff --git a/yarn.lock b/yarn.lock index 0ae964a7..f9338305 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1048,11 +1048,12 @@ __metadata: "@ton/crypto": 3.2.0 "@ton/emulator": ^2.1.1 "@types/jest": ^27.0.1 - "@types/node": ^16.7.10 + "@types/node": ^24.3.0 axios: ^1.6.7 buffer: ^6.0.3 dataloader: ^2.0.0 expect: ^27.1.0 + isomorphic-fetch: ^3.0.0 jest: ^27.1.0 jest-mock: ^27.1.0 karma: ^6.3.4 @@ -1064,11 +1065,11 @@ __metadata: release-it: ^17.1.1 symbol.inspect: 1.0.1 teslabot: ^1.3.0 - ts-jest: ^27.0.5 - ts-loader: ^9.2.5 - ts-node: ^10.7.0 + ts-jest: ^29.4.1 + ts-loader: ^9.5.4 + ts-node: ^10.9.2 typedoc: ^0.23.24 - typescript: ^5.6.3 + typescript: ^5.9.2 webpack: ^5.51.2 zod: ^3.21.4 peerDependencies: @@ -1270,10 +1271,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^16.7.10": - version: 16.18.83 - resolution: "@types/node@npm:16.18.83" - checksum: 1874fc702ee1bfdd07f9b1d448283cac5aa6ff620fdd5b578145594f5bc841aabc75eb50fb1490f82accbd570718831814ec5249447881fed5c6da3c5439d864 +"@types/node@npm:^24.3.0": + version: 24.3.0 + resolution: "@types/node@npm:24.3.0" + dependencies: + undici-types: ~7.10.0 + checksum: 0f98e492032007d7be811b5598d24b6260f6ef3d21b6fe3b9ca61a1c88f70d5d94c33f361b0f2bd9a1f5963426584c7c2514e29ca69b0649f6b075e7abd551cb languageName: node linkType: hard @@ -2134,7 +2137,7 @@ __metadata: languageName: node linkType: hard -"bs-logger@npm:0.x": +"bs-logger@npm:^0.2.6": version: 0.2.6 resolution: "bs-logger@npm:0.2.6" dependencies: @@ -3547,7 +3550,7 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0": +"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb @@ -4033,6 +4036,24 @@ __metadata: languageName: node linkType: hard +"handlebars@npm:^4.7.8": + version: 4.7.8 + resolution: "handlebars@npm:4.7.8" + dependencies: + minimist: ^1.2.5 + neo-async: ^2.6.2 + source-map: ^0.6.1 + uglify-js: ^3.1.4 + wordwrap: ^1.0.0 + dependenciesMeta: + uglify-js: + optional: true + bin: + handlebars: bin/handlebars + checksum: 00e68bb5c183fd7b8b63322e6234b5ac8fbb960d712cb3f25587d559c2951d9642df83c04a1172c918c41bcfc81bfbd7a7718bbce93b893e0135fc99edea93ff + languageName: node + linkType: hard + "has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": version: 1.0.2 resolution: "has-bigints@npm:1.0.2" @@ -4820,6 +4841,16 @@ __metadata: languageName: node linkType: hard +"isomorphic-fetch@npm:^3.0.0": + version: 3.0.0 + resolution: "isomorphic-fetch@npm:3.0.0" + dependencies: + node-fetch: ^2.6.1 + whatwg-fetch: ^3.4.1 + checksum: e5ab79a56ce5af6ddd21265f59312ad9a4bc5a72cebc98b54797b42cb30441d5c5f8d17c5cd84a99e18101c8af6f90c081ecb8d12fd79e332be1778d58486d75 + languageName: node + linkType: hard + "issue-parser@npm:6.0.0": version: 6.0.0 resolution: "issue-parser@npm:6.0.0" @@ -5351,7 +5382,7 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^27.0.0, jest-util@npm:^27.5.1": +"jest-util@npm:^27.5.1": version: 27.5.1 resolution: "jest-util@npm:27.5.1" dependencies: @@ -5537,7 +5568,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:2.x, json5@npm:^2.2.3": +"json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -5789,7 +5820,7 @@ __metadata: languageName: node linkType: hard -"lodash.memoize@npm:4.x": +"lodash.memoize@npm:^4.1.2": version: 4.1.2 resolution: "lodash.memoize@npm:4.1.2" checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 @@ -5912,7 +5943,7 @@ __metadata: languageName: node linkType: hard -"make-error@npm:1.x, make-error@npm:^1.1.1": +"make-error@npm:^1.1.1, make-error@npm:^1.3.6": version: 1.3.6 resolution: "make-error@npm:1.3.6" checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 @@ -6104,7 +6135,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.6": +"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 @@ -6291,6 +6322,20 @@ __metadata: languageName: node linkType: hard +"node-fetch@npm:^2.6.1": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: d76d2f5edb451a3f05b15115ec89fc6be39de37c6089f1b6368df03b91e1633fd379a7e01b7ab05089a25034b2023d959b47e59759cb38d88341b2459e89d6e5 + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 10.0.1 resolution: "node-gyp@npm:10.0.1" @@ -7411,7 +7456,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.6.0, semver@npm:7.x, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3, semver@npm:^7.5.4": +"semver@npm:7.6.0, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3, semver@npm:^7.5.4": version: 7.6.0 resolution: "semver@npm:7.6.0" dependencies: @@ -7431,6 +7476,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.7.2": + version: 7.7.2 + resolution: "semver@npm:7.7.2" + bin: + semver: bin/semver.js + checksum: dd94ba8f1cbc903d8eeb4dd8bf19f46b3deb14262b6717d0de3c804b594058ae785ef2e4b46c5c3b58733c99c83339068203002f9e37cfe44f7e2cc5e3d2f621 + languageName: node + linkType: hard + "serialize-javascript@npm:^6.0.1": version: 6.0.2 resolution: "serialize-javascript@npm:6.0.2" @@ -8142,42 +8196,56 @@ __metadata: languageName: node linkType: hard -"ts-jest@npm:^27.0.5": - version: 27.1.5 - resolution: "ts-jest@npm:27.1.5" +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 + languageName: node + linkType: hard + +"ts-jest@npm:^29.4.1": + version: 29.4.1 + resolution: "ts-jest@npm:29.4.1" dependencies: - bs-logger: 0.x - fast-json-stable-stringify: 2.x - jest-util: ^27.0.0 - json5: 2.x - lodash.memoize: 4.x - make-error: 1.x - semver: 7.x - yargs-parser: 20.x + bs-logger: ^0.2.6 + fast-json-stable-stringify: ^2.1.0 + handlebars: ^4.7.8 + json5: ^2.2.3 + lodash.memoize: ^4.1.2 + make-error: ^1.3.6 + semver: ^7.7.2 + type-fest: ^4.41.0 + yargs-parser: ^21.1.1 peerDependencies: "@babel/core": ">=7.0.0-beta.0 <8" - "@types/jest": ^27.0.0 - babel-jest: ">=27.0.0 <28" - jest: ^27.0.0 - typescript: ">=3.8 <5.0" + "@jest/transform": ^29.0.0 || ^30.0.0 + "@jest/types": ^29.0.0 || ^30.0.0 + babel-jest: ^29.0.0 || ^30.0.0 + jest: ^29.0.0 || ^30.0.0 + jest-util: ^29.0.0 || ^30.0.0 + typescript: ">=4.3 <6" peerDependenciesMeta: "@babel/core": optional: true - "@types/jest": + "@jest/transform": + optional: true + "@jest/types": optional: true babel-jest: optional: true esbuild: optional: true + jest-util: + optional: true bin: ts-jest: cli.js - checksum: 3ef51c538b82f49b3f529331c1a017871a2f90e7a9a6e69333304755036d121818c6b120e2ce32dd161ff8bb2487efec0c790753ecd39b46a9ed1ce0d241464c + checksum: 641f17ecb44caa987bc12feb87abbebc7cb0e4ba8725afe8208a14ec13ff0cce80fe47f79f3b8c37c7fe56e36fadee8314ed05c863b104bb7531bba71c3b9524 languageName: node linkType: hard -"ts-loader@npm:^9.2.5": - version: 9.5.1 - resolution: "ts-loader@npm:9.5.1" +"ts-loader@npm:^9.5.4": + version: 9.5.4 + resolution: "ts-loader@npm:9.5.4" dependencies: chalk: ^4.1.0 enhanced-resolve: ^5.0.0 @@ -8187,11 +8255,11 @@ __metadata: peerDependencies: typescript: "*" webpack: ^5.0.0 - checksum: 7cf396e656d905388ea2a9b5e82f16d3c955fda8d3df2fbf219f4bee16ff50a3c995c44ae3e584634e9443f056cec70bb3151add3917ffb4588ecd7394bac0ec + checksum: ee8a6883d0f8c0db0ea254fe4e9247ab0f6747cbbbee987af80e69822b840bdc2b67cee267ed3a93af803aeed47790d64dbaf07c001322b9091671f51cbf12b2 languageName: node linkType: hard -"ts-node@npm:^10.7.0": +"ts-node@npm:^10.9.2": version: 10.9.2 resolution: "ts-node@npm:10.9.2" dependencies: @@ -8278,6 +8346,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^4.41.0": + version: 4.41.0 + resolution: "type-fest@npm:4.41.0" + checksum: 7055c0e3eb188425d07403f1d5dc175ca4c4f093556f26871fe22041bc93d137d54bef5851afa320638ca1379106c594f5aa153caa654ac1a7f22c71588a4e80 + languageName: node + linkType: hard + "type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" @@ -8365,23 +8440,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.6.3": - version: 5.6.3 - resolution: "typescript@npm:5.6.3" +"typescript@npm:^5.9.2": + version: 5.9.2 + resolution: "typescript@npm:5.9.2" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: ba302f8822777ebefb28b554105f3e074466b671e7444ec6b75dadc008a62f46f373d9e57ceced1c433756d06c8b7dc569a7eefdf3a9573122a49205ff99021a + checksum: f619cf6773cfe31409279711afd68cdf0859780006c50bc2a7a0c3227f85dea89a3b97248846326f3a17dad72ea90ec27cf61a8387772c680b2252fd02d8497b languageName: node linkType: hard -"typescript@patch:typescript@^5.6.3#~builtin": - version: 5.6.3 - resolution: "typescript@patch:typescript@npm%3A5.6.3#~builtin::version=5.6.3&hash=1f5320" +"typescript@patch:typescript@^5.9.2#~builtin": + version: 5.9.2 + resolution: "typescript@patch:typescript@npm%3A5.9.2#~builtin::version=5.9.2&hash=1f5320" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: ade87bce2363ee963eed0e4ca8a312ea02c81873ebd53609bc3f6dc0a57f6e61ad7e3fb8cbb7f7ab8b5081cbee801b023f7c4823ee70b1c447eae050e6c7622b + checksum: e42a701947325500008334622321a6ad073f842f5e7d5e7b588a6346b31fdf51d56082b9ce5cef24312ecd3e48d6c0d4d44da7555f65e2feec18cf62ec540385 languageName: node linkType: hard @@ -8392,6 +8467,15 @@ __metadata: languageName: node linkType: hard +"uglify-js@npm:^3.1.4": + version: 3.19.3 + resolution: "uglify-js@npm:3.19.3" + bin: + uglifyjs: bin/uglifyjs + checksum: 7ed6272fba562eb6a3149cfd13cda662f115847865c03099e3995a0e7a910eba37b82d4fccf9e88271bb2bcbe505bb374967450f433c17fa27aa36d94a8d0553 + languageName: node + linkType: hard + "unbox-primitive@npm:^1.0.2": version: 1.0.2 resolution: "unbox-primitive@npm:1.0.2" @@ -8411,6 +8495,13 @@ __metadata: languageName: node linkType: hard +"undici-types@npm:~7.10.0": + version: 7.10.0 + resolution: "undici-types@npm:7.10.0" + checksum: 6917fcd8c80963919fe918952f9243a6749af0e3f759a39f8d2c2486144a66c86ae4125aebbce700b636cb1dcd45e85eb8c49c60d60738a97b63f0e89ef9b053 + languageName: node + linkType: hard + "unicorn-magic@npm:^0.1.0": version: 0.1.0 resolution: "unicorn-magic@npm:0.1.0" @@ -8683,6 +8774,13 @@ __metadata: languageName: node linkType: hard +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c + languageName: node + linkType: hard + "webidl-conversions@npm:^5.0.0": version: 5.0.0 resolution: "webidl-conversions@npm:5.0.0" @@ -8759,6 +8857,13 @@ __metadata: languageName: node linkType: hard +"whatwg-fetch@npm:^3.4.1": + version: 3.6.20 + resolution: "whatwg-fetch@npm:3.6.20" + checksum: c58851ea2c4efe5c2235f13450f426824cf0253c1d45da28f45900290ae602a20aff2ab43346f16ec58917d5562e159cd691efa368354b2e82918c2146a519c5 + languageName: node + linkType: hard + "whatwg-mimetype@npm:^2.3.0": version: 2.3.0 resolution: "whatwg-mimetype@npm:2.3.0" @@ -8766,6 +8871,16 @@ __metadata: languageName: node linkType: hard +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: ~0.0.3 + webidl-conversions: ^3.0.0 + checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c + languageName: node + linkType: hard + "whatwg-url@npm:^8.0.0, whatwg-url@npm:^8.5.0": version: 8.7.0 resolution: "whatwg-url@npm:8.7.0" @@ -8861,6 +8976,13 @@ __metadata: languageName: node linkType: hard +"wordwrap@npm:^1.0.0": + version: 1.0.0 + resolution: "wordwrap@npm:1.0.0" + checksum: 2a44b2788165d0a3de71fd517d4880a8e20ea3a82c080ce46e294f0b68b69a2e49cff5f99c600e275c698a90d12c5ea32aff06c311f0db2eb3f1201f3e7b2a04 + languageName: node + linkType: hard + "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" @@ -8992,20 +9114,20 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:20.x, yargs-parser@npm:^20.2.2": - version: 20.2.9 - resolution: "yargs-parser@npm:20.2.9" - checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 - languageName: node - linkType: hard - -"yargs-parser@npm:21.1.1": +"yargs-parser@npm:21.1.1, yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c languageName: node linkType: hard +"yargs-parser@npm:^20.2.2": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 + languageName: node + linkType: hard + "yargs@npm:^16.1.1, yargs@npm:^16.2.0": version: 16.2.0 resolution: "yargs@npm:16.2.0"