feat(client): output parameters with defaults as optional and include their default value in docs
This commit is contained in:
parent
383f133292
commit
f4907639b5
3 changed files with 65 additions and 21 deletions
|
@ -284,6 +284,8 @@ async function main() {
|
||||||
output.untab()
|
output.untab()
|
||||||
output.write('}\n')
|
output.write('}\n')
|
||||||
|
|
||||||
|
const printer = ts.createPrinter()
|
||||||
|
|
||||||
state.methods.list.forEach(({ name, isPrivate, func, comment }) => {
|
state.methods.list.forEach(({ name, isPrivate, func, comment }) => {
|
||||||
// create method that calls that function and passes `this`
|
// create method that calls that function and passes `this`
|
||||||
// first let's determine the signature
|
// first let's determine the signature
|
||||||
|
@ -296,10 +298,55 @@ async function main() {
|
||||||
const rawParams = (func.parameters || []).filter(
|
const rawParams = (func.parameters || []).filter(
|
||||||
(it) => !it.type || it.type.getText() !== 'TelegramClient'
|
(it) => !it.type || it.type.getText() !== 'TelegramClient'
|
||||||
)
|
)
|
||||||
const parameters = rawParams.map((it) => it.getFullText()).join(', ')
|
const parameters = rawParams
|
||||||
|
.map((it) => {
|
||||||
|
if (it.initializer) {
|
||||||
|
// has default value
|
||||||
|
it._savedDefault = it.initializer.getFullText()
|
||||||
|
if (!it.type) {
|
||||||
|
// no explicit type.
|
||||||
|
// infer from initializer
|
||||||
|
if (
|
||||||
|
it.initializer.kind === ts.SyntaxKind.TrueKeyword ||
|
||||||
|
it.initializer.kind === ts.SyntaxKind.FalseKeyword
|
||||||
|
) {
|
||||||
|
it.type = { kind: ts.SyntaxKind.BooleanKeyword }
|
||||||
|
} else if (
|
||||||
|
it.initializer.kind === ts.SyntaxKind.StringLiteral
|
||||||
|
) {
|
||||||
|
it.type = { kind: ts.SyntaxKind.StringKeyword }
|
||||||
|
} else if (
|
||||||
|
it.initializer.kind ===
|
||||||
|
ts.SyntaxKind.NumericLiteral ||
|
||||||
|
(it.initializer.kind === ts.SyntaxKind.Identifier &&
|
||||||
|
it.initializer.escapedText === 'NaN')
|
||||||
|
) {
|
||||||
|
it.type = { kind: ts.SyntaxKind.NumberKeyword }
|
||||||
|
} else {
|
||||||
|
throwError(
|
||||||
|
it,
|
||||||
|
state.methods.used[name],
|
||||||
|
'Cannot infer parameter type'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
it.initializer = undefined
|
||||||
|
it.questionToken = { kind: ts.SyntaxKind.QuestionToken }
|
||||||
|
return printer.printNode(ts.EmitHint.Unspecified, it)
|
||||||
|
}
|
||||||
|
|
||||||
// write comment, but remove @internal mark
|
return it.getFullText()
|
||||||
comment = comment.replace(/(\n^|\/\*)\s*\*\s*@internal.*/m, '')
|
}).join(', ')
|
||||||
|
|
||||||
|
// write comment, but remove @internal mark and set default values for parameters
|
||||||
|
comment = comment
|
||||||
|
.replace(/(\n^|\/\*)\s*\*\s*@internal.*/m, '')
|
||||||
|
.replace(/((?:\n^|\/\*)\s*\*\s*@param )([^\s]+?)($|\s+)/gm, (_, pref, arg, post) => {
|
||||||
|
const param = rawParams.find(it => it.name.escapedText === arg)
|
||||||
|
if (!param) return _
|
||||||
|
if (!param._savedDefault) return _
|
||||||
|
return `${pref}${arg}${post}(default: \`${param._savedDefault.trim()}\`) `
|
||||||
|
})
|
||||||
if (!comment.match(/\/\*\*?\s*\*\//))
|
if (!comment.match(/\/\*\*?\s*\*\//))
|
||||||
// empty comment, no need to write it
|
// empty comment, no need to write it
|
||||||
output.write(comment)
|
output.write(comment)
|
||||||
|
|
|
@ -137,10 +137,10 @@ export class TelegramClient extends BaseTelegramClient {
|
||||||
* When you log out, you can immediately log back in using
|
* When you log out, you can immediately log back in using
|
||||||
* the same {@link TelegramClient} instance.
|
* the same {@link TelegramClient} instance.
|
||||||
*
|
*
|
||||||
* @param resetSession Whether to reset the session
|
* @param resetSession (default: `false`) Whether to reset the session
|
||||||
* @returns On success, `true` is returned
|
* @returns On success, `true` is returned
|
||||||
*/
|
*/
|
||||||
logOut(resetSession = false): Promise<true> {
|
logOut(resetSession?: boolean): Promise<true> {
|
||||||
return logOut.apply(this, arguments)
|
return logOut.apply(this, arguments)
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -219,13 +219,13 @@ export class TelegramClient extends BaseTelegramClient {
|
||||||
* @param phone Phone number in international format
|
* @param phone Phone number in international format
|
||||||
* @param phoneCodeHash Code identifier from {@link TelegramClient.sendCode}
|
* @param phoneCodeHash Code identifier from {@link TelegramClient.sendCode}
|
||||||
* @param firstName New user's first name
|
* @param firstName New user's first name
|
||||||
* @param lastName New user's last name
|
* @param lastName (default: `''`) New user's last name
|
||||||
*/
|
*/
|
||||||
signUp(
|
signUp(
|
||||||
phone: string,
|
phone: string,
|
||||||
phoneCodeHash: string,
|
phoneCodeHash: string,
|
||||||
firstName: string,
|
firstName: string,
|
||||||
lastName = ''
|
lastName?: string
|
||||||
): Promise<User> {
|
): Promise<User> {
|
||||||
return signUp.apply(this, arguments)
|
return signUp.apply(this, arguments)
|
||||||
}
|
}
|
||||||
|
@ -479,12 +479,12 @@ export class TelegramClient extends BaseTelegramClient {
|
||||||
*
|
*
|
||||||
* @param chatId Chat's marked ID, its username, phone or `"me"` or `"self"`.
|
* @param chatId Chat's marked ID, its username, phone or `"me"` or `"self"`.
|
||||||
* @param ids Message(s) ID(s) to delete.
|
* @param ids Message(s) ID(s) to delete.
|
||||||
* @param revoke Whether to "revoke" (i.e. delete for both sides). Only used for chats and private chats.
|
* @param revoke (default: `true`) Whether to "revoke" (i.e. delete for both sides). Only used for chats and private chats.
|
||||||
*/
|
*/
|
||||||
deleteMessages(
|
deleteMessages(
|
||||||
chatId: InputPeerLike,
|
chatId: InputPeerLike,
|
||||||
ids: MaybeArray<number>,
|
ids: MaybeArray<number>,
|
||||||
revoke = true
|
revoke?: boolean
|
||||||
): Promise<boolean> {
|
): Promise<boolean> {
|
||||||
return deleteMessages.apply(this, arguments)
|
return deleteMessages.apply(this, arguments)
|
||||||
}
|
}
|
||||||
|
@ -537,7 +537,7 @@ export class TelegramClient extends BaseTelegramClient {
|
||||||
|
|
||||||
protected _findMessageInUpdate(
|
protected _findMessageInUpdate(
|
||||||
res: tl.TypeUpdates,
|
res: tl.TypeUpdates,
|
||||||
isEdit = false
|
isEdit?: boolean
|
||||||
): Message {
|
): Message {
|
||||||
return _findMessageInUpdate.apply(this, arguments)
|
return _findMessageInUpdate.apply(this, arguments)
|
||||||
}
|
}
|
||||||
|
@ -625,7 +625,7 @@ export class TelegramClient extends BaseTelegramClient {
|
||||||
getMessages(
|
getMessages(
|
||||||
chatId: InputPeerLike,
|
chatId: InputPeerLike,
|
||||||
messageIds: MaybeArray<number>,
|
messageIds: MaybeArray<number>,
|
||||||
fromReply = false
|
fromReply?: boolean
|
||||||
): Promise<MaybeArray<Message>> {
|
): Promise<MaybeArray<Message>> {
|
||||||
return getMessages.apply(this, arguments)
|
return getMessages.apply(this, arguments)
|
||||||
}
|
}
|
||||||
|
@ -1062,13 +1062,10 @@ export class TelegramClient extends BaseTelegramClient {
|
||||||
* mode is also set as default.
|
* mode is also set as default.
|
||||||
*
|
*
|
||||||
* @param parseMode Parse mode to register
|
* @param parseMode Parse mode to register
|
||||||
* @param name Parse mode name. By default is taken from the object.
|
* @param name (default: `parseMode.name`) Parse mode name. By default is taken from the object.
|
||||||
* @throws MtCuteError When the parse mode with a given name is already registered.
|
* @throws MtCuteError When the parse mode with a given name is already registered.
|
||||||
*/
|
*/
|
||||||
registerParseMode(
|
registerParseMode(parseMode: IMessageEntityParser, name?: string): void {
|
||||||
parseMode: IMessageEntityParser,
|
|
||||||
name = parseMode.name
|
|
||||||
): void {
|
|
||||||
return registerParseMode.apply(this, arguments)
|
return registerParseMode.apply(this, arguments)
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -1119,9 +1116,9 @@ export class TelegramClient extends BaseTelegramClient {
|
||||||
* Add an update handler to a given handlers group
|
* Add an update handler to a given handlers group
|
||||||
*
|
*
|
||||||
* @param handler Update handler
|
* @param handler Update handler
|
||||||
* @param group Handler group index
|
* @param group (default: `0`) Handler group index
|
||||||
*/
|
*/
|
||||||
addUpdateHandler(handler: UpdateHandler, group = 0): void {
|
addUpdateHandler(handler: UpdateHandler, group?: number): void {
|
||||||
return addUpdateHandler.apply(this, arguments)
|
return addUpdateHandler.apply(this, arguments)
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -1129,11 +1126,11 @@ export class TelegramClient extends BaseTelegramClient {
|
||||||
* handler group.
|
* handler group.
|
||||||
*
|
*
|
||||||
* @param handler Update handler to remove, its type or `'all'` to remove all
|
* @param handler Update handler to remove, its type or `'all'` to remove all
|
||||||
* @param group Handler group index
|
* @param group (default: `0`) Handler group index
|
||||||
*/
|
*/
|
||||||
removeUpdateHandler(
|
removeUpdateHandler(
|
||||||
handler: UpdateHandler | UpdateHandler['type'] | 'all',
|
handler: UpdateHandler | UpdateHandler['type'] | 'all',
|
||||||
group = 0
|
group?: number
|
||||||
): void {
|
): void {
|
||||||
return removeUpdateHandler.apply(this, arguments)
|
return removeUpdateHandler.apply(this, arguments)
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ import { MtCuteError } from '../../types'
|
||||||
export function registerParseMode(
|
export function registerParseMode(
|
||||||
this: TelegramClient,
|
this: TelegramClient,
|
||||||
parseMode: IMessageEntityParser,
|
parseMode: IMessageEntityParser,
|
||||||
name = parseMode.name
|
name: string = parseMode.name
|
||||||
): void {
|
): void {
|
||||||
if (name in this._parseModes) {
|
if (name in this._parseModes) {
|
||||||
throw new MtCuteError(
|
throw new MtCuteError(
|
||||||
|
|
Loading…
Reference in a new issue