From 8204dc86a48010b812cff75ed14392585c39f39b Mon Sep 17 00:00:00 2001 From: Alina Sireneva Date: Sun, 12 Nov 2023 01:17:20 +0300 Subject: [PATCH] chore: removed dispatcher dep from core (again), improved build script --- .../client/src/methods/files/download-file.ts | 32 ++++--------------- packages/core/package.json | 1 - packages/core/src/storage/memory.ts | 3 +- .../core/src/storage/storage.test-utils.ts | 13 +++++++- packages/dispatcher/src/state/storage.ts | 3 ++ packages/http-proxy/index.ts | 2 -- pnpm-lock.yaml | 3 -- scripts/build-package.js | 18 +++++++---- tsconfig.build.json | 7 ++++ 9 files changed, 41 insertions(+), 41 deletions(-) create mode 100644 tsconfig.build.json diff --git a/packages/client/src/methods/files/download-file.ts b/packages/client/src/methods/files/download-file.ts index be7bd6a7..331dd6a6 100644 --- a/packages/client/src/methods/files/download-file.ts +++ b/packages/client/src/methods/files/download-file.ts @@ -1,19 +1,12 @@ -import { createRequire } from 'module' +// eslint-disable-next-line no-restricted-imports +import { createWriteStream, rmSync } from 'fs' +import { writeFile } from 'fs/promises' -import { BaseTelegramClient, MtUnsupportedError } from '@mtcute/core' +import { BaseTelegramClient } from '@mtcute/core' import { FileDownloadLocation, FileDownloadParameters, FileLocation } from '../../types/index.js' import { downloadAsIterable } from './download-iterable.js' -let fs: typeof import('fs') | null = null - -try { - // @only-if-esm - const require = createRequire(import.meta.url) - // @/only-if-esm - fs = require('fs') as typeof import('fs') -} catch (e) {} - /** * Download a remote file to a local file (only for NodeJS). * Promise will resolve once the download is complete. @@ -27,29 +20,18 @@ export async function downloadToFile( location: FileDownloadLocation, params?: FileDownloadParameters, ): Promise { - if (!fs) { - throw new MtUnsupportedError('Downloading to file is only supported in NodeJS') - } - if (location instanceof FileLocation && ArrayBuffer.isView(location.location)) { // early return for inline files - const buf = location.location - - return new Promise((resolve, reject) => { - fs!.writeFile(filename, buf, (err) => { - if (err) reject(err) - else resolve() - }) - }) + await writeFile(filename, location.location) } - const output = fs.createWriteStream(filename) + const output = createWriteStream(filename) if (params?.abortSignal) { params.abortSignal.addEventListener('abort', () => { client.log.debug('aborting file download %s - cleaning up', filename) output.destroy() - fs!.rmSync(filename) + rmSync(filename) }) } diff --git a/packages/core/package.json b/packages/core/package.json index 0ecc6d05..65a8e21d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -54,7 +54,6 @@ "@types/ws": "8.5.4", "node-forge": "1.3.1", "@mtcute/test": "workspace:^", - "@mtcute/dispatcher": "workspace:^", "ws": "8.13.0" } } diff --git a/packages/core/src/storage/memory.ts b/packages/core/src/storage/memory.ts index 8541590d..ff2b0be5 100644 --- a/packages/core/src/storage/memory.ts +++ b/packages/core/src/storage/memory.ts @@ -1,4 +1,3 @@ -import { IStateStorage } from '@mtcute/dispatcher' import { tl } from '@mtcute/tl' import { LruMap, toggleChannelIdMark } from '../utils/index.js' @@ -56,7 +55,7 @@ export interface MemorySessionState { const USERNAME_TTL = 86400000 // 24 hours -export class MemoryStorage implements ITelegramStorage, IStateStorage { +export class MemoryStorage implements ITelegramStorage { protected _state!: MemorySessionState private _cachedInputPeers: LruMap = new LruMap(100) diff --git a/packages/core/src/storage/storage.test-utils.ts b/packages/core/src/storage/storage.test-utils.ts index cbed3ee7..11753518 100644 --- a/packages/core/src/storage/storage.test-utils.ts +++ b/packages/core/src/storage/storage.test-utils.ts @@ -1,12 +1,12 @@ import Long from 'long' import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest' -import type { IStateStorage } from '@mtcute/dispatcher' import { createStub } from '@mtcute/test' import { tl } from '@mtcute/tl' import { __tlReaderMap } from '@mtcute/tl/binary/reader.js' import { __tlWriterMap } from '@mtcute/tl/binary/writer.js' +import { MaybeAsync } from '../types/index.js' import { defaultProductionDc } from '../utils/default-dcs.js' import { LogManager } from '../utils/index.js' import { ITelegramStorage } from './abstract.js' @@ -232,6 +232,17 @@ export function testStorage(s: ITelegramStorage): void { }) } +interface IStateStorage { + getState(key: string): MaybeAsync + setState(key: string, state: unknown, ttl?: number): MaybeAsync + deleteState(key: string): MaybeAsync + getCurrentScene(key: string): MaybeAsync + setCurrentScene(key: string, scene: string, ttl?: number): MaybeAsync + deleteCurrentScene(key: string): MaybeAsync + getRateLimit(key: string, limit: number, window: number): MaybeAsync<[number, number]> + resetRateLimit(key: string): MaybeAsync +} + export function testStateStorage(s: IStateStorage) { describe('key-value state', () => { beforeAll(() => void vi.useFakeTimers()) diff --git a/packages/dispatcher/src/state/storage.ts b/packages/dispatcher/src/state/storage.ts index 017b611b..0a06c62c 100644 --- a/packages/dispatcher/src/state/storage.ts +++ b/packages/dispatcher/src/state/storage.ts @@ -1,5 +1,8 @@ import { MaybeAsync } from '@mtcute/client' +// ⚠️ Important: when modifying the below interface, also update it +// in packages/core/src/storage/storage.test-utils.ts + /** * Interface for FSM storage for the dispatcher. * diff --git a/packages/http-proxy/index.ts b/packages/http-proxy/index.ts index bf991cdf..3960e81c 100644 --- a/packages/http-proxy/index.ts +++ b/packages/http-proxy/index.ts @@ -1,5 +1,3 @@ -// ^^ because of this._socket. we know it's not null, almost everywhere, but TS doesn't - import { connect as connectTcp } from 'net' import { connect as connectTls, SecureContextOptions } from 'tls' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d4fc9764..0f42c89f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -130,9 +130,6 @@ importers: specifier: 5.2.3 version: 5.2.3 devDependencies: - '@mtcute/dispatcher': - specifier: workspace:^ - version: link:../dispatcher '@mtcute/test': specifier: workspace:^ version: link:../test diff --git a/scripts/build-package.js b/scripts/build-package.js index 6918ff85..5d494d15 100644 --- a/scripts/build-package.js +++ b/scripts/build-package.js @@ -130,16 +130,17 @@ if (buildConfig.buildTs) { let tsconfig = fs.readFileSync(path.join(packageDir, 'tsconfig.backup.json'), 'utf-8') // what the fuck - tsconfig = tsconfig.replace( - /("extends": "\.\.\/\.\.\/tsconfig\.json",)/, - '$1"exclude": ["**/*.{test,test-utils}.ts"],', - ) + tsconfig = tsconfig.replace(/(?<="extends": "\.\.\/\.\.\/)tsconfig\.json(?=",)/, 'tsconfig.build.json') fs.writeFileSync(path.join(packageDir, 'tsconfig.json'), tsconfig) + const restoreTsconfig = () => { + fs.renameSync(path.join(packageDir, 'tsconfig.backup.json'), path.join(packageDir, 'tsconfig.json')) + } + try { exec('pnpm exec tsc --build', { cwd: packageDir, stdio: 'inherit' }) } catch (e) { - fs.renameSync(path.join(packageDir, 'tsconfig.backup.json'), path.join(packageDir, 'tsconfig.json')) + restoreTsconfig() throw e } @@ -169,10 +170,13 @@ if (buildConfig.buildTs) { fs.writeFileSync(f, originalFiles[f]) } - if (error) throw error + if (error) { + restoreTsconfig() + throw error + } } - fs.renameSync(path.join(packageDir, 'tsconfig.backup.json'), path.join(packageDir, 'tsconfig.json')) + restoreTsconfig() console.log('[i] Post-processing...') diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 00000000..d9bff427 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "exclude": [ + "**/*.test.ts", + "**/*.test-utils.ts", + ] +}