Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 43235d4

Browse files
Qjuhkodiakhq[bot]Jiralite
committed
feat(website): type parameters links, builtin doc links, default values (#10515)
* feat(website): links to type parameters, builtin doc links in api.json * feat(website): show default values for params and props in excerpt * fix: link in jsdoc --------- Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> Co-authored-by: Jiralite <[email protected]>
1 parent 31df3d2 commit 43235d4

11 files changed

Lines changed: 219 additions & 21 deletions

File tree

apps/website/src/components/ParameterNode.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export async function ParameterNode({
2929
{description ? <Badges node={parameter} /> : null}
3030
{parameter.name}
3131
{parameter.isOptional ? '?' : ''}: <ExcerptNode node={parameter.typeExcerpt} version={version} />
32+
{parameter.defaultValue ? ` = ${parameter.defaultValue}` : ''}
3233
</span>
3334
{description && parameter.description?.length ? (
3435
<div className="mt-4 pl-4">

apps/website/src/components/PropertyNode.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,13 @@ export async function PropertyNode({
5151
<LinkIcon aria-hidden size={16} />
5252
</Link>
5353
{property.displayName}
54-
{property.isOptional ? '?' : ''} : <ExcerptNode node={property.typeExcerpt} version={version} />
54+
{property.isOptional ? '?' : ''} : <ExcerptNode node={property.typeExcerpt} version={version} />{' '}
55+
{property.summary?.defaultValueBlock.length
56+
? `= ${property.summary.defaultValueBlock.reduce(
57+
(acc: string, def: { kind: string; text: string }) => `${acc}${def.text}`,
58+
'',
59+
)}`
60+
: ''}
5561
</span>
5662
</h3>
5763

packages/api-extractor-model/src/mixins/ApiParameterListMixin.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import type { IExcerptTokenRange } from './Excerpt.js';
1414
* @public
1515
*/
1616
export interface IApiParameterOptions {
17+
defaultValue: string | undefined;
1718
isOptional: boolean;
1819
isRest: boolean;
1920
parameterName: string;
@@ -124,6 +125,7 @@ export function ApiParameterListMixin<TBaseClass extends IApiItemConstructor>(
124125
isOptional: Boolean(parameterOptions.isOptional),
125126
isRest: Boolean(parameterOptions.isRest),
126127
parent: this,
128+
defaultValue: parameterOptions.defaultValue,
127129
});
128130

129131
this[_parameters].push(parameter);
@@ -171,6 +173,7 @@ export function ApiParameterListMixin<TBaseClass extends IApiItemConstructor>(
171173
parameterTypeTokenRange: parameter.parameterTypeExcerpt.tokenRange,
172174
isOptional: parameter.isOptional,
173175
isRest: parameter.isRest,
176+
defaultValue: parameter.defaultValue,
174177
});
175178
}
176179

packages/api-extractor-model/src/model/ApiPackage.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ const MinifyJSONMapping = {
4141
constraintTokenRange: 'ctr',
4242
dependencies: 'dp',
4343
defaultTypeTokenRange: 'dtr',
44+
defaultValue: 'dv',
4445
docComment: 'd',
4546
endIndex: 'en',
4647
excerptTokens: 'ex',

packages/api-extractor-model/src/model/Deserializer.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ function mapParam(
262262
startIndex: 1 + index + paramTokens.slice(0, index).reduce((akk, num) => akk + num, 0),
263263
endIndex: 1 + index + paramTokens.slice(0, index + 1).reduce((akk, num) => akk + num, 0),
264264
},
265+
defaultValue: param.default,
265266
};
266267
}
267268

packages/api-extractor-model/src/model/Parameter.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import type { Excerpt } from '../mixins/Excerpt.js';
1212
* @public
1313
*/
1414
export interface IParameterOptions {
15+
defaultValue: string | undefined;
1516
isOptional: boolean;
1617
isRest: boolean;
1718
name: string;
@@ -56,6 +57,11 @@ export class Parameter {
5657
*/
5758
public isRest: boolean;
5859

60+
/**
61+
* The default value for this parameter if optional
62+
*/
63+
public defaultValue: string | undefined;
64+
5965
private readonly _parent: ApiParameterListMixin;
6066

6167
public constructor(options: IParameterOptions) {
@@ -64,6 +70,7 @@ export class Parameter {
6470
this.isOptional = options.isOptional;
6571
this.isRest = options.isRest;
6672
this._parent = options.parent;
73+
this.defaultValue = options.defaultValue;
6774
}
6875

6976
/**

packages/api-extractor/src/generators/ApiModelGenerator.ts

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -843,6 +843,7 @@ export class ApiModelGenerator {
843843
const parameters: IApiParameterOptions[] = this._captureParameters(
844844
nodesToCapture,
845845
functionDeclaration.parameters,
846+
jsDoc?.params,
846847
);
847848

848849
const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);
@@ -1043,6 +1044,7 @@ export class ApiModelGenerator {
10431044
const parameters: IApiParameterOptions[] = this._captureParameters(
10441045
nodesToCapture,
10451046
methodDeclaration.parameters,
1047+
jsDoc?.params,
10461048
);
10471049

10481050
const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);
@@ -1137,7 +1139,11 @@ export class ApiModelGenerator {
11371139
methodSignature.typeParameters,
11381140
);
11391141

1140-
const parameters: IApiParameterOptions[] = this._captureParameters(nodesToCapture, methodSignature.parameters);
1142+
const parameters: IApiParameterOptions[] = this._captureParameters(
1143+
nodesToCapture,
1144+
methodSignature.parameters,
1145+
jsDoc?.params,
1146+
);
11411147

11421148
const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);
11431149
const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);
@@ -1342,7 +1348,7 @@ export class ApiModelGenerator {
13421348
const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);
13431349
const docComment: tsdoc.DocComment | undefined = jsDoc
13441350
? this._tsDocParser.parseString(
1345-
`/**\n * ${this._fixLinkTags(jsDoc.description) ?? ''}${jsDoc.default ? ` (default: ${this._escapeSpecialChars(jsDoc.default)})` : ''}\n${
1351+
`/**\n * ${this._fixLinkTags(jsDoc.description) ?? ''}${jsDoc.default ? `\n * @defaultValue ${this._escapeSpecialChars(jsDoc.default)}` : ''}\n${
13461352
'see' in jsDoc ? jsDoc.see.map((see) => ` * @see ${see}\n`).join('') : ''
13471353
}${'readonly' in jsDoc && jsDoc.readonly ? ' * @readonly\n' : ''}${
13481354
'deprecated' in jsDoc && jsDoc.deprecated
@@ -1529,6 +1535,7 @@ export class ApiModelGenerator {
15291535
},
15301536
isOptional: Boolean(parameter.optional),
15311537
isRest: parameter.name.startsWith('...'),
1538+
defaultValue: parameter.default?.toString(),
15321539
});
15331540
excerptTokens.push(...newTokens);
15341541
excerptTokens.push({
@@ -1548,6 +1555,7 @@ export class ApiModelGenerator {
15481555
},
15491556
isOptional: Boolean(parameter.optional),
15501557
isRest: parameter.name.startsWith('...'),
1558+
defaultValue: parameter.default?.toString(),
15511559
});
15521560
excerptTokens.push(...newTokens);
15531561
excerptTokens.push({
@@ -1640,6 +1648,7 @@ export class ApiModelGenerator {
16401648
private _captureParameters(
16411649
nodesToCapture: IExcerptBuilderNodeToCapture[],
16421650
parameterNodes: ts.NodeArray<ts.ParameterDeclaration>,
1651+
jsDoc?: DocgenParamJson[] | undefined,
16431652
): IApiParameterOptions[] {
16441653
const parameters: IApiParameterOptions[] = [];
16451654
for (const parameter of parameterNodes) {
@@ -1650,6 +1659,9 @@ export class ApiModelGenerator {
16501659
parameterTypeTokenRange,
16511660
isOptional: this._collector.typeChecker.isOptionalParameter(parameter),
16521661
isRest: Boolean(parameter.dotDotDotToken),
1662+
defaultValue:
1663+
parameter.initializer?.getText() ??
1664+
jsDoc?.find((param) => param.name === parameter.name.getText().trim())?.default?.toString(),
16531665
});
16541666
}
16551667

@@ -1753,7 +1765,7 @@ export class ApiModelGenerator {
17531765
return input;
17541766
}
17551767

1756-
return input.replaceAll(/(?<char>[{}])/g, '\\$<char>');
1768+
return input.replaceAll(/(?<char>[@{}])/g, '\\$<char>');
17571769
}
17581770

17591771
private _fixLinkTags(input?: string): string | undefined {
@@ -1848,7 +1860,7 @@ export class ApiModelGenerator {
18481860
isOptional: Boolean(prop.nullable),
18491861
isReadonly: Boolean(prop.readonly),
18501862
docComment: this._tsDocParser.parseString(
1851-
`/**\n * ${this._fixLinkTags(prop.description) ?? ''}${prop.default ? ` (default: ${this._escapeSpecialChars(prop.default)})` : ''}\n${
1863+
`/**\n * ${this._fixLinkTags(prop.description) ?? ''}\n${prop.default ? ` * @defaultValue ${this._escapeSpecialChars(prop.default)}\n` : ''}${
18521864
prop.see?.map((see) => ` * @see ${see}\n`).join('') ?? ''
18531865
}${prop.readonly ? ' * @readonly\n' : ''} */`,
18541866
).docComment,
@@ -1860,7 +1872,7 @@ export class ApiModelGenerator {
18601872
}${prop.name} :`,
18611873
},
18621874
...mappedVarType,
1863-
{ kind: ExcerptTokenKind.Content, text: ';' },
1875+
{ kind: ExcerptTokenKind.Content, text: `${prop.default ? ` = ${prop.default}` : ''};` },
18641876
],
18651877
propertyTypeTokenRange: { startIndex: 1, endIndex: 1 + mappedVarType.length },
18661878
releaseTag: prop.access === 'private' ? ReleaseTag.Internal : ReleaseTag.Public,
@@ -1883,6 +1895,7 @@ export class ApiModelGenerator {
18831895
startIndex: 1 + index + paramTokens.slice(0, index).reduce((akk, num) => akk + num, 0),
18841896
endIndex: 1 + index + paramTokens.slice(0, index + 1).reduce((akk, num) => akk + num, 0),
18851897
},
1898+
defaultValue: param.default?.toString(),
18861899
};
18871900
}
18881901

@@ -1907,7 +1920,7 @@ export class ApiModelGenerator {
19071920
excerptTokens.push(...newTokens);
19081921
excerptTokens.push({
19091922
kind: ExcerptTokenKind.Content,
1910-
text: `, ${method.params![index + 1]!.name}${
1923+
text: `${method.params![index]!.default ? ` = ${method.params![index]!.default}` : ''}, ${method.params![index + 1]!.name}${
19111924
method.params![index + 1]!.nullable || method.params![index + 1]!.optional ? '?' : ''
19121925
}: `,
19131926
});
@@ -1917,7 +1930,10 @@ export class ApiModelGenerator {
19171930
const newTokens = this._mapVarType(method.params[method.params.length - 1]!.type);
19181931
paramTokens.push(newTokens.length);
19191932
excerptTokens.push(...newTokens);
1920-
excerptTokens.push({ kind: ExcerptTokenKind.Content, text: `): ` });
1933+
excerptTokens.push({
1934+
kind: ExcerptTokenKind.Content,
1935+
text: `${method.params![method.params.length - 1]!.default ? ` = ${method.params![method.params.length - 1]!.default}` : ''}): `,
1936+
});
19211937
}
19221938

19231939
const returnTokens = this._mapVarType(method.returns?.[0] ?? []);

packages/discord.js/src/util/Options.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ const { version } = require('../../package.json');
3030
* @property {MessageMentionOptions} [allowedMentions] The default value for {@link BaseMessageOptions#allowedMentions}
3131
* @property {Partials[]} [partials] Structures allowed to be partial. This means events can be emitted even when
3232
* they're missing all the data for a particular structure. See the "Partial Structures" topic on the
33-
* [guide](https://discordjs.guide/popular-topics/partials.html) for some
33+
* {@link https://discordjs.guide/popular-topics/partials.html guide} for some
3434
* important usage information, as partials require you to put checks in place when handling data.
3535
* @property {boolean} [failIfNotExists=true] The default value for {@link MessageReplyOptions#failIfNotExists}
3636
* @property {PresenceData} [presence={}] Presence data to use upon login
@@ -41,7 +41,7 @@ const { version } = require('../../package.json');
4141
* @property {WebsocketOptions} [ws] Options for the WebSocket
4242
* @property {RESTOptions} [rest] Options for the REST manager
4343
* @property {Function} [jsonTransformer] A function used to transform outgoing json data
44-
* @property {boolean} [enforceNonce=false] The default value for {@link MessageReplyOptions#enforceNonce}
44+
* @property {boolean} [enforceNonce=false] The default value for {@link MessageCreateOptions#enforceNonce}
4545
*/
4646

4747
/**

packages/discord.js/typings/index.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6169,7 +6169,7 @@ export type GuildAuditLogsResolvable = AuditLogEvent | null;
61696169
export type GuildAuditLogsTargetType = GuildAuditLogsTypes[keyof GuildAuditLogsTypes][0] | 'All' | 'Unknown';
61706170

61716171
export type GuildAuditLogsTargets = {
6172-
[key in GuildAuditLogsTargetType]: GuildAuditLogsTargetType;
6172+
[Key in GuildAuditLogsTargetType]: GuildAuditLogsTargetType;
61736173
};
61746174

61756175
export type GuildBanResolvable = GuildBan | UserResolvable;
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
export const BuiltinDocumentationLinks = {
2+
// Built-in types
3+
bigint: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/BigInt',
4+
boolean: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean',
5+
null: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/null',
6+
number: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number',
7+
string: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String',
8+
symbol: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Symbol',
9+
undefined: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined',
10+
11+
// Built-in classes
12+
AbortSignal: 'https://developer.mozilla.org/docs/Web/API/AbortSignal',
13+
Agent: 'https://undici.nodejs.org/#/docs/api/Agent',
14+
Array: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array',
15+
ArrayBuffer: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer',
16+
AsyncGenerator: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/AsyncGenerator',
17+
AsyncIterable: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Iteration_protocols',
18+
AsyncIterableIterator: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Iteration_protocols',
19+
Buffer: 'https://nodejs.org/api/buffer.html#class-buffer',
20+
ChildProcess: 'https://nodejs.org/api/child_process.html#class-childprocess',
21+
Date: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date',
22+
Dispatcher: 'https://undici.nodejs.org/#/docs/api/Dispatcher',
23+
Error: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Error',
24+
Function: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function',
25+
Generator: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Generator',
26+
IncomingMessage: 'https://nodejs.org/api/http.html#class-httpincomingmessage',
27+
Iterable: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Iteration_protocols',
28+
IterableIterator: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Iteration_protocols',
29+
Iterator: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Iterator',
30+
Map: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Map',
31+
MessagePort: 'https://nodejs.org/api/worker_threads.html#class-messageport',
32+
Promise: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise',
33+
RangeError: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/RangeError',
34+
Readable: 'https://nodejs.org/api/stream.html#class-streamreadable',
35+
ReadableStream: 'https://developer.mozilla.org/docs/Web/API/ReadableStream',
36+
RegExp: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/RegExp',
37+
Response: 'https://developer.mozilla.org/docs/Web/API/Response',
38+
ServerResponse: 'https://nodejs.org/api/http.html#class-httpserverresponse',
39+
Set: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set',
40+
Stream: 'https://nodejs.org/api/stream.html#stream',
41+
SymbolConstructor: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Symbol',
42+
TypeError: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/TypeError',
43+
URL: 'https://developer.mozilla.org/docs/Web/API/URL',
44+
URLSearchParams: 'https://developer.mozilla.org/docs/Web/API/URLSearchParams',
45+
WeakMap: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/WeakMap',
46+
WeakRef: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/WeakRef',
47+
WeakSet: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/WeakSet',
48+
WebSocket: 'https://developer.mozilla.org/docs/Web/API/WebSocket',
49+
Worker: 'https://nodejs.org/api/worker_threads.html#class-worker',
50+
'NodeJS.Timeout': 'https://nodejs.org/api/timers.html#class-timeout',
51+
52+
// Typed arrays
53+
BigInt64Array: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/BigInt64Array',
54+
BigUint64Array: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/BigUint64Array',
55+
Float32Array: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Float32Array',
56+
Float64Array: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Float64Array',
57+
Int16Array: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Int16Array',
58+
Int32Array: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Int32Array',
59+
Int8Array: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Int8Array',
60+
Uint16Array: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array',
61+
Uint32Array: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array',
62+
Uint8Array: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array',
63+
Uint8ClampedArray: 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray',
64+
65+
// TypeScript types
66+
any: 'https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#any',
67+
keyof: 'https://www.typescriptlang.org/docs/handbook/2/keyof-types.html',
68+
never: 'https://www.typescriptlang.org/docs/handbook/2/functions.html#never',
69+
object: 'https://www.typescriptlang.org/docs/handbook/2/functions.html#object',
70+
ReadonlyArray: 'https://www.typescriptlang.org/docs/handbook/2/objects.html#the-readonlyarray-type',
71+
ReadonlyMap:
72+
'https://github.com/microsoft/TypeScript/blob/1416053b9e85ca2344a7a6aa10456d633ea1cd65/src/lib/es2015.collection.d.ts#L38-L43',
73+
ReadonlySet:
74+
'https://github.com/microsoft/TypeScript/blob/1416053b9e85ca2344a7a6aa10456d633ea1cd65/src/lib/es2015.collection.d.ts#L104-L108',
75+
unknown: 'https://www.typescriptlang.org/docs/handbook/2/functions.html#unknown',
76+
this: 'https://www.typescriptlang.org/docs/handbook/2/classes.html#this-types',
77+
typeof: 'https://www.typescriptlang.org/docs/handbook/2/typeof-types.html',
78+
void: 'https://www.typescriptlang.org/docs/handbook/2/functions.html#void',
79+
80+
// TypeScript utility types
81+
Awaited: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#awaitedtype',
82+
Partial: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#partialtype',
83+
Required: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#requiredtype',
84+
Readonly: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#readonlytype',
85+
Record: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type',
86+
Pick: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys',
87+
Omit: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys',
88+
Exclude: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#excludeuniontype-excludedmembers',
89+
Extract: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#extracttype-union',
90+
NonNullable: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#nonnullabletype',
91+
Parameters: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#parameterstype',
92+
ConstructorParameters: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#constructorparameterstype',
93+
ReturnType: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#returntypetype',
94+
InstanceType: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#instancetypetype',
95+
ThisParameterType: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#thisparametertypetype',
96+
OmitThisParameter: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#omitthisparametertype',
97+
ThisType: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#thistypetype',
98+
Uppercase: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#uppercasestringtype',
99+
Lowercase: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#lowercasestringtype',
100+
Capitalize: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#capitalizestringtype',
101+
Uncapitalize: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#uncapitalizestringtype',
102+
103+
// External Libraries
104+
AsyncEventEmitter: 'https://github.com/vladfrangu/async_event_emitter',
105+
AsyncQueue: 'https://www.sapphirejs.dev/docs/Documentation/api-utilities/classes/sapphire_async_queue.AsyncQueue',
106+
Redis: 'https://redis.github.io/ioredis/classes/Redis.html',
107+
'prism.opus.Encoder': 'https://amishshah.github.io/prism-media/opus.Encoder.html',
108+
'prism.VolumeTransformer': 'https://amishshah.github.io/prism-media/core.VolumeTransformer.html',
109+
} as const;

0 commit comments

Comments
 (0)