build: prepare to publish x3

various package json fixes, improved node meta-package
This commit is contained in:
teidesu 2021-06-07 18:32:29 +03:00
parent 21d69e466e
commit 8cbd6e14c8
3 changed files with 68 additions and 6 deletions

View file

@ -12,6 +12,7 @@
"docs": "npx typedoc"
},
"dependencies": {
"@types/node": "^15.12.1",
"@types/events": "^3.0.0",
"@mtcute/tl": "~1.129.0",
"leemon": "6.2.0",
@ -23,8 +24,5 @@
"devDependencies": {
"@types/ws": "^7.4.1",
"ws": "^7.4.4"
},
"peerDependencies": {
"@types/node": "^15.12.1"
}
}

View file

@ -1,11 +1,13 @@
import { TelegramClient } from '@mtcute/client'
import { TelegramClient, User } from '@mtcute/client'
import { BaseTelegramClient } from '@mtcute/core'
import { NodeNativeCryptoProvider } from '@mtcute/crypto-node'
import { HtmlMessageEntityParser } from '@mtcute/html-parser'
import { MarkdownMessageEntityParser } from '@mtcute/markdown-parser'
import { SqliteStorage } from '@mtcute/sqlite'
import { createInterface, Interface as RlInterface } from 'readline'
export * from '@mtcute/dispatcher'
export { SqliteStorage }
export namespace NodeTelegramClient {
export interface Options
@ -33,6 +35,25 @@ export namespace NodeTelegramClient {
}
}
let rl: RlInterface | null = null
/**
* Tiny wrapper over Node `readline` package
* for simpler user input for `.run()` method
*
* @param text Text of the question
*/
export const input = (text: string): Promise<string> => {
if (!rl) {
rl = createInterface({
input: process.stdin,
output: process.stdout,
})
}
return new Promise((res) => rl!.question(text, res))
}
/**
* Tiny wrapper over `TelegramClient` for usage inside Node JS.
*
@ -55,4 +76,15 @@ export class NodeTelegramClient extends TelegramClient {
if (opts.defaultParseMode)
this.setDefaultParseMode(opts.defaultParseMode)
}
run(
params: Parameters<TelegramClient['start']>[0],
then?: (user: User) => void | Promise<void>
): void {
if (!params.phone) params.phone = () => input('Phone > ')
if (!params.code) params.code = () => input('Code > ')
if (!params.password) params.password = () => input('2FA password > ')
return super.run(params, then)
}
}

View file

@ -85,18 +85,50 @@ function publishSinglePackage(name) {
if (name === 'client') {
// make TelegramClient a class, not an interface
const content = fs.readFileSync(
const dTsContent = fs.readFileSync(
path.join(dir, 'dist/client.d.ts'),
'utf8'
)
fs.writeFileSync(
path.join(dir, 'dist/client.d.ts'),
content.replace(
dTsContent.replace(
'export interface TelegramClient',
'export class TelegramClient'
)
)
// make methods prototype methods, not properties
let jsContent = fs.readFileSync(
path.join(dir, 'dist/client.js'),
'utf8'
)
let methods = []
jsContent = jsContent.replace(
/^\s*this\.([a-zA-Z0-9_]+) = ([a-zA-Z0-9_]+\.[a-zA-Z0-9_]+);\r?\n/gm,
(_, name, imported) => {
methods.push(
`TelegramClient.prototype.${name} = ${imported};`
)
return ''
}
)
const idx = jsContent.indexOf(
'exports.TelegramClient = TelegramClient;'
)
if (idx === -1)
throw new Error('client.js exports.TelegramClient not found')
jsContent =
jsContent.substr(0, idx) +
methods.join('\n') +
'\n' +
jsContent.substr(idx)
fs.writeFileSync(path.join(dir, 'dist/client.js'), jsContent)
}
if (name === 'crypto-node') {