fix: fixed deno types and build

This commit is contained in:
alina 🌸 2025-01-01 08:06:51 +03:00
parent 2973cfe4d8
commit c92f445da3
Signed by: teidesu
SSH key fingerprint: SHA256:uNeCpw6aTSU4aIObXLvHfLkDa82HWH9EiOj9AXOIRpI
41 changed files with 173 additions and 336 deletions

View file

@ -43,6 +43,7 @@ jobs:
run: |
git config user.name "mtcute-bot"
git config user.email mtcute-bot@tei.su
git remote add github git@github.com:mtcute/mtcute.git
- name: Run release
env:
@ -52,6 +53,9 @@ jobs:
--kind=${{ github.event.inputs.kind }} \
--with-npm \
--npm-token=${{ secrets.NPM_TOKEN }} \
--with-jsr \
--jsr-token=${{ secrets.JSR_TOKEN }} \
--git-extra-origins=github \
--with-github-release \
--github-repo=mtcute/mtcute \
--github-token=${{ secrets.GH_PAT }}

View file

@ -11,16 +11,21 @@ on:
jobs:
lint:
runs-on: node22
if: github.actor != 'mtcute-bot' # do not run after release
if: github.actor != 'desu-bot' # do not run after release
steps:
- uses: actions/checkout@v4
- uses: ./.forgejo/actions/init
- uses: https://github.com/denoland/setup-deno@v1
with:
deno-version: '2.0'
- name: 'TypeScript'
run: pnpm run lint:tsc:ci
- name: 'ESLint'
run: pnpm run lint:ci
- name: 'Circular dependencies'
run: pnpm run lint:dpdm
- name: 'deno publish --dry-run'
run: pnpm exec fuman-build jsr gen-deno-workspace --with-dry-run
test-node:
strategy:

View file

@ -4,51 +4,37 @@ export default {
exclude: ['**/*.{test,bench,test-utils}.ts', '**/__fixtures__/**'],
sourceDir: 'src',
transformCode: (path, code) => {
// add shims for node-specific APIs and replace NodeJS.* types
// pretty fragile, but it works for now
// todo: remove this god awfulness and use `declare const` in-place instead
if (!path.endsWith('.ts')) return code
if (!code.match('<deno-(insert|remove|tsignore)>')) return code
const typesToReplace = {
'NodeJS\\.Timeout': 'number',
'NodeJS\\.Immediate': 'number',
}
const nodeSpecificApis = {
setImmediate: '(cb: (...args: any[]) => void, ...args: any[]) => number',
clearImmediate: '(id: number) => void',
Buffer:
'{ '
+ 'concat: (...args: any[]) => Uint8Array, '
+ 'from: (data: any, encoding?: string) => { toString(encoding?: string): string }, '
+ ' }',
SharedWorker: ['type', 'never'],
WorkerGlobalScope:
'{ '
+ ' new (): typeof WorkerGlobalScope, '
+ ' postMessage: (message: any, transfer?: Transferable[]) => void, '
+ ' addEventListener: (type: "message", listener: (ev: MessageEvent) => void) => void, '
+ ' }',
process: '{ ' + 'hrtime: { bigint: () => bigint }, ' + '}',
// deno is missing some types, so we have to add them manually
// i dont want to manually write types for them, so we just declare them as `any` in a comment
// and un-comment them when building for deno
//
// this way we can still have proper types in the code, while also being able to build for deno
// very much a crutch, but welp, deno sucks
let insertContent = code.match(/<deno-insert>(.*?)<\/deno-insert>/s)
while (insertContent) {
code = code.slice(0, insertContent.index)
+ insertContent[1].replace(/\/\/\s*/g, '')
+ code.slice(insertContent.index + insertContent[0].length)
insertContent = code.match(/<deno-insert>(.*?)<\/deno-insert>/s)
}
for (const [name, decl_] of Object.entries(nodeSpecificApis)) {
if (code.includes(name)) {
if (name === 'Buffer' && code.includes('node:buffer')) continue
let removeContent = code.match(/<deno-remove>(.*?)<\/deno-remove>/s)
while (removeContent) {
code = code.slice(0, removeContent.index) + code.slice(removeContent.index + removeContent[0].length)
const isType = Array.isArray(decl_) && decl_[0] === 'type'
const decl = isType ? decl_[1] : decl_
if (isType) {
code = `declare type ${name} = ${decl};\n${code}`
} else {
code = `declare const ${name}: ${decl};\n${code}`
}
}
removeContent = code.match(/<deno-remove>(.*?)<\/deno-remove>/s)
}
for (const [oldType, newType] of Object.entries(typesToReplace)) {
if (code.match(oldType)) {
code = code.replace(new RegExp(oldType, 'g'), newType)
}
let tsIgnoreContent = code.match(/\/\/\s*<deno-tsignore>/)
while (tsIgnoreContent) {
code = `${code.slice(0, tsIgnoreContent.index)}/* @ts-ignore */${code.slice(tsIgnoreContent.index + tsIgnoreContent[0].length)}`
tsIgnoreContent = code.match(/\/\/\s*<deno-tsignore>/)
}
return code

View file

@ -168,7 +168,6 @@
"npm:chai@^4.3.10",
"npm:dotenv-cli@7.4.4",
"npm:esbuild@0.24",
"npm:globstar@1.0.0",
"npm:tsx@^4.19.2"
]
}

View file

@ -22,7 +22,6 @@
"devDependencies": {
"@types/chai": "^4.3.8",
"@types/mocha": "^10.0.2",
"@types/node": "^20.8.10",
"globstar": "1.0.0"
"@types/node": "^20.8.10"
}
}

View file

@ -44,7 +44,7 @@
},
"devDependencies": {
"@antfu/eslint-config": "^3.11.2",
"@fuman/build": "https://pkg.pr.new/teidesu/fuman/@fuman/build@2a71d4a",
"@fuman/build": "https://pkg.pr.new/teidesu/fuman/@fuman/build@c073041",
"@fuman/utils": "0.0.4",
"@types/deno": "npm:@teidesu/deno-types@1.46.3",
"@types/node": "20.10.0",

View file

@ -91,13 +91,13 @@ export class TelegramClient extends TelegramClientBase {
return new Promise(res => this._rl?.question(text, res))
}
close(): Promise<void> {
override close(): Promise<void> {
this._rl?.close()
return super.close()
}
start(params: Parameters<TelegramClientBase['start']>[0] = {}): Promise<User> {
override start(params: Parameters<TelegramClientBase['start']>[0] = {}): Promise<User> {
if (!params.botToken) {
if (!params.phone) params.phone = () => this.input('phone > ')
if (!params.code) params.code = () => this.input('code > ')
@ -117,7 +117,7 @@ export class TelegramClient extends TelegramClientBase {
})
}
run(
override run(
params: Parameters<TelegramClient['start']>[0] | ((user: User) => void | Promise<void>),
then?: (user: User) => void | Promise<void>,
): void {
@ -131,7 +131,7 @@ export class TelegramClient extends TelegramClientBase {
.catch(err => this.onError.emit(unknownToError(err)))
}
downloadToFile(
override downloadToFile(
filename: string,
location: FileDownloadLocation,
params?: FileDownloadParameters | undefined,
@ -139,7 +139,10 @@ export class TelegramClient extends TelegramClientBase {
return downloadToFile(this, filename, location, params)
}
downloadAsNodeStream(location: FileDownloadLocation, params?: FileDownloadParameters | undefined): Readable {
override downloadAsNodeStream(
location: FileDownloadLocation,
params?: FileDownloadParameters | undefined,
): Readable {
return downloadAsNodeStream(this, location, params)
}
}

View file

@ -12,6 +12,7 @@ export async function getDefaultCryptoProvider(): Promise<IExtendedCryptoProvide
const crypto = /* @vite-ignore */ await import('node:crypto')
const { NodeCryptoProvider } = /* @vite-ignore */ await import('@mtcute/node/utils.js')
// <deno-tsignore>
return new (class extends NodeCryptoProvider implements IExtendedCryptoProvider {
createHash(algorithm: 'md5' | 'sha512') {
const hasher = crypto.createHash(algorithm)

View file

@ -14,7 +14,7 @@ export class Audio extends RawDocument {
readonly type = 'audio' as const
/** Type of the file for File ID generation */
protected _fileIdType(): tdFileId.FileType {
protected override _fileIdType(): tdFileId.FileType {
return tdFileId.FileType.Audio
}

View file

@ -133,7 +133,7 @@ export class LiveLocation extends RawLocation {
* independent live geolocation, which
* will not be auto-updated with the current
*/
get inputMedia(): tl.TypeInputMedia {
override get inputMedia(): tl.TypeInputMedia {
return {
_: 'inputMediaGeoLive',
geoPoint: {

View file

@ -65,7 +65,7 @@ const MASK_POS = ['forehead', 'eyes', 'mouth', 'chin'] as const
export class Sticker extends RawDocument {
readonly type = 'sticker' as const
protected _fileIdType(): tdFileId.FileType {
protected override _fileIdType(): tdFileId.FileType {
return tdFileId.FileType.Sticker
}

View file

@ -14,7 +14,7 @@ import { RawDocument } from './document.js'
export class Video extends RawDocument {
readonly type = 'video' as const
protected _fileIdType(): tdFileId.FileType {
protected override _fileIdType(): tdFileId.FileType {
if (this.isRound) return tdFileId.FileType.VideoNote
if (this.isAnimation) return tdFileId.FileType.Animation

View file

@ -13,7 +13,7 @@ import { RawDocument } from './document.js'
export class Voice extends RawDocument {
readonly type = 'voice' as const
protected _fileIdType(): tdFileId.FileType {
protected override _fileIdType(): tdFileId.FileType {
return tdFileId.FileType.VoiceNote
}

View file

@ -14,7 +14,7 @@ export class StoryInteractiveChannelPost extends StoryInteractiveArea {
readonly type = 'channel_post' as const
constructor(
readonly raw: tl.RawMediaAreaChannelPost,
override readonly raw: tl.RawMediaAreaChannelPost,
readonly _peers: PeersIndex,
) {
super(raw)

View file

@ -13,7 +13,7 @@ import { StoryInteractiveArea } from './base.js'
export class StoryInteractiveLocation extends StoryInteractiveArea {
readonly type = 'location' as const
constructor(readonly raw: tl.RawMediaAreaGeoPoint) {
constructor(override readonly raw: tl.RawMediaAreaGeoPoint) {
super(raw)
}

View file

@ -16,7 +16,7 @@ import { StoryInteractiveArea } from './base.js'
export class StoryInteractiveReaction extends StoryInteractiveArea {
readonly type = 'reaction' as const
constructor(readonly raw: tl.RawMediaAreaSuggestedReaction) {
constructor(override readonly raw: tl.RawMediaAreaSuggestedReaction) {
super(raw)
}

View file

@ -8,7 +8,7 @@ import { StoryInteractiveArea } from './base.js'
export class StoryInteractiveUrl extends StoryInteractiveArea {
readonly type = 'url' as const
constructor(readonly raw: tl.RawMediaAreaUrl) {
constructor(override readonly raw: tl.RawMediaAreaUrl) {
super(raw)
}

View file

@ -14,7 +14,7 @@ import { StoryInteractiveArea } from './base.js'
export class StoryInteractiveVenue extends StoryInteractiveArea {
readonly type = 'venue' as const
constructor(readonly raw: tl.RawMediaAreaVenue) {
constructor(override readonly raw: tl.RawMediaAreaVenue) {
super(raw)
}

View file

@ -10,7 +10,7 @@ import { StoryInteractiveArea } from './base.js'
export class StoryInteractiveWeather extends StoryInteractiveArea {
readonly type = 'weather' as const
constructor(readonly raw: tl.RawMediaAreaWeather) {
constructor(override readonly raw: tl.RawMediaAreaWeather) {
super(raw)
}

View file

@ -9,7 +9,7 @@ import { Message } from '../messages/message.js'
export class BusinessMessage extends Message {
constructor(
readonly update: tl.RawUpdateBotNewBusinessMessage | tl.RawUpdateBotEditBusinessMessage,
readonly _peers: PeersIndex,
_peers: PeersIndex,
) {
super(update.message, _peers)
}
@ -21,7 +21,7 @@ export class BusinessMessage extends Message {
return this.update.connectionId
}
get groupedIdUnique(): string | null {
override get groupedIdUnique(): string | null {
const superGroupedIdUnique = super.groupedIdUnique
if (!superGroupedIdUnique) {

View file

@ -83,7 +83,7 @@ class BaseCallbackQuery {
*/
export class CallbackQuery extends BaseCallbackQuery {
constructor(
readonly raw: tl.RawUpdateBotCallbackQuery,
override readonly raw: tl.RawUpdateBotCallbackQuery,
_peers: PeersIndex,
) {
super(raw, _peers)
@ -116,7 +116,7 @@ makeInspectable(CallbackQuery)
*/
export class InlineCallbackQuery extends BaseCallbackQuery {
constructor(
readonly raw: tl.RawUpdateInlineBotCallbackQuery,
override readonly raw: tl.RawUpdateInlineBotCallbackQuery,
_peers: PeersIndex,
) {
super(raw, _peers)
@ -151,7 +151,7 @@ makeInspectable(InlineCallbackQuery)
*/
export class BusinessCallbackQuery extends BaseCallbackQuery {
constructor(
readonly raw: tl.RawUpdateBusinessBotCallbackQuery,
override readonly raw: tl.RawUpdateBusinessBotCallbackQuery,
_peers: PeersIndex,
) {
super(raw, _peers)

View file

@ -49,6 +49,10 @@ export type WorkerOutboundMessage =
error?: SerializedError
}
// <deno-insert>
// declare type SharedWorker = never
// </deno-insert>
export type SomeWorker = NodeWorker | Worker | SharedWorker
export type SendFn = (message: WorkerInboundMessage) => void

View file

@ -170,7 +170,7 @@ export class SessionConnection extends PersistentConnection {
this.reset()
}
async destroy(): Promise<void> {
override async destroy(): Promise<void> {
await super.destroy()
this.reset(true)
}
@ -1542,7 +1542,7 @@ export class SessionConnection extends PersistentConnection {
}
}
protected _onInactivityTimeout(): void {
protected override _onInactivityTimeout(): void {
// we should send all pending acks and other service messages
// before dropping the connection
// additionally, if we are still waiting for some rpc results,

View file

@ -55,7 +55,7 @@ export class IntermediatePacketCodec implements IPacketCodec {
* See https://core.telegram.org/mtproto/mtproto-transports#padded-intermediate
*/
export class PaddedIntermediatePacketCodec extends IntermediatePacketCodec implements IPacketCodec {
tag(): Uint8Array {
override tag(): Uint8Array {
return PADDED_TAG
}
@ -64,7 +64,7 @@ export class PaddedIntermediatePacketCodec extends IntermediatePacketCodec imple
this._crypto = crypto
}
encode(frame: Uint8Array, into: ISyncWritable): void {
override encode(frame: Uint8Array, into: ISyncWritable): void {
// padding size, 0-15
const padSize = getRandomInt(16)

View file

@ -8,6 +8,10 @@ import { isTlRpcError } from './type-assertions.js'
const DEFAULT_LOG_LEVEL = 2
const FORMATTER_RE = /%[a-z]/gi
// <deno-insert>
// declare const Buffer: typeof import('node:buffer').Buffer
// </deno-insert>
/**
* Logger created by {@link LogManager}
*/
@ -179,7 +183,7 @@ export class LogManager extends Logger {
*
* @param tag Logger tag
*/
create(tag: string): Logger {
override create(tag: string): Logger {
return new Logger(this, tag)
}

View file

@ -2,11 +2,13 @@ import * as fs from 'node:fs'
/** @type {import('@fuman/build/vite').CustomBuildConfig} */
export default () => ({
finalizeJsr({ outDir }) {
// jsr doesn't support symlinks, so we need to copy the files manually
const real = fs.realpathSync(`${outDir}/common-internals-web`)
fs.unlinkSync(`${outDir}/common-internals-web`)
fs.cpSync(real, `${outDir}/common-internals-web`, { recursive: true })
jsr: {
finalize({ outDir }) {
// jsr doesn't support symlinks, so we need to copy the files manually
const real = fs.realpathSync(`${outDir}/common-internals-web`)
fs.unlinkSync(`${outDir}/common-internals-web`)
fs.cpSync(real, `${outDir}/common-internals-web`, { recursive: true })
},
},
typedoc: {
externalPattern: [

View file

@ -92,13 +92,13 @@ export class TelegramClient extends TelegramClientBase {
return new Promise(res => this._rl?.question(text, res))
}
close(): Promise<void> {
override close(): Promise<void> {
this._rl?.close()
return super.close()
}
start(params: Parameters<TelegramClientBase['start']>[0] = {}): Promise<User> {
override start(params: Parameters<TelegramClientBase['start']>[0] = {}): Promise<User> {
if (!params.botToken) {
if (!params.phone) params.phone = () => this.input('phone > ')
if (!params.code) params.code = () => this.input('code > ')
@ -118,7 +118,7 @@ export class TelegramClient extends TelegramClientBase {
})
}
run(
override run(
params: Parameters<TelegramClient['start']>[0] | ((user: User) => void | Promise<void>),
then?: (user: User) => void | Promise<void>,
): void {
@ -132,7 +132,7 @@ export class TelegramClient extends TelegramClientBase {
.catch(err => this.onError.emit(unknownToError(err)))
}
downloadToFile(
override downloadToFile(
filename: string,
location: FileDownloadLocation,
params?: FileDownloadParameters | undefined,

View file

@ -88,7 +88,7 @@ export class SqliteStorageDriver extends BaseSqliteStorageDriver {
super()
}
async _load(): Promise<void> {
override async _load(): Promise<void> {
if (!Database) {
// we load this lazily to avoid loading ffi if it's not needed,
// in case the user doesn't use sqlite storage

View file

@ -14,6 +14,14 @@ import {
import { DenoPlatform } from './platform.js'
// <deno-insert>
// declare const WorkerGlobalScope: any
// declare const self: typeof globalThis & {
// postMessage: Function,
// addEventListener: (type: 'message', listener: (ev: { data: any }) => void) => void,
// }
// </deno-insert>
export type { TelegramWorkerOptions, WorkerCustomMethods }
export interface TelegramWorkerPortOptions {
worker: SomeWorker

View file

@ -103,13 +103,13 @@ export class TelegramClient extends TelegramClientBase {
return new Promise(res => this._rl?.question(text, res))
}
close(): Promise<void> {
override close(): Promise<void> {
this._rl?.close()
return super.close()
}
start(params: Parameters<TelegramClientBase['start']>[0] = {}): Promise<User> {
override start(params: Parameters<TelegramClientBase['start']>[0] = {}): Promise<User> {
if (!params.botToken) {
if (!params.phone) params.phone = () => this.input('phone > ')
if (!params.code) params.code = () => this.input('code > ')
@ -129,7 +129,7 @@ export class TelegramClient extends TelegramClientBase {
})
}
run(
override run(
params: Parameters<TelegramClient['start']>[0] | ((user: User) => void | Promise<void>),
then?: (user: User) => void | Promise<void>,
): void {
@ -143,7 +143,7 @@ export class TelegramClient extends TelegramClientBase {
.catch(err => this.onError.emit(unknownToError(err)))
}
downloadToFile(
override downloadToFile(
filename: string,
location: FileDownloadLocation,
params?: FileDownloadParameters | undefined,
@ -151,7 +151,10 @@ export class TelegramClient extends TelegramClientBase {
return downloadToFile(this, filename, location, params)
}
downloadAsNodeStream(location: FileDownloadLocation, params?: FileDownloadParameters | undefined): Readable {
override downloadAsNodeStream(
location: FileDownloadLocation,
params?: FileDownloadParameters | undefined,
): Readable {
return downloadAsNodeStream(this, location, params)
}
}

View file

@ -185,7 +185,7 @@ export class StubTelegramClient extends BaseTelegramClient {
return response
}
async call<T extends tl.RpcMethod>(
override async call<T extends tl.RpcMethod>(
message: MustEqual<T, tl.RpcMethod>,
params?: RpcCallOptions,
): Promise<tl.RpcCallReturn[T['_']]> {

View file

@ -5,6 +5,12 @@ import { txToPromise } from './utils.js'
export type PostMigrationFunction = (db: IDBDatabase) => Promise<void>
type MigrationFunction = (db: IDBDatabase) => void | PostMigrationFunction
// <deno-insert>
// declare const indexedDB: any
// declare type IDBDatabase = any
// declare type IDBObjectStore = any
// </deno-insert>
const REPO_VERSION_PREFIX = '__version:'
export class IdbStorageDriver extends BaseStorageDriver {

View file

@ -6,6 +6,13 @@ import { reqToPromise, txToPromise } from '../utils.js'
const TABLE_AUTH_KEYS = 'authKeys'
const TABLE_TEMP_AUTH_KEYS = 'tempAuthKeys'
// <deno-insert>
// declare type IDBTransactionMode = any
// declare type IDBObjectStore = any
// declare type IDBValidKey = any
// declare type IDBRequest<T> = { result: T }
// </deno-insert>
interface AuthKeyDto {
dc: number
key: Uint8Array
@ -76,7 +83,7 @@ export class IdbAuthKeysRepository implements IAuthKeysRepository {
// IndexedDB sucks
const tempOs = tx.objectStore(TABLE_TEMP_AUTH_KEYS)
const keys = await reqToPromise(tempOs.getAllKeys())
const keys = await reqToPromise<IDBValidKey[]>(tempOs.getAllKeys())
for (const key of keys) {
if ((key as [number, number])[0] === dc) {

View file

@ -9,6 +9,12 @@ interface KeyValueDto {
value: Uint8Array
}
// <deno-insert>
// declare type IDBTransactionMode = any
// declare type IDBObjectStore = any
// declare type IDBRequest<T> = { result: T }
// </deno-insert>
export class IdbKvRepository implements IKeyValueRepository {
constructor(readonly _driver: IdbStorageDriver) {
_driver.registerMigration(KV_TABLE, 1, (db) => {

View file

@ -5,6 +5,12 @@ import { reqToPromise } from '../utils.js'
const TABLE = 'peers'
// <deno-insert>
// declare type IDBTransactionMode = any
// declare type IDBObjectStore = any
// declare type IDBRequest<T> = { result: T }
// </deno-insert>
export class IdbPeersRepository implements IPeersRepository {
constructor(readonly _driver: IdbStorageDriver) {
_driver.registerMigration(TABLE, 1, (db) => {

View file

@ -11,6 +11,14 @@ interface MessageRefDto {
msgId: number
}
// <deno-insert>
// declare type IDBTransactionMode = any
// declare type IDBObjectStore = any
// declare type IDBValidKey = any
// declare type IDBRequest<T> = { result: T }
// declare type IDBCursorWithValue = { delete: () => void, continue: () => void }
// </deno-insert>
export class IdbRefMsgRepository implements IReferenceMessagesRepository {
constructor(readonly _driver: IdbStorageDriver) {
_driver.registerMigration(TABLE, 1, (db) => {
@ -46,7 +54,7 @@ export class IdbRefMsgRepository implements IReferenceMessagesRepository {
const index = os.index('by_msg')
for (const msgId of msgIds) {
const keys = await reqToPromise(index.getAllKeys([chatId, msgId]))
const keys = await reqToPromise<IDBValidKey[]>(index.getAllKeys([chatId, msgId]))
// there are never that many keys, so we can avoid using cursor
for (const key of keys) {
@ -64,12 +72,12 @@ export class IdbRefMsgRepository implements IReferenceMessagesRepository {
const req = index.openCursor(peerId)
let cursor = await reqToPromise(req)
let cursor = await reqToPromise<IDBCursorWithValue | null>(req)
while (cursor) {
cursor.delete()
cursor.continue()
cursor = await reqToPromise(req)
cursor = await reqToPromise<IDBCursorWithValue | null>(req)
}
return txToPromise(tx)

View file

@ -1,3 +1,8 @@
// <deno-insert>
// declare type IDBTransaction = any
// declare type IDBRequest<T> = { result: T, onsuccess?: (ev: any) => void, onerror?: (ev: any) => void, error?: any }
// </deno-insert>
export function txToPromise(tx: IDBTransaction): Promise<void> {
return new Promise((resolve, reject) => {
tx.oncomplete = () => resolve()

View file

@ -3,6 +3,10 @@ import type { ICorePlatform } from '@mtcute/core'
import { defaultLoggingHandler } from './common-internals-web/logging.js'
import { beforeExit } from './exit-hook.js'
// <deno-insert>
// declare const navigator: (typeof globalThis)['navigator'] & { onLine: boolean }
// </deno-insert>
export class WebPlatform implements ICorePlatform {
// ICorePlatform
declare log: typeof defaultLoggingHandler
@ -40,7 +44,7 @@ export class WebPlatform implements ICorePlatform {
}
isOnline(): boolean {
return navigator.onLine
return navigator.onLine ?? false
}
}

View file

@ -21,6 +21,14 @@ export interface TelegramWorkerPortOptions {
}
let _registered = false
// <deno-insert>
// declare const WorkerGlobalScope: any
// declare const self: typeof globalThis & {
// postMessage: Function,
// addEventListener: (type: 'message', listener: (ev: MessageEvent) => void) => void,
// }
// </deno-insert>
export class TelegramWorker<T extends WorkerCustomMethods> extends TelegramWorkerBase<T> {
registerWorker(handler: WorkerMessageHandler): RespondFn {
if (_registered) {
@ -29,6 +37,7 @@ export class TelegramWorker<T extends WorkerCustomMethods> extends TelegramWorke
_registered = true
// <deno-remove>
if (typeof SharedWorkerGlobalScope !== 'undefined' && self instanceof SharedWorkerGlobalScope) {
const connections: MessagePort[] = []
@ -89,6 +98,7 @@ export class TelegramWorker<T extends WorkerCustomMethods> extends TelegramWorke
return broadcast
}
// </deno-remove>
if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {
const respond: RespondFn = self.postMessage.bind(self)
@ -132,6 +142,7 @@ export class TelegramWorkerPort<T extends WorkerCustomMethods> extends TelegramW
]
}
// <deno-remove>
if (worker instanceof SharedWorker) {
const send: SendFn = worker.port.postMessage.bind(worker.port)
@ -171,6 +182,7 @@ export class TelegramWorkerPort<T extends WorkerCustomMethods> extends TelegramW
return [send, close]
}
// </deno-remove>
throw new Error('Only workers and shared workers are supported')
}

View file

@ -15,8 +15,8 @@ importers:
specifier: ^3.11.2
version: 3.11.2(@typescript-eslint/utils@8.17.0(eslint@9.9.0)(typescript@5.5.4))(@vue/compiler-sfc@3.5.13)(eslint@9.9.0)(typescript@5.5.4)(vitest@2.0.5(@types/node@20.10.0)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5))
'@fuman/build':
specifier: https://pkg.pr.new/teidesu/fuman/@fuman/build@2a71d4a
version: https://pkg.pr.new/teidesu/fuman/@fuman/build@2a71d4a(tough-cookie@4.1.4)(typedoc@0.27.6(typescript@5.5.4))(typescript@5.5.4)(vite@5.4.2(@types/node@20.10.0))
specifier: https://pkg.pr.new/teidesu/fuman/@fuman/build@c073041
version: https://pkg.pr.new/teidesu/fuman/@fuman/build@c073041(tough-cookie@4.1.4)(typedoc@0.27.6(typescript@5.5.4))(typescript@5.5.4)(vite@5.4.2(@types/node@20.10.0))
'@fuman/utils':
specifier: 0.0.4
version: 0.0.4
@ -135,9 +135,6 @@ importers:
'@types/node':
specifier: ^20.8.10
version: 20.10.0
globstar:
specifier: 1.0.0
version: 1.0.0
packages/bun:
dependencies:
@ -1109,8 +1106,8 @@ packages:
resolution: {integrity: sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@fuman/build@https://pkg.pr.new/teidesu/fuman/@fuman/build@2a71d4a':
resolution: {tarball: https://pkg.pr.new/teidesu/fuman/@fuman/build@2a71d4a}
'@fuman/build@https://pkg.pr.new/teidesu/fuman/@fuman/build@c073041':
resolution: {tarball: https://pkg.pr.new/teidesu/fuman/@fuman/build@c073041}
version: 0.0.7
hasBin: true
peerDependencies:
@ -1144,8 +1141,8 @@ packages:
zod:
optional: true
'@fuman/fetch@https://pkg.pr.new/teidesu/fuman/@fuman/fetch@2a71d4a94740d27040f00010b8b830ccb7ca4ce3':
resolution: {tarball: https://pkg.pr.new/teidesu/fuman/@fuman/fetch@2a71d4a94740d27040f00010b8b830ccb7ca4ce3}
'@fuman/fetch@https://pkg.pr.new/teidesu/fuman/@fuman/fetch@c0730413e863fa6ba6c7f1750fbee3c018e8f610':
resolution: {tarball: https://pkg.pr.new/teidesu/fuman/@fuman/fetch@c0730413e863fa6ba6c7f1750fbee3c018e8f610}
version: 0.0.7
peerDependencies:
'@badrap/valita': '>=0.4.0'
@ -1805,10 +1802,6 @@ packages:
resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
engines: {node: '>=8'}
ansi-regex@2.1.1:
resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
engines: {node: '>=0.10.0'}
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
@ -1829,17 +1822,10 @@ packages:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'}
ansi@0.3.1:
resolution: {integrity: sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A==}
are-docs-informative@0.0.2:
resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==}
engines: {node: '>=14'}
are-we-there-yet@1.0.6:
resolution: {integrity: sha512-Zfw6bteqM9gQXZ1BIWOgM8xEwMrUGoyL8nW13+O+OOgNX3YhuDN1GDgg1NzdTlmm3j+9sHy7uBZ12r+z9lXnZQ==}
deprecated: This package is no longer supported.
argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
@ -1962,10 +1948,6 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
camelcase@2.1.1:
resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==}
engines: {node: '>=0.10.0'}
caniuse-lite@1.0.30001680:
resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==}
@ -2041,9 +2023,6 @@ packages:
resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
engines: {node: '>= 12'}
cliui@3.2.0:
resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==}
cliui@8.0.1:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
@ -2052,10 +2031,6 @@ packages:
resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
engines: {node: '>=0.8'}
code-point-at@1.1.0:
resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==}
engines: {node: '>=0.10.0'}
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
@ -2162,10 +2137,6 @@ packages:
supports-color:
optional: true
decamelize@1.2.0:
resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
engines: {node: '>=0.10.0'}
decode-named-character-reference@1.0.2:
resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
@ -2199,9 +2170,6 @@ packages:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
delegates@1.0.0:
resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
@ -2656,10 +2624,6 @@ packages:
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
gauge@1.2.7:
resolution: {integrity: sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==}
deprecated: This package is no longer supported.
get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
@ -2698,10 +2662,6 @@ packages:
engines: {node: 20 || >=22}
hasBin: true
glob@5.0.15:
resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==}
deprecated: Glob versions prior to v9 are no longer supported
globals@13.24.0:
resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
engines: {node: '>=8'}
@ -2714,10 +2674,6 @@ packages:
resolution: {integrity: sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==}
engines: {node: '>=18'}
globstar@1.0.0:
resolution: {integrity: sha512-UNXhfJYrwD6DNxMU4C9GJI1NhCMNvdsFnAGPLJHAeGW1io9l3N2FN7UUH76gQXhAUGNY+1rsVSkQnU59VRvxuQ==}
hasBin: true
gopd@1.0.1:
resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
@ -2755,9 +2711,6 @@ packages:
resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
engines: {node: '>= 0.4'}
has-unicode@2.0.1:
resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
hash-base@3.0.4:
resolution: {integrity: sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==}
engines: {node: '>=4'}
@ -2825,10 +2778,6 @@ packages:
resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
engines: {node: '>=8'}
inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
@ -2839,10 +2788,6 @@ packages:
resolution: {integrity: sha512-B2LafrnnhbRzCWfAdOXisUzL89Kg8cVJlYmhqoi3flSiV/TveO+nsXwgKr9h9PIo+J1hz7nBSk6gegRIMBBf7g==}
engines: {node: '>=14.18.0'}
invert-kv@1.0.0:
resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==}
engines: {node: '>=0.10.0'}
is-arguments@1.1.1:
resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
engines: {node: '>= 0.4'}
@ -2866,10 +2811,6 @@ packages:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
is-fullwidth-code-point@1.0.0:
resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==}
engines: {node: '>=0.10.0'}
is-fullwidth-code-point@3.0.0:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
@ -3004,10 +2945,6 @@ packages:
kolorist@1.8.0:
resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
lcid@1.0.0:
resolution: {integrity: sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==}
engines: {node: '>=0.10.0'}
levn@0.4.1:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
@ -3037,15 +2974,6 @@ packages:
lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
lodash.pad@4.5.1:
resolution: {integrity: sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg==}
lodash.padend@4.6.1:
resolution: {integrity: sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==}
lodash.padstart@4.6.1:
resolution: {integrity: sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==}
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
@ -3355,21 +3283,9 @@ packages:
resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
npmlog@1.2.1:
resolution: {integrity: sha512-1J5KqSRvESP6XbjPaXt2H6qDzgizLTM7x0y1cXIjP2PpvdCqyNC7TO3cPRKsuYlElbi/DwkzRRdG2zpmE0IktQ==}
deprecated: This package is no longer supported.
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
number-is-nan@1.0.1:
resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==}
engines: {node: '>=0.10.0'}
object-assign@2.1.1:
resolution: {integrity: sha512-CdsOUYIh5wIiozhJ3rLQgmUTgcyzFwZZrqhkKhODMoGtPKM+wt0h0CNIoauJWMsS9822EdzPsF/6mb4nLvPN5g==}
engines: {node: '>=0.10.0'}
object-inspect@1.13.3:
resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==}
engines: {node: '>= 0.4'}
@ -3389,10 +3305,6 @@ packages:
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
onetime@1.1.0:
resolution: {integrity: sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A==}
engines: {node: '>=0.10.0'}
onetime@5.1.2:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
@ -3415,10 +3327,6 @@ packages:
os-browserify@0.3.0:
resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==}
os-locale@1.4.0:
resolution: {integrity: sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==}
engines: {node: '>=0.10.0'}
os-tmpdir@1.0.2:
resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
engines: {node: '>=0.10.0'}
@ -3488,10 +3396,6 @@ packages:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
@ -3870,10 +3774,6 @@ packages:
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
engines: {node: '>=0.6.19'}
string-width@1.0.2:
resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==}
engines: {node: '>=0.10.0'}
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
@ -3888,10 +3788,6 @@ packages:
string_decoder@1.3.0:
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
strip-ansi@3.0.1:
resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
engines: {node: '>=0.10.0'}
strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
@ -4239,11 +4135,6 @@ packages:
engines: {node: '>=8'}
hasBin: true
window-size@0.1.4:
resolution: {integrity: sha512-2thx4pB0cV3h+Bw7QmMXcEbdmOzv9t0HFplJH/Lz6yu60hXYy5RT8rUu+wlIreVxWsGN20mo+MHeCSfUpQBwPw==}
engines: {node: '>= 0.10.0'}
hasBin: true
word-wrap@1.2.5:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
@ -4251,10 +4142,6 @@ packages:
wordwrap@1.0.0:
resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
wrap-ansi@2.1.0:
resolution: {integrity: sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==}
engines: {node: '>=0.10.0'}
wrap-ansi@6.2.0:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'}
@ -4302,9 +4189,6 @@ packages:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'}
y18n@3.2.2:
resolution: {integrity: sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==}
y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
@ -4334,9 +4218,6 @@ packages:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
yargs@3.32.0:
resolution: {integrity: sha512-ONJZiimStfZzhKamYvR/xvmgW3uEkAUFSP91y2caTEPhzF6uP2JfPiVZcq66b/YR0C3uitxSV7+T1x8p5bkmMg==}
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
@ -4743,10 +4624,10 @@ snapshots:
dependencies:
levn: 0.4.1
'@fuman/build@https://pkg.pr.new/teidesu/fuman/@fuman/build@2a71d4a(tough-cookie@4.1.4)(typedoc@0.27.6(typescript@5.5.4))(typescript@5.5.4)(vite@5.4.2(@types/node@20.10.0))':
'@fuman/build@https://pkg.pr.new/teidesu/fuman/@fuman/build@c073041(tough-cookie@4.1.4)(typedoc@0.27.6(typescript@5.5.4))(typescript@5.5.4)(vite@5.4.2(@types/node@20.10.0))':
dependencies:
'@drizzle-team/brocli': 0.10.2
'@fuman/fetch': https://pkg.pr.new/teidesu/fuman/@fuman/fetch@2a71d4a94740d27040f00010b8b830ccb7ca4ce3(tough-cookie@4.1.4)(zod@3.23.8)
'@fuman/fetch': https://pkg.pr.new/teidesu/fuman/@fuman/fetch@c0730413e863fa6ba6c7f1750fbee3c018e8f610(tough-cookie@4.1.4)(zod@3.23.8)
'@fuman/io': 0.0.4
'@fuman/node': 0.0.4
'@fuman/utils': 0.0.4
@ -4780,7 +4661,7 @@ snapshots:
tough-cookie: 4.1.4
zod: 3.23.8
'@fuman/fetch@https://pkg.pr.new/teidesu/fuman/@fuman/fetch@2a71d4a94740d27040f00010b8b830ccb7ca4ce3(tough-cookie@4.1.4)(zod@3.23.8)':
'@fuman/fetch@https://pkg.pr.new/teidesu/fuman/@fuman/fetch@c0730413e863fa6ba6c7f1750fbee3c018e8f610(tough-cookie@4.1.4)(zod@3.23.8)':
dependencies:
'@fuman/utils': 0.0.4
optionalDependencies:
@ -5562,8 +5443,6 @@ snapshots:
dependencies:
type-fest: 0.21.3
ansi-regex@2.1.1: {}
ansi-regex@5.0.1: {}
ansi-regex@6.1.0: {}
@ -5576,15 +5455,8 @@ snapshots:
ansi-styles@6.2.1: {}
ansi@0.3.1: {}
are-docs-informative@0.0.2: {}
are-we-there-yet@1.0.6:
dependencies:
delegates: 1.0.0
readable-stream: 2.3.8
argparse@1.0.10:
dependencies:
sprintf-js: 1.0.3
@ -5746,8 +5618,6 @@ snapshots:
callsites@3.1.0: {}
camelcase@2.1.1: {}
caniuse-lite@1.0.30001680: {}
ccount@2.0.1: {}
@ -5837,12 +5707,6 @@ snapshots:
cli-width@4.1.0: {}
cliui@3.2.0:
dependencies:
string-width: 1.0.2
strip-ansi: 3.0.1
wrap-ansi: 2.1.0
cliui@8.0.1:
dependencies:
string-width: 4.2.3
@ -5851,8 +5715,6 @@ snapshots:
clone@1.0.4: {}
code-point-at@1.1.0: {}
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
@ -5963,8 +5825,6 @@ snapshots:
dependencies:
ms: 2.1.3
decamelize@1.2.0: {}
decode-named-character-reference@1.0.2:
dependencies:
character-entities: 2.0.2
@ -5999,8 +5859,6 @@ snapshots:
has-property-descriptors: 1.0.2
object-keys: 1.1.1
delegates@1.0.0: {}
dequal@2.0.3: {}
des.js@1.1.0:
@ -6625,14 +6483,6 @@ snapshots:
function-bind@1.1.2: {}
gauge@1.2.7:
dependencies:
ansi: 0.3.1
has-unicode: 2.0.1
lodash.pad: 4.5.1
lodash.padend: 4.6.1
lodash.padstart: 4.6.1
get-caller-file@2.0.5: {}
get-func-name@2.0.2: {}
@ -6679,14 +6529,6 @@ snapshots:
package-json-from-dist: 1.0.1
path-scurry: 2.0.0
glob@5.0.15:
dependencies:
inflight: 1.0.6
inherits: 2.0.4
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
globals@13.24.0:
dependencies:
type-fest: 0.20.2
@ -6695,14 +6537,6 @@ snapshots:
globals@15.12.0: {}
globstar@1.0.0:
dependencies:
glob: 5.0.15
npmlog: 1.2.1
object-assign: 2.1.1
onetime: 1.1.0
yargs: 3.32.0
gopd@1.0.1:
dependencies:
get-intrinsic: 1.2.4
@ -6736,8 +6570,6 @@ snapshots:
dependencies:
has-symbols: 1.0.3
has-unicode@2.0.1: {}
hash-base@3.0.4:
dependencies:
inherits: 2.0.4
@ -6803,11 +6635,6 @@ snapshots:
indent-string@4.0.0: {}
inflight@1.0.6:
dependencies:
once: 1.4.0
wrappy: 1.0.2
inherits@2.0.4: {}
ini@1.3.8: {}
@ -6830,8 +6657,6 @@ snapshots:
strip-ansi: 6.0.1
wrap-ansi: 6.2.0
invert-kv@1.0.0: {}
is-arguments@1.1.1:
dependencies:
call-bind: 1.0.7
@ -6851,10 +6676,6 @@ snapshots:
is-extglob@2.1.1: {}
is-fullwidth-code-point@1.0.0:
dependencies:
number-is-nan: 1.0.1
is-fullwidth-code-point@3.0.0: {}
is-generator-function@1.0.10:
@ -6972,10 +6793,6 @@ snapshots:
kolorist@1.8.0: {}
lcid@1.0.0:
dependencies:
invert-kv: 1.0.0
levn@0.4.1:
dependencies:
prelude-ls: 1.2.1
@ -7007,12 +6824,6 @@ snapshots:
lodash.merge@4.6.2: {}
lodash.pad@4.5.1: {}
lodash.padend@4.6.1: {}
lodash.padstart@4.6.1: {}
lodash@4.17.21: {}
log-symbols@4.1.0:
@ -7517,20 +7328,10 @@ snapshots:
dependencies:
path-key: 4.0.0
npmlog@1.2.1:
dependencies:
ansi: 0.3.1
are-we-there-yet: 1.0.6
gauge: 1.2.7
nth-check@2.1.1:
dependencies:
boolbase: 1.0.0
number-is-nan@1.0.1: {}
object-assign@2.1.1: {}
object-inspect@1.13.3: {}
object-is@1.1.6:
@ -7551,8 +7352,6 @@ snapshots:
dependencies:
wrappy: 1.0.2
onetime@1.1.0: {}
onetime@5.1.2:
dependencies:
mimic-fn: 2.1.0
@ -7586,10 +7385,6 @@ snapshots:
os-browserify@0.3.0: {}
os-locale@1.4.0:
dependencies:
lcid: 1.0.0
os-tmpdir@1.0.2: {}
outvariant@1.4.3: {}
@ -7658,8 +7453,6 @@ snapshots:
path-exists@4.0.0: {}
path-is-absolute@1.0.1: {}
path-key@3.1.1: {}
path-key@4.0.0: {}
@ -8055,12 +7848,6 @@ snapshots:
string-argv@0.3.2: {}
string-width@1.0.2:
dependencies:
code-point-at: 1.1.0
is-fullwidth-code-point: 1.0.0
strip-ansi: 3.0.1
string-width@4.2.3:
dependencies:
emoji-regex: 8.0.0
@ -8081,10 +7868,6 @@ snapshots:
dependencies:
safe-buffer: 5.2.1
strip-ansi@3.0.1:
dependencies:
ansi-regex: 2.1.1
strip-ansi@6.0.1:
dependencies:
ansi-regex: 5.0.1
@ -8444,17 +8227,10 @@ snapshots:
siginfo: 2.0.0
stackback: 0.0.2
window-size@0.1.4: {}
word-wrap@1.2.5: {}
wordwrap@1.0.0: {}
wrap-ansi@2.1.0:
dependencies:
string-width: 1.0.2
strip-ansi: 3.0.1
wrap-ansi@6.2.0:
dependencies:
ansi-styles: 4.3.0
@ -8483,8 +8259,6 @@ snapshots:
xtend@4.0.2: {}
y18n@3.2.2: {}
y18n@5.0.8: {}
yallist@4.0.0: {}
@ -8511,16 +8285,6 @@ snapshots:
y18n: 5.0.8
yargs-parser: 21.1.1
yargs@3.32.0:
dependencies:
camelcase: 2.1.1
cliui: 3.2.0
decamelize: 1.2.0
os-locale: 1.4.0
string-width: 1.0.2
window-size: 0.1.4
y18n: 3.2.2
yocto-queue@0.1.0: {}
yoctocolors-cjs@2.1.2: {}

View file

@ -20,6 +20,7 @@
"strict": true,
"noImplicitAny": true,
"noImplicitThis": true,
"noImplicitOverride": true,
"declaration": true,
"inlineSources": true,
"noEmit": true,