ci: api-extractor support for docs

This commit is contained in:
iCrawl
2022-06-30 15:46:14 +02:00
parent 525bf031a5
commit b2776c22d4
54 changed files with 2608 additions and 343 deletions

View File

@@ -10,10 +10,10 @@ jobs:
if: github.repository_owner == 'discordjs' if: github.repository_owner == 'discordjs'
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v2 uses: actions/checkout@v3
- name: Install node.js v16 - name: Install node.js v16
uses: actions/setup-node@v2 uses: actions/setup-node@v3
with: with:
node-version: 16 node-version: 16
cache: 'yarn' cache: 'yarn'

View File

@@ -23,12 +23,12 @@ jobs:
SHA: ${{ steps.env.outputs.SHA }} SHA: ${{ steps.env.outputs.SHA }}
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v2 uses: actions/checkout@v3
with: with:
ref: ${{ github.event.inputs.ref || '' }} ref: ${{ github.event.inputs.ref || '' }}
- name: Install node.js v16 - name: Install node.js v16
uses: actions/setup-node@v2 uses: actions/setup-node@v3
with: with:
node-version: 16 node-version: 16
cache: 'yarn' cache: 'yarn'
@@ -36,7 +36,7 @@ jobs:
- name: Turbo cache - name: Turbo cache
id: turbo-cache id: turbo-cache
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: .turbo path: .turbo
key: turbo-${{ github.job }}-${{ github.ref_name }}-${{ github.sha }} key: turbo-${{ github.job }}-${{ github.ref_name }}-${{ github.sha }}
@@ -49,12 +49,18 @@ jobs:
- name: Build docs - name: Build docs
run: yarn docs --cache-dir=".turbo" run: yarn docs --cache-dir=".turbo"
- name: Upload artifacts - name: Upload docgen artifacts
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v3
with: with:
name: docs name: docgen
path: packages/*/docs/docs.json path: packages/*/docs/docs.json
- name: Upload api-extractor artifacts
uses: actions/upload-artifact@v3
with:
name: api-extractor
path: packages/*/docs/docs.api.json
- name: Set outputs for upload job - name: Set outputs for upload job
id: env id: env
run: | run: |
@@ -77,10 +83,10 @@ jobs:
SHA: ${{ needs.build.outputs.SHA }} SHA: ${{ needs.build.outputs.SHA }}
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v2 uses: actions/checkout@v3
- name: Install node.js v16 - name: Install node.js v16
uses: actions/setup-node@v2 uses: actions/setup-node@v3
with: with:
node-version: 16 node-version: 16
cache: 'yarn' cache: 'yarn'
@@ -88,7 +94,7 @@ jobs:
- name: Turbo cache - name: Turbo cache
id: turbo-cache id: turbo-cache
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: .turbo path: .turbo
key: turbo-${{ github.job }}-${{ github.ref_name }}-${{ github.sha }} key: turbo-${{ github.job }}-${{ github.ref_name }}-${{ github.sha }}
@@ -101,14 +107,20 @@ jobs:
- name: Build actions - name: Build actions
run: yarn build --cache-dir=".turbo" run: yarn build --cache-dir=".turbo"
- name: Download artifacts - name: Download docgen artifacts
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: docs name: docgen
path: docs
- name: Download api-extractor artifacts
uses: actions/download-artifact@v3
with:
name: api-extractor
path: docs path: docs
- name: Checkout docs repository - name: Checkout docs repository
uses: actions/checkout@v2 uses: actions/checkout@v3
with: with:
repository: 'discordjs/docs' repository: 'discordjs/docs'
token: ${{ secrets.DJS_DOCS }} token: ${{ secrets.DJS_DOCS }}
@@ -129,6 +141,7 @@ jobs:
run: | run: |
mkdir -p out/${PACKAGE} mkdir -p out/${PACKAGE}
mv docs/${PACKAGE}/docs/docs.json out/${PACKAGE}/${SEMVER}.json mv docs/${PACKAGE}/docs/docs.json out/${PACKAGE}/${SEMVER}.json
mv docs/${PACKAGE}/docs/docs.api.json out/${PACKAGE}/${SEMVER}.api.json
- name: Move docs to correct directory - name: Move docs to correct directory
if: ${{ !github.event.inputs.ref && env.BRANCH_OR_TAG == 'branch' }} if: ${{ !github.event.inputs.ref && env.BRANCH_OR_TAG == 'branch' }}
@@ -137,6 +150,7 @@ jobs:
run: | run: |
mkdir -p out/${PACKAGE} mkdir -p out/${PACKAGE}
mv docs/${PACKAGE}/docs/docs.json out/${PACKAGE}/${BRANCH_NAME}.json mv docs/${PACKAGE}/docs/docs.json out/${PACKAGE}/${BRANCH_NAME}.json
mv docs/${PACKAGE}/docs/docs.api.json out/${PACKAGE}/${BRANCH_NAME}.api.json
- name: Commit and push - name: Commit and push
run: | run: |

View File

@@ -14,9 +14,9 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v2 uses: actions/checkout@v3
- name: Label sync - name: Label sync
uses: crazy-max/ghaction-github-labeler@v3 uses: crazy-max/ghaction-github-labeler@v4
with: with:
github-token: ${{ secrets.GITHUB_TOKEN }} github-token: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -6,7 +6,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Automatically label PR - name: Automatically label PR
uses: actions/labeler@v3 uses: actions/labeler@v4
with: with:
repo-token: '${{ secrets.GITHUB_TOKEN }}' repo-token: '${{ secrets.GITHUB_TOKEN }}'
sync-labels: true sync-labels: true

View File

@@ -11,10 +11,10 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v2 uses: actions/checkout@v3
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1 uses: docker/setup-buildx-action@v2
- name: Login to DockerHub - name: Login to DockerHub
run: echo ${{ secrets.DOCKER_ACCESS_TOKEN }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin run: echo ${{ secrets.DOCKER_ACCESS_TOKEN }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin

View File

@@ -26,10 +26,10 @@ jobs:
if: github.repository_owner == 'discordjs' if: github.repository_owner == 'discordjs'
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v2 uses: actions/checkout@v3
- name: Install node.js v16 - name: Install node.js v16
uses: actions/setup-node@v2 uses: actions/setup-node@v3
with: with:
node-version: 16 node-version: 16
registry-url: https://registry.npmjs.org/ registry-url: https://registry.npmjs.org/
@@ -38,7 +38,7 @@ jobs:
- name: Turbo cache - name: Turbo cache
id: turbo-cache id: turbo-cache
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: .turbo path: .turbo
key: turbo-${{ github.job }}-${{ github.ref_name }}-${{ github.sha }} key: turbo-${{ github.job }}-${{ github.ref_name }}-${{ github.sha }}

View File

@@ -8,10 +8,10 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v2 uses: actions/checkout@v3
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1 uses: docker/setup-buildx-action@v2
- name: Login to DockerHub - name: Login to DockerHub
run: echo ${{ secrets.DOCKER_ACCESS_TOKEN }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin run: echo ${{ secrets.DOCKER_ACCESS_TOKEN }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin

View File

@@ -6,10 +6,10 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v2 uses: actions/checkout@v3
- name: Install node.js v16 - name: Install node.js v16
uses: actions/setup-node@v2 uses: actions/setup-node@v3
with: with:
node-version: 16 node-version: 16
cache: 'yarn' cache: 'yarn'
@@ -17,7 +17,7 @@ jobs:
- name: Turbo cache - name: Turbo cache
id: turbo-cache id: turbo-cache
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: .turbo path: .turbo
key: turbo-${{ github.job }}-${{ github.ref_name }}-${{ github.sha }} key: turbo-${{ github.job }}-${{ github.ref_name }}-${{ github.sha }}

View File

@@ -0,0 +1,376 @@
/**
* Config file for API Extractor. For more info, please visit: https://api-extractor.com
*/
{
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
/**
* Optionally specifies another JSON config file that this file extends from. This provides a way for
* standard settings to be shared across multiple projects.
*
* If the path starts with "./" or "../", the path is resolved relative to the folder of the file that contains
* the "extends" field. Otherwise, the first path segment is interpreted as an NPM package name, and will be
* resolved using NodeJS require().
*
* SUPPORTED TOKENS: none
* DEFAULT VALUE: ""
*/
// "extends": "./shared/api-extractor-base.json"
// "extends": "my-package/include/api-extractor-base.json"
/**
* Determines the "<projectFolder>" token that can be used with other config file settings. The project folder
* typically contains the tsconfig.json and package.json config files, but the path is user-defined.
*
* The path is resolved relative to the folder of the config file that contains the setting.
*
* The default value for "projectFolder" is the token "<lookup>", which means the folder is determined by traversing
* parent folders, starting from the folder containing api-extractor.json, and stopping at the first folder
* that contains a tsconfig.json file. If a tsconfig.json file cannot be found in this way, then an error
* will be reported.
*
* SUPPORTED TOKENS: <lookup>
* DEFAULT VALUE: "<lookup>"
*/
// "projectFolder": "..",
/**
* (REQUIRED) Specifies the .d.ts file to be used as the starting point for analysis. API Extractor
* analyzes the symbols exported by this module.
*
* The file extension must be ".d.ts" and not ".ts".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
*/
"mainEntryPointFilePath": "<projectFolder>/dist/index.d.ts",
/**
* A list of NPM package names whose exports should be treated as part of this package.
*
* For example, suppose that Webpack is used to generate a distributed bundle for the project "library1",
* and another NPM package "library2" is embedded in this bundle. Some types from library2 may become part
* of the exported API for library1, but by default API Extractor would generate a .d.ts rollup that explicitly
* imports library2. To avoid this, we can specify:
*
* "bundledPackages": [ "library2" ],
*
* This would direct API Extractor to embed those types directly in the .d.ts rollup, as if they had been
* local files for library1.
*/
"bundledPackages": [],
/**
* Determines how the TypeScript compiler engine will be invoked by API Extractor.
*/
"compiler": {
/**
* Specifies the path to the tsconfig.json file to be used by API Extractor when analyzing the project.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* Note: This setting will be ignored if "overrideTsconfig" is used.
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/tsconfig.json"
*/
// "tsconfigFilePath": "<projectFolder>/tsconfig.json",
/**
* Provides a compiler configuration that will be used instead of reading the tsconfig.json file from disk.
* The object must conform to the TypeScript tsconfig schema:
*
* http://json.schemastore.org/tsconfig
*
* If omitted, then the tsconfig.json file will be read from the "projectFolder".
*
* DEFAULT VALUE: no overrideTsconfig section
*/
// "overrideTsconfig": {
// . . .
// }
/**
* This option causes the compiler to be invoked with the --skipLibCheck option. This option is not recommended
* and may cause API Extractor to produce incomplete or incorrect declarations, but it may be required when
* dependencies contain declarations that are incompatible with the TypeScript engine that API Extractor uses
* for its analysis. Where possible, the underlying issue should be fixed rather than relying on skipLibCheck.
*
* DEFAULT VALUE: false
*/
// "skipLibCheck": true,
},
/**
* Configures how the API report file (*.api.md) will be generated.
*/
"apiReport": {
/**
* (REQUIRED) Whether to generate an API report.
*/
"enabled": false
/**
* The filename for the API report files. It will be combined with "reportFolder" or "reportTempFolder" to produce
* a full file path.
*
* The file extension should be ".api.md", and the string should not contain a path separator such as "\" or "/".
*
* SUPPORTED TOKENS: <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<unscopedPackageName>.api.md"
*/
// "reportFileName": "<unscopedPackageName>.api.md",
/**
* Specifies the folder where the API report file is written. The file name portion is determined by
* the "reportFileName" setting.
*
* The API report file is normally tracked by Git. Changes to it can be used to trigger a branch policy,
* e.g. for an API review.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/temp/"
*/
// "reportFolder": "<projectFolder>/temp/",
/**
* Specifies the folder where the temporary report file is written. The file name portion is determined by
* the "reportFileName" setting.
*
* After the temporary file is written to disk, it is compared with the file in the "reportFolder".
* If they are different, a production build will fail.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/temp/"
*/
// "reportTempFolder": "<projectFolder>/temp/"
},
/**
* Configures how the doc model file (*.api.json) will be generated.
*/
"docModel": {
/**
* (REQUIRED) Whether to generate a doc model file.
*/
"enabled": true,
/**
* The output path for the doc model file. The file extension should be ".api.json".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/temp/<unscopedPackageName>.api.json"
*/
"apiJsonFilePath": "<projectFolder>/docs/docs.api.json"
},
/**
* Configures how the .d.ts rollup file will be generated.
*/
"dtsRollup": {
/**
* (REQUIRED) Whether to generate the .d.ts rollup file.
*/
"enabled": false
/**
* Specifies the output path for a .d.ts rollup file to be generated without any trimming.
* This file will include all declarations that are exported by the main entry point.
*
* If the path is an empty string, then this file will not be written.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/dist/<unscopedPackageName>.d.ts"
*/
// "untrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>.d.ts",
/**
* Specifies the output path for a .d.ts rollup file to be generated with trimming for an "alpha" release.
* This file will include only declarations that are marked as "@public", "@beta", or "@alpha".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: ""
*/
// "alphaTrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>-alpha.d.ts",
/**
* Specifies the output path for a .d.ts rollup file to be generated with trimming for a "beta" release.
* This file will include only declarations that are marked as "@public" or "@beta".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: ""
*/
// "betaTrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>-beta.d.ts",
/**
* Specifies the output path for a .d.ts rollup file to be generated with trimming for a "public" release.
* This file will include only declarations that are marked as "@public".
*
* If the path is an empty string, then this file will not be written.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: ""
*/
// "publicTrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>-public.d.ts",
/**
* When a declaration is trimmed, by default it will be replaced by a code comment such as
* "Excluded from this release type: exampleMember". Set "omitTrimmingComments" to true to remove the
* declaration completely.
*
* DEFAULT VALUE: false
*/
// "omitTrimmingComments": true
},
/**
* Configures how the tsdoc-metadata.json file will be generated.
*/
"tsdocMetadata": {
/**
* Whether to generate the tsdoc-metadata.json file.
*
* DEFAULT VALUE: true
*/
// "enabled": true,
/**
* Specifies where the TSDoc metadata file should be written.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* The default value is "<lookup>", which causes the path to be automatically inferred from the "tsdocMetadata",
* "typings" or "main" fields of the project's package.json. If none of these fields are set, the lookup
* falls back to "tsdoc-metadata.json" in the package folder.
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<lookup>"
*/
// "tsdocMetadataFilePath": "<projectFolder>/dist/tsdoc-metadata.json"
},
/**
* Specifies what type of newlines API Extractor should use when writing output files. By default, the output files
* will be written with Windows-style newlines. To use POSIX-style newlines, specify "lf" instead.
* To use the OS's default newline kind, specify "os".
*
* DEFAULT VALUE: "crlf"
*/
"newlineKind": "lf",
/**
* Configures how API Extractor reports error and warning messages produced during analysis.
*
* There are three sources of messages: compiler messages, API Extractor messages, and TSDoc messages.
*/
"messages": {
/**
* Configures handling of diagnostic messages reported by the TypeScript compiler engine while analyzing
* the input .d.ts files.
*
* TypeScript message identifiers start with "TS" followed by an integer. For example: "TS2551"
*
* DEFAULT VALUE: A single "default" entry with logLevel=warning.
*/
"compilerMessageReporting": {
/**
* Configures the default routing for messages that don't match an explicit rule in this table.
*/
"default": {
/**
* Specifies whether the message should be written to the the tool's output log. Note that
* the "addToApiReportFile" property may supersede this option.
*
* Possible values: "error", "warning", "none"
*
* Errors cause the build to fail and return a nonzero exit code. Warnings cause a production build fail
* and return a nonzero exit code. For a non-production build (e.g. when "api-extractor run" includes
* the "--local" option), the warning is displayed but the build will not fail.
*
* DEFAULT VALUE: "warning"
*/
"logLevel": "warning"
/**
* When addToApiReportFile is true: If API Extractor is configured to write an API report file (.api.md),
* then the message will be written inside that file; otherwise, the message is instead logged according to
* the "logLevel" option.
*
* DEFAULT VALUE: false
*/
// "addToApiReportFile": false
}
// "TS2551": {
// "logLevel": "warning",
// "addToApiReportFile": true
// },
//
// . . .
},
/**
* Configures handling of messages reported by API Extractor during its analysis.
*
* API Extractor message identifiers start with "ae-". For example: "ae-extra-release-tag"
*
* DEFAULT VALUE: See api-extractor-defaults.json for the complete table of extractorMessageReporting mappings
*/
"extractorMessageReporting": {
"default": {
"logLevel": "warning"
// "addToApiReportFile": false
}
// "ae-extra-release-tag": {
// "logLevel": "warning",
// "addToApiReportFile": true
// },
//
// . . .
},
/**
* Configures handling of messages reported by the TSDoc parser when analyzing code comments.
*
* TSDoc message identifiers start with "tsdoc-". For example: "tsdoc-link-tag-unescaped-text"
*
* DEFAULT VALUE: A single "default" entry with logLevel=warning.
*/
"tsdocMessageReporting": {
"default": {
"logLevel": "warning"
// "addToApiReportFile": false
}
// "tsdoc-link-tag-unescaped-text": {
// "logLevel": "warning",
// "addToApiReportFile": true
// },
//
// . . .
}
}
}

View File

@@ -6,7 +6,7 @@
"build": "tsup", "build": "tsup",
"lint": "prettier --cache --check . && eslint src __tests__ --ext mjs,js,ts --cache", "lint": "prettier --cache --check . && eslint src __tests__ --ext mjs,js,ts --cache",
"format": "prettier --cache --write . && eslint src __tests__ --ext mjs,js,ts --fix --cache", "format": "prettier --cache --write . && eslint src __tests__ --ext mjs,js,ts --fix --cache",
"docs": "docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript", "docs": "docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript && api-extractor run --local",
"prepack": "yarn build && yarn lint", "prepack": "yarn build && yarn lint",
"changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/builders/*'", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/builders/*'",
"release": "cliff-jumper" "release": "cliff-jumper"
@@ -62,6 +62,7 @@
"@discordjs/docgen": "workspace:^", "@discordjs/docgen": "workspace:^",
"@discordjs/scripts": "workspace:^", "@discordjs/scripts": "workspace:^",
"@favware/cliff-jumper": "^1.8.3", "@favware/cliff-jumper": "^1.8.3",
"@microsoft/api-extractor": "^7.28.2",
"@types/node": "^18.0.0", "@types/node": "^18.0.0",
"eslint": "^8.18.0", "eslint": "^8.18.0",
"prettier": "^2.7.1", "prettier": "^2.7.1",

View File

@@ -36,8 +36,8 @@ export class ActionRowBuilder<T extends AnyComponentBuilder> extends ComponentBu
/** /**
* Adds components to this action row. * Adds components to this action row.
* @param components The components to add to this action row. *
* @returns * @param components - The components to add to this action row.
*/ */
public addComponents(...components: RestOrArray<T>) { public addComponents(...components: RestOrArray<T>) {
this.components.push(...normalizeArray(components)); this.components.push(...normalizeArray(components));
@@ -46,7 +46,8 @@ export class ActionRowBuilder<T extends AnyComponentBuilder> extends ComponentBu
/** /**
* Sets the components in this action row * Sets the components in this action row
* @param components The components to set this row to *
* @param components - The components to set this row to
*/ */
public setComponents(...components: RestOrArray<T>) { public setComponents(...components: RestOrArray<T>) {
this.components.splice(0, this.components.length, ...normalizeArray(components)); this.components.splice(0, this.components.length, ...normalizeArray(components));

View File

@@ -11,7 +11,8 @@ export interface MappedComponentTypes {
/** /**
* Factory for creating components from API data * Factory for creating components from API data
* @param data The api data to transform to a component class *
* @param data - The api data to transform to a component class
*/ */
export function createComponentBuilder<T extends keyof MappedComponentTypes>( export function createComponentBuilder<T extends keyof MappedComponentTypes>(
data: (APIMessageComponent | APIModalComponent) & { type: T }, data: (APIMessageComponent | APIModalComponent) & { type: T },

View File

@@ -18,7 +18,8 @@ export class UnsafeButtonBuilder extends ComponentBuilder<APIButtonComponent> {
/** /**
* Sets the style of this button * Sets the style of this button
* @param style The style of the button *
* @param style - The style of the button
*/ */
public setStyle(style: ButtonStyle) { public setStyle(style: ButtonStyle) {
this.data.style = style; this.data.style = style;
@@ -27,7 +28,8 @@ export class UnsafeButtonBuilder extends ComponentBuilder<APIButtonComponent> {
/** /**
* Sets the URL for this button * Sets the URL for this button
* @param url The URL to open when this button is clicked *
* @param url - The URL to open when this button is clicked
*/ */
public setURL(url: string) { public setURL(url: string) {
(this.data as APIButtonComponentWithURL).url = url; (this.data as APIButtonComponentWithURL).url = url;
@@ -36,7 +38,8 @@ export class UnsafeButtonBuilder extends ComponentBuilder<APIButtonComponent> {
/** /**
* Sets the custom Id for this button * Sets the custom Id for this button
* @param customId The custom id to use for this button *
* @param customId - The custom id to use for this button
*/ */
public setCustomId(customId: string) { public setCustomId(customId: string) {
(this.data as APIButtonComponentWithCustomId).custom_id = customId; (this.data as APIButtonComponentWithCustomId).custom_id = customId;
@@ -45,7 +48,8 @@ export class UnsafeButtonBuilder extends ComponentBuilder<APIButtonComponent> {
/** /**
* Sets the emoji to display on this button * Sets the emoji to display on this button
* @param emoji The emoji to display on this button *
* @param emoji - The emoji to display on this button
*/ */
public setEmoji(emoji: APIMessageComponentEmoji) { public setEmoji(emoji: APIMessageComponentEmoji) {
this.data.emoji = emoji; this.data.emoji = emoji;
@@ -54,7 +58,8 @@ export class UnsafeButtonBuilder extends ComponentBuilder<APIButtonComponent> {
/** /**
* Sets whether this button is disable or not * Sets whether this button is disable or not
* @param disabled Whether or not to disable this button or not *
* @param disabled - Whether or not to disable this button or not
*/ */
public setDisabled(disabled = true) { public setDisabled(disabled = true) {
this.data.disabled = disabled; this.data.disabled = disabled;
@@ -63,7 +68,8 @@ export class UnsafeButtonBuilder extends ComponentBuilder<APIButtonComponent> {
/** /**
* Sets the label for this button * Sets the label for this button
* @param label The label to display on this button *
* @param label - The label to display on this button
*/ */
public setLabel(label: string) { public setLabel(label: string) {
this.data.label = label; this.data.label = label;

View File

@@ -20,7 +20,8 @@ export class UnsafeSelectMenuBuilder extends ComponentBuilder<APISelectMenuCompo
/** /**
* Sets the placeholder for this select menu * Sets the placeholder for this select menu
* @param placeholder The placeholder to use for this select menu *
* @param placeholder - The placeholder to use for this select menu
*/ */
public setPlaceholder(placeholder: string) { public setPlaceholder(placeholder: string) {
this.data.placeholder = placeholder; this.data.placeholder = placeholder;
@@ -29,7 +30,8 @@ export class UnsafeSelectMenuBuilder extends ComponentBuilder<APISelectMenuCompo
/** /**
* Sets the minimum values that must be selected in the select menu * Sets the minimum values that must be selected in the select menu
* @param minValues The minimum values that must be selected *
* @param minValues - The minimum values that must be selected
*/ */
public setMinValues(minValues: number) { public setMinValues(minValues: number) {
this.data.min_values = minValues; this.data.min_values = minValues;
@@ -38,7 +40,8 @@ export class UnsafeSelectMenuBuilder extends ComponentBuilder<APISelectMenuCompo
/** /**
* Sets the maximum values that must be selected in the select menu * Sets the maximum values that must be selected in the select menu
* @param minValues The maximum values that must be selected *
* @param minValues - The maximum values that must be selected
*/ */
public setMaxValues(maxValues: number) { public setMaxValues(maxValues: number) {
this.data.max_values = maxValues; this.data.max_values = maxValues;
@@ -47,7 +50,8 @@ export class UnsafeSelectMenuBuilder extends ComponentBuilder<APISelectMenuCompo
/** /**
* Sets the custom Id for this select menu * Sets the custom Id for this select menu
* @param customId The custom id to use for this select menu *
* @param customId - The custom id to use for this select menu
*/ */
public setCustomId(customId: string) { public setCustomId(customId: string) {
this.data.custom_id = customId; this.data.custom_id = customId;
@@ -56,7 +60,8 @@ export class UnsafeSelectMenuBuilder extends ComponentBuilder<APISelectMenuCompo
/** /**
* Sets whether or not this select menu is disabled * Sets whether or not this select menu is disabled
* @param disabled Whether or not this select menu is disabled *
* @param disabled - Whether or not this select menu is disabled
*/ */
public setDisabled(disabled = true) { public setDisabled(disabled = true) {
this.data.disabled = disabled; this.data.disabled = disabled;
@@ -65,8 +70,8 @@ export class UnsafeSelectMenuBuilder extends ComponentBuilder<APISelectMenuCompo
/** /**
* Adds options to this select menu * Adds options to this select menu
* @param options The options to add to this select menu *
* @returns * @param options - The options to add to this select menu
*/ */
public addOptions(...options: RestOrArray<UnsafeSelectMenuOptionBuilder | APISelectMenuOption>) { public addOptions(...options: RestOrArray<UnsafeSelectMenuOptionBuilder | APISelectMenuOption>) {
this.options.push( this.options.push(
@@ -79,7 +84,8 @@ export class UnsafeSelectMenuBuilder extends ComponentBuilder<APISelectMenuCompo
/** /**
* Sets the options on this select menu * Sets the options on this select menu
* @param options The options to set on this select menu *
* @param options - The options to set on this select menu
*/ */
public setOptions(...options: RestOrArray<UnsafeSelectMenuOptionBuilder | APISelectMenuOption>) { public setOptions(...options: RestOrArray<UnsafeSelectMenuOptionBuilder | APISelectMenuOption>) {
this.options.splice( this.options.splice(

View File

@@ -8,7 +8,8 @@ export class UnsafeSelectMenuOptionBuilder {
/** /**
* Sets the label of this option * Sets the label of this option
* @param label The label to show on this option *
* @param label - The label to show on this option
*/ */
public setLabel(label: string) { public setLabel(label: string) {
this.data.label = label; this.data.label = label;
@@ -17,7 +18,8 @@ export class UnsafeSelectMenuOptionBuilder {
/** /**
* Sets the value of this option * Sets the value of this option
* @param value The value of this option *
* @param value - The value of this option
*/ */
public setValue(value: string) { public setValue(value: string) {
this.data.value = value; this.data.value = value;
@@ -26,7 +28,8 @@ export class UnsafeSelectMenuOptionBuilder {
/** /**
* Sets the description of this option. * Sets the description of this option.
* @param description The description of this option *
* @param description - The description of this option
*/ */
public setDescription(description: string) { public setDescription(description: string) {
this.data.description = description; this.data.description = description;
@@ -35,7 +38,8 @@ export class UnsafeSelectMenuOptionBuilder {
/** /**
* Sets whether this option is selected by default * Sets whether this option is selected by default
* @param isDefault Whether this option is selected by default *
* @param isDefault - Whether this option is selected by default
*/ */
public setDefault(isDefault = true) { public setDefault(isDefault = true) {
this.data.default = isDefault; this.data.default = isDefault;
@@ -44,7 +48,8 @@ export class UnsafeSelectMenuOptionBuilder {
/** /**
* Sets the emoji to display on this option * Sets the emoji to display on this option
* @param emoji The emoji to display on this option *
* @param emoji - The emoji to display on this option
*/ */
public setEmoji(emoji: APIMessageComponentEmoji) { public setEmoji(emoji: APIMessageComponentEmoji) {
this.data.emoji = emoji; this.data.emoji = emoji;

View File

@@ -9,7 +9,8 @@ export class UnsafeTextInputBuilder extends ComponentBuilder<APITextInputCompone
/** /**
* Sets the custom id for this text input * Sets the custom id for this text input
* @param customId The custom id of this text input *
* @param customId - The custom id of this text input
*/ */
public setCustomId(customId: string) { public setCustomId(customId: string) {
this.data.custom_id = customId; this.data.custom_id = customId;
@@ -18,7 +19,8 @@ export class UnsafeTextInputBuilder extends ComponentBuilder<APITextInputCompone
/** /**
* Sets the label for this text input * Sets the label for this text input
* @param label The label for this text input *
* @param label - The label for this text input
*/ */
public setLabel(label: string) { public setLabel(label: string) {
this.data.label = label; this.data.label = label;
@@ -27,7 +29,8 @@ export class UnsafeTextInputBuilder extends ComponentBuilder<APITextInputCompone
/** /**
* Sets the style for this text input * Sets the style for this text input
* @param style The style for this text input *
* @param style - The style for this text input
*/ */
public setStyle(style: TextInputStyle) { public setStyle(style: TextInputStyle) {
this.data.style = style; this.data.style = style;
@@ -36,7 +39,8 @@ export class UnsafeTextInputBuilder extends ComponentBuilder<APITextInputCompone
/** /**
* Sets the minimum length of text for this text input * Sets the minimum length of text for this text input
* @param minLength The minimum length of text for this text input *
* @param minLength - The minimum length of text for this text input
*/ */
public setMinLength(minLength: number) { public setMinLength(minLength: number) {
this.data.min_length = minLength; this.data.min_length = minLength;
@@ -45,7 +49,8 @@ export class UnsafeTextInputBuilder extends ComponentBuilder<APITextInputCompone
/** /**
* Sets the maximum length of text for this text input * Sets the maximum length of text for this text input
* @param maxLength The maximum length of text for this text input *
* @param maxLength - The maximum length of text for this text input
*/ */
public setMaxLength(maxLength: number) { public setMaxLength(maxLength: number) {
this.data.max_length = maxLength; this.data.max_length = maxLength;
@@ -54,7 +59,8 @@ export class UnsafeTextInputBuilder extends ComponentBuilder<APITextInputCompone
/** /**
* Sets the placeholder of this text input * Sets the placeholder of this text input
* @param placeholder The placeholder of this text input *
* @param placeholder - The placeholder of this text input
*/ */
public setPlaceholder(placeholder: string) { public setPlaceholder(placeholder: string) {
this.data.placeholder = placeholder; this.data.placeholder = placeholder;
@@ -63,7 +69,8 @@ export class UnsafeTextInputBuilder extends ComponentBuilder<APITextInputCompone
/** /**
* Sets the value of this text input * Sets the value of this text input
* @param value The value for this text input *
* @param value - The value for this text input
*/ */
public setValue(value: string) { public setValue(value: string) {
this.data.value = value; this.data.value = value;
@@ -72,7 +79,8 @@ export class UnsafeTextInputBuilder extends ComponentBuilder<APITextInputCompone
/** /**
* Sets whether this text input is required or not * Sets whether this text input is required or not
* @param required Whether this text input is required or not *
* @param required - Whether this text input is required or not
*/ */
public setRequired(required = true) { public setRequired(required = true) {
this.data.required = required; this.data.required = required;

View File

@@ -53,7 +53,7 @@ export class ContextMenuCommandBuilder {
/** /**
* Sets the name * Sets the name
* *
* @param name The name * @param name - The name
*/ */
public setName(name: string) { public setName(name: string) {
// Assert the name matches the conditions // Assert the name matches the conditions
@@ -67,7 +67,7 @@ export class ContextMenuCommandBuilder {
/** /**
* Sets the type * Sets the type
* *
* @param type The type * @param type - The type
*/ */
public setType(type: ContextMenuCommandType) { public setType(type: ContextMenuCommandType) {
// Assert the type is valid // Assert the type is valid
@@ -83,7 +83,7 @@ export class ContextMenuCommandBuilder {
* *
* **Note**: If set to `false`, you will have to later `PUT` the permissions for this command. * **Note**: If set to `false`, you will have to later `PUT` the permissions for this command.
* *
* @param value Whether or not to enable this command by default * @param value - Whether or not to enable this command by default
* *
* @see https://discord.com/developers/docs/interactions/application-commands#permissions * @see https://discord.com/developers/docs/interactions/application-commands#permissions
* @deprecated Use `setDefaultMemberPermissions` or `setDMPermission` instead. * @deprecated Use `setDefaultMemberPermissions` or `setDMPermission` instead.
@@ -102,7 +102,7 @@ export class ContextMenuCommandBuilder {
* *
* **Note:** You can set this to `'0'` to disable the command by default. * **Note:** You can set this to `'0'` to disable the command by default.
* *
* @param permissions The permissions bit field to set * @param permissions - The permissions bit field to set
* *
* @see https://discord.com/developers/docs/interactions/application-commands#permissions * @see https://discord.com/developers/docs/interactions/application-commands#permissions
*/ */
@@ -119,7 +119,7 @@ export class ContextMenuCommandBuilder {
* Sets if the command is available in DMs with the application, only for globally-scoped commands. * Sets if the command is available in DMs with the application, only for globally-scoped commands.
* By default, commands are visible. * By default, commands are visible.
* *
* @param enabled If the command should be enabled in DMs * @param enabled - If the command should be enabled in DMs
* *
* @see https://discord.com/developers/docs/interactions/application-commands#permissions * @see https://discord.com/developers/docs/interactions/application-commands#permissions
*/ */
@@ -135,8 +135,8 @@ export class ContextMenuCommandBuilder {
/** /**
* Sets a name localization * Sets a name localization
* *
* @param locale The locale to set a description for * @param locale - The locale to set a description for
* @param localizedName The localized description for the given locale * @param localizedName - The localized description for the given locale
*/ */
public setNameLocalization(locale: LocaleString, localizedName: string | null) { public setNameLocalization(locale: LocaleString, localizedName: string | null) {
if (!this.name_localizations) { if (!this.name_localizations) {
@@ -159,7 +159,7 @@ export class ContextMenuCommandBuilder {
/** /**
* Sets the name localizations * Sets the name localizations
* *
* @param localizedNames The dictionary of localized descriptions to set * @param localizedNames - The dictionary of localized descriptions to set
*/ */
public setNameLocalizations(localizedNames: LocalizationMap | null) { public setNameLocalizations(localizedNames: LocalizationMap | null) {
if (localizedNames === null) { if (localizedNames === null) {

View File

@@ -18,7 +18,8 @@ export class UnsafeModalBuilder implements JSONEncodable<APIModalInteractionResp
/** /**
* Sets the title of the modal * Sets the title of the modal
* @param title The title of the modal *
* @param title - The title of the modal
*/ */
public setTitle(title: string) { public setTitle(title: string) {
this.data.title = title; this.data.title = title;
@@ -27,7 +28,8 @@ export class UnsafeModalBuilder implements JSONEncodable<APIModalInteractionResp
/** /**
* Sets the custom id of the modal * Sets the custom id of the modal
* @param customId The custom id of this modal *
* @param customId - The custom id of this modal
*/ */
public setCustomId(customId: string) { public setCustomId(customId: string) {
this.data.custom_id = customId; this.data.custom_id = customId;
@@ -36,7 +38,8 @@ export class UnsafeModalBuilder implements JSONEncodable<APIModalInteractionResp
/** /**
* Adds components to this modal * Adds components to this modal
* @param components The components to add to this modal *
* @param components - The components to add to this modal
*/ */
public addComponents( public addComponents(
...components: RestOrArray< ...components: RestOrArray<
@@ -55,7 +58,8 @@ export class UnsafeModalBuilder implements JSONEncodable<APIModalInteractionResp
/** /**
* Sets the components in this modal * Sets the components in this modal
* @param components The components to set this modal to *
* @param components - The components to set this modal to
*/ */
public setComponents(...components: RestOrArray<ActionRowBuilder<ModalActionRowComponentBuilder>>) { public setComponents(...components: RestOrArray<ActionRowBuilder<ModalActionRowComponentBuilder>>) {
this.components.splice(0, this.components.length, ...normalizeArray(components)); this.components.splice(0, this.components.length, ...normalizeArray(components));

View File

@@ -86,7 +86,7 @@ export class SlashCommandBuilder {
* *
* **Note**: If set to `false`, you will have to later `PUT` the permissions for this command. * **Note**: If set to `false`, you will have to later `PUT` the permissions for this command.
* *
* @param value Whether or not to enable this command by default * @param value - Whether or not to enable this command by default
* *
* @see https://discord.com/developers/docs/interactions/application-commands#permissions * @see https://discord.com/developers/docs/interactions/application-commands#permissions
* @deprecated Use `setDefaultMemberPermissions` or `setDMPermission` instead. * @deprecated Use `setDefaultMemberPermissions` or `setDMPermission` instead.
@@ -105,7 +105,7 @@ export class SlashCommandBuilder {
* *
* **Note:** You can set this to `'0'` to disable the command by default. * **Note:** You can set this to `'0'` to disable the command by default.
* *
* @param permissions The permissions bit field to set * @param permissions - The permissions bit field to set
* *
* @see https://discord.com/developers/docs/interactions/application-commands#permissions * @see https://discord.com/developers/docs/interactions/application-commands#permissions
*/ */
@@ -122,7 +122,7 @@ export class SlashCommandBuilder {
* Sets if the command is available in DMs with the application, only for globally-scoped commands. * Sets if the command is available in DMs with the application, only for globally-scoped commands.
* By default, commands are visible. * By default, commands are visible.
* *
* @param enabled If the command should be enabled in DMs * @param enabled - If the command should be enabled in DMs
* *
* @see https://discord.com/developers/docs/interactions/application-commands#permissions * @see https://discord.com/developers/docs/interactions/application-commands#permissions
*/ */
@@ -138,7 +138,7 @@ export class SlashCommandBuilder {
/** /**
* Adds a new subcommand group to this command * Adds a new subcommand group to this command
* *
* @param input A function that returns a subcommand group builder, or an already built builder * @param input - A function that returns a subcommand group builder, or an already built builder
*/ */
public addSubcommandGroup( public addSubcommandGroup(
input: input:
@@ -164,7 +164,7 @@ export class SlashCommandBuilder {
/** /**
* Adds a new subcommand to this command * Adds a new subcommand to this command
* *
* @param input A function that returns a subcommand builder, or an already built builder * @param input - A function that returns a subcommand builder, or an already built builder
*/ */
public addSubcommand( public addSubcommand(
input: input:

View File

@@ -35,7 +35,7 @@ export class SlashCommandSubcommandGroupBuilder implements ToAPIApplicationComma
/** /**
* Adds a new subcommand to this group * Adds a new subcommand to this group
* *
* @param input A function that returns a subcommand builder, or an already built builder * @param input - A function that returns a subcommand builder, or an already built builder
*/ */
public addSubcommand( public addSubcommand(
input: input:

View File

@@ -4,13 +4,15 @@ export abstract class ApplicationCommandNumericOptionMinMaxValueMixin {
/** /**
* Sets the maximum number value of this option * Sets the maximum number value of this option
* @param max The maximum value this option can be *
* @param max - The maximum value this option can be
*/ */
public abstract setMaxValue(max: number): this; public abstract setMaxValue(max: number): this;
/** /**
* Sets the minimum number value of this option * Sets the minimum number value of this option
* @param min The minimum value this option can be *
* @param min - The minimum value this option can be
*/ */
public abstract setMinValue(min: number): this; public abstract setMinValue(min: number): this;
} }

View File

@@ -10,7 +10,7 @@ export abstract class ApplicationCommandOptionBase extends SharedNameAndDescript
/** /**
* Marks the option as required * Marks the option as required
* *
* @param required If this option should be required * @param required - If this option should be required
*/ */
public setRequired(required: boolean) { public setRequired(required: boolean) {
// Assert that you actually passed a boolean // Assert that you actually passed a boolean

View File

@@ -23,7 +23,7 @@ export class ApplicationCommandOptionChannelTypesMixin {
/** /**
* Adds channel types to this option * Adds channel types to this option
* *
* @param channelTypes The channel types to add * @param channelTypes - The channel types to add
*/ */
public addChannelTypes(...channelTypes: ApplicationCommandOptionAllowedChannelTypes[]) { public addChannelTypes(...channelTypes: ApplicationCommandOptionAllowedChannelTypes[]) {
if (this.channel_types === undefined) { if (this.channel_types === undefined) {

View File

@@ -21,7 +21,7 @@ export class ApplicationCommandOptionWithChoicesAndAutocompleteMixin<T extends s
/** /**
* Adds multiple choices for this option * Adds multiple choices for this option
* *
* @param choices The choices to add * @param choices - The choices to add
*/ */
public addChoices(...choices: APIApplicationCommandOptionChoice<T>[]): this { public addChoices(...choices: APIApplicationCommandOptionChoice<T>[]): this {
if (choices.length > 0 && this.autocomplete) { if (choices.length > 0 && this.autocomplete) {
@@ -65,7 +65,7 @@ export class ApplicationCommandOptionWithChoicesAndAutocompleteMixin<T extends s
/** /**
* Marks the option as autocompletable * Marks the option as autocompletable
* @param autocomplete If this option should be autocompletable * @param autocomplete - If this option should be autocompletable
*/ */
public setAutocomplete(autocomplete: boolean): this { public setAutocomplete(autocomplete: boolean): this {
// Assert that you actually passed a boolean // Assert that you actually passed a boolean

View File

@@ -10,7 +10,7 @@ export class SharedNameAndDescription {
/** /**
* Sets the name * Sets the name
* *
* @param name The name * @param name - The name
*/ */
public setName(name: string): this { public setName(name: string): this {
// Assert the name matches the conditions // Assert the name matches the conditions
@@ -24,7 +24,7 @@ export class SharedNameAndDescription {
/** /**
* Sets the description * Sets the description
* *
* @param description The description * @param description - The description
*/ */
public setDescription(description: string) { public setDescription(description: string) {
// Assert the description matches the conditions // Assert the description matches the conditions
@@ -38,8 +38,8 @@ export class SharedNameAndDescription {
/** /**
* Sets a name localization * Sets a name localization
* *
* @param locale The locale to set a description for * @param locale - The locale to set a description for
* @param localizedName The localized description for the given locale * @param localizedName - The localized description for the given locale
*/ */
public setNameLocalization(locale: LocaleString, localizedName: string | null) { public setNameLocalization(locale: LocaleString, localizedName: string | null) {
if (!this.name_localizations) { if (!this.name_localizations) {
@@ -62,7 +62,7 @@ export class SharedNameAndDescription {
/** /**
* Sets the name localizations * Sets the name localizations
* *
* @param localizedNames The dictionary of localized descriptions to set * @param localizedNames - The dictionary of localized descriptions to set
*/ */
public setNameLocalizations(localizedNames: LocalizationMap | null) { public setNameLocalizations(localizedNames: LocalizationMap | null) {
if (localizedNames === null) { if (localizedNames === null) {
@@ -81,8 +81,8 @@ export class SharedNameAndDescription {
/** /**
* Sets a description localization * Sets a description localization
* *
* @param locale The locale to set a description for * @param locale - The locale to set a description for
* @param localizedDescription The localized description for the given locale * @param localizedDescription - The localized description for the given locale
*/ */
public setDescriptionLocalization(locale: LocaleString, localizedDescription: string | null) { public setDescriptionLocalization(locale: LocaleString, localizedDescription: string | null) {
if (!this.description_localizations) { if (!this.description_localizations) {
@@ -105,7 +105,7 @@ export class SharedNameAndDescription {
/** /**
* Sets the description localizations * Sets the description localizations
* *
* @param localizedDescriptions The dictionary of localized descriptions to set * @param localizedDescriptions - The dictionary of localized descriptions to set
*/ */
public setDescriptionLocalizations(localizedDescriptions: LocalizationMap | null) { public setDescriptionLocalizations(localizedDescriptions: LocalizationMap | null) {
if (localizedDescriptions === null) { if (localizedDescriptions === null) {

View File

@@ -17,7 +17,7 @@ export class SharedSlashCommandOptions<ShouldOmitSubcommandFunctions = true> {
/** /**
* Adds a boolean option * Adds a boolean option
* *
* @param input A function that returns an option builder, or an already built builder * @param input - A function that returns an option builder, or an already built builder
*/ */
public addBooleanOption( public addBooleanOption(
input: SlashCommandBooleanOption | ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption), input: SlashCommandBooleanOption | ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption),
@@ -28,7 +28,7 @@ export class SharedSlashCommandOptions<ShouldOmitSubcommandFunctions = true> {
/** /**
* Adds a user option * Adds a user option
* *
* @param input A function that returns an option builder, or an already built builder * @param input - A function that returns an option builder, or an already built builder
*/ */
public addUserOption(input: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)) { public addUserOption(input: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)) {
return this._sharedAddOptionMethod(input, SlashCommandUserOption); return this._sharedAddOptionMethod(input, SlashCommandUserOption);
@@ -37,7 +37,7 @@ export class SharedSlashCommandOptions<ShouldOmitSubcommandFunctions = true> {
/** /**
* Adds a channel option * Adds a channel option
* *
* @param input A function that returns an option builder, or an already built builder * @param input - A function that returns an option builder, or an already built builder
*/ */
public addChannelOption( public addChannelOption(
input: SlashCommandChannelOption | ((builder: SlashCommandChannelOption) => SlashCommandChannelOption), input: SlashCommandChannelOption | ((builder: SlashCommandChannelOption) => SlashCommandChannelOption),
@@ -48,7 +48,7 @@ export class SharedSlashCommandOptions<ShouldOmitSubcommandFunctions = true> {
/** /**
* Adds a role option * Adds a role option
* *
* @param input A function that returns an option builder, or an already built builder * @param input - A function that returns an option builder, or an already built builder
*/ */
public addRoleOption(input: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)) { public addRoleOption(input: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)) {
return this._sharedAddOptionMethod(input, SlashCommandRoleOption); return this._sharedAddOptionMethod(input, SlashCommandRoleOption);
@@ -57,7 +57,7 @@ export class SharedSlashCommandOptions<ShouldOmitSubcommandFunctions = true> {
/** /**
* Adds an attachment option * Adds an attachment option
* *
* @param input A function that returns an option builder, or an already built builder * @param input - A function that returns an option builder, or an already built builder
*/ */
public addAttachmentOption( public addAttachmentOption(
input: SlashCommandAttachmentOption | ((builder: SlashCommandAttachmentOption) => SlashCommandAttachmentOption), input: SlashCommandAttachmentOption | ((builder: SlashCommandAttachmentOption) => SlashCommandAttachmentOption),
@@ -68,7 +68,7 @@ export class SharedSlashCommandOptions<ShouldOmitSubcommandFunctions = true> {
/** /**
* Adds a mentionable option * Adds a mentionable option
* *
* @param input A function that returns an option builder, or an already built builder * @param input - A function that returns an option builder, or an already built builder
*/ */
public addMentionableOption( public addMentionableOption(
input: SlashCommandMentionableOption | ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption), input: SlashCommandMentionableOption | ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption),
@@ -79,7 +79,7 @@ export class SharedSlashCommandOptions<ShouldOmitSubcommandFunctions = true> {
/** /**
* Adds a string option * Adds a string option
* *
* @param input A function that returns an option builder, or an already built builder * @param input - A function that returns an option builder, or an already built builder
*/ */
public addStringOption( public addStringOption(
input: input:
@@ -99,7 +99,7 @@ export class SharedSlashCommandOptions<ShouldOmitSubcommandFunctions = true> {
/** /**
* Adds an integer option * Adds an integer option
* *
* @param input A function that returns an option builder, or an already built builder * @param input - A function that returns an option builder, or an already built builder
*/ */
public addIntegerOption( public addIntegerOption(
input: input:
@@ -119,7 +119,7 @@ export class SharedSlashCommandOptions<ShouldOmitSubcommandFunctions = true> {
/** /**
* Adds a number option * Adds a number option
* *
* @param input A function that returns an option builder, or an already built builder * @param input - A function that returns an option builder, or an already built builder
*/ */
public addNumberOption( public addNumberOption(
input: input:

View File

@@ -43,7 +43,7 @@ export class UnsafeEmbedBuilder {
/** /**
* Adds fields to the embed (max 25) * Adds fields to the embed (max 25)
* *
* @param fields The fields to add * @param fields - The fields to add
*/ */
public addFields(...fields: RestOrArray<APIEmbedField>): this { public addFields(...fields: RestOrArray<APIEmbedField>): this {
fields = normalizeArray(fields); fields = normalizeArray(fields);
@@ -55,9 +55,9 @@ export class UnsafeEmbedBuilder {
/** /**
* Removes, replaces, or inserts fields in the embed (max 25) * Removes, replaces, or inserts fields in the embed (max 25)
* *
* @param index The index to start at * @param index - The index to start at
* @param deleteCount The number of fields to remove * @param deleteCount - The number of fields to remove
* @param fields The replacing field objects * @param fields - The replacing field objects
*/ */
public spliceFields(index: number, deleteCount: number, ...fields: APIEmbedField[]): this { public spliceFields(index: number, deleteCount: number, ...fields: APIEmbedField[]): this {
if (this.data.fields) this.data.fields.splice(index, deleteCount, ...fields); if (this.data.fields) this.data.fields.splice(index, deleteCount, ...fields);
@@ -67,7 +67,8 @@ export class UnsafeEmbedBuilder {
/** /**
* Sets the embed's fields (max 25). * Sets the embed's fields (max 25).
* @param fields The fields to set *
* @param fields - The fields to set
*/ */
public setFields(...fields: RestOrArray<APIEmbedField>) { public setFields(...fields: RestOrArray<APIEmbedField>) {
this.spliceFields(0, this.data.fields?.length ?? 0, ...normalizeArray(fields)); this.spliceFields(0, this.data.fields?.length ?? 0, ...normalizeArray(fields));
@@ -77,7 +78,7 @@ export class UnsafeEmbedBuilder {
/** /**
* Sets the author of this embed * Sets the author of this embed
* *
* @param options The options for the author * @param options - The options for the author
*/ */
public setAuthor(options: EmbedAuthorOptions | null): this { public setAuthor(options: EmbedAuthorOptions | null): this {
if (options === null) { if (options === null) {
@@ -92,7 +93,7 @@ export class UnsafeEmbedBuilder {
/** /**
* Sets the color of this embed * Sets the color of this embed
* *
* @param color The color of the embed * @param color - The color of the embed
*/ */
public setColor(color: number | RGBTuple | null): this { public setColor(color: number | RGBTuple | null): this {
if (Array.isArray(color)) { if (Array.isArray(color)) {
@@ -107,7 +108,7 @@ export class UnsafeEmbedBuilder {
/** /**
* Sets the description of this embed * Sets the description of this embed
* *
* @param description The description * @param description - The description
*/ */
public setDescription(description: string | null): this { public setDescription(description: string | null): this {
this.data.description = description ?? undefined; this.data.description = description ?? undefined;
@@ -117,7 +118,7 @@ export class UnsafeEmbedBuilder {
/** /**
* Sets the footer of this embed * Sets the footer of this embed
* *
* @param options The options for the footer * @param options - The options for the footer
*/ */
public setFooter(options: EmbedFooterOptions | null): this { public setFooter(options: EmbedFooterOptions | null): this {
if (options === null) { if (options === null) {
@@ -132,7 +133,7 @@ export class UnsafeEmbedBuilder {
/** /**
* Sets the image of this embed * Sets the image of this embed
* *
* @param url The URL of the image * @param url - The URL of the image
*/ */
public setImage(url: string | null): this { public setImage(url: string | null): this {
this.data.image = url ? { url } : undefined; this.data.image = url ? { url } : undefined;
@@ -142,7 +143,7 @@ export class UnsafeEmbedBuilder {
/** /**
* Sets the thumbnail of this embed * Sets the thumbnail of this embed
* *
* @param url The URL of the thumbnail * @param url - The URL of the thumbnail
*/ */
public setThumbnail(url: string | null): this { public setThumbnail(url: string | null): this {
this.data.thumbnail = url ? { url } : undefined; this.data.thumbnail = url ? { url } : undefined;
@@ -152,7 +153,7 @@ export class UnsafeEmbedBuilder {
/** /**
* Sets the timestamp of this embed * Sets the timestamp of this embed
* *
* @param timestamp The timestamp or date * @param timestamp - The timestamp or date
*/ */
public setTimestamp(timestamp: number | Date | null = Date.now()): this { public setTimestamp(timestamp: number | Date | null = Date.now()): this {
this.data.timestamp = timestamp ? new Date(timestamp).toISOString() : undefined; this.data.timestamp = timestamp ? new Date(timestamp).toISOString() : undefined;
@@ -162,7 +163,7 @@ export class UnsafeEmbedBuilder {
/** /**
* Sets the title of this embed * Sets the title of this embed
* *
* @param title The title * @param title - The title
*/ */
public setTitle(title: string | null): this { public setTitle(title: string | null): this {
this.data.title = title ?? undefined; this.data.title = title ?? undefined;
@@ -172,7 +173,7 @@ export class UnsafeEmbedBuilder {
/** /**
* Sets the URL of this embed * Sets the URL of this embed
* *
* @param url The URL * @param url - The URL
*/ */
public setURL(url: string | null): this { public setURL(url: string | null): this {
this.data.url = url ?? undefined; this.data.url = url ?? undefined;

View File

@@ -4,15 +4,15 @@ import type { Snowflake } from 'discord-api-types/globals';
/** /**
* Wraps the content inside a codeblock with no language * Wraps the content inside a codeblock with no language
* *
* @param content The content to wrap * @param content - The content to wrap
*/ */
export function codeBlock<C extends string>(content: C): `\`\`\`\n${C}\`\`\``; export function codeBlock<C extends string>(content: C): `\`\`\`\n${C}\`\`\``;
/** /**
* Wraps the content inside a codeblock with the specified language * Wraps the content inside a codeblock with the specified language
* *
* @param language The language for the codeblock * @param language - The language for the codeblock
* @param content The content to wrap * @param content - The content to wrap
*/ */
export function codeBlock<L extends string, C extends string>(language: L, content: C): `\`\`\`${L}\n${C}\`\`\``; export function codeBlock<L extends string, C extends string>(language: L, content: C): `\`\`\`${L}\n${C}\`\`\``;
export function codeBlock(language: string, content?: string): string { export function codeBlock(language: string, content?: string): string {
@@ -22,7 +22,7 @@ export function codeBlock(language: string, content?: string): string {
/** /**
* Wraps the content inside \`backticks\`, which formats it as inline code * Wraps the content inside \`backticks\`, which formats it as inline code
* *
* @param content The content to wrap * @param content - The content to wrap
*/ */
export function inlineCode<C extends string>(content: C): `\`${C}\`` { export function inlineCode<C extends string>(content: C): `\`${C}\`` {
return `\`${content}\``; return `\`${content}\``;
@@ -31,7 +31,7 @@ export function inlineCode<C extends string>(content: C): `\`${C}\`` {
/** /**
* Formats the content into italic text * Formats the content into italic text
* *
* @param content The content to wrap * @param content - The content to wrap
*/ */
export function italic<C extends string>(content: C): `_${C}_` { export function italic<C extends string>(content: C): `_${C}_` {
return `_${content}_`; return `_${content}_`;
@@ -40,7 +40,7 @@ export function italic<C extends string>(content: C): `_${C}_` {
/** /**
* Formats the content into bold text * Formats the content into bold text
* *
* @param content The content to wrap * @param content - The content to wrap
*/ */
export function bold<C extends string>(content: C): `**${C}**` { export function bold<C extends string>(content: C): `**${C}**` {
return `**${content}**`; return `**${content}**`;
@@ -49,7 +49,7 @@ export function bold<C extends string>(content: C): `**${C}**` {
/** /**
* Formats the content into underscored text * Formats the content into underscored text
* *
* @param content The content to wrap * @param content - The content to wrap
*/ */
export function underscore<C extends string>(content: C): `__${C}__` { export function underscore<C extends string>(content: C): `__${C}__` {
return `__${content}__`; return `__${content}__`;
@@ -58,7 +58,7 @@ export function underscore<C extends string>(content: C): `__${C}__` {
/** /**
* Formats the content into strike-through text * Formats the content into strike-through text
* *
* @param content The content to wrap * @param content - The content to wrap
*/ */
export function strikethrough<C extends string>(content: C): `~~${C}~~` { export function strikethrough<C extends string>(content: C): `~~${C}~~` {
return `~~${content}~~`; return `~~${content}~~`;
@@ -67,7 +67,7 @@ export function strikethrough<C extends string>(content: C): `~~${C}~~` {
/** /**
* Formats the content into a quote. This needs to be at the start of the line for Discord to format it * Formats the content into a quote. This needs to be at the start of the line for Discord to format it
* *
* @param content The content to wrap * @param content - The content to wrap
*/ */
export function quote<C extends string>(content: C): `> ${C}` { export function quote<C extends string>(content: C): `> ${C}` {
return `> ${content}`; return `> ${content}`;
@@ -76,7 +76,7 @@ export function quote<C extends string>(content: C): `> ${C}` {
/** /**
* Formats the content into a block quote. This needs to be at the start of the line for Discord to format it * Formats the content into a block quote. This needs to be at the start of the line for Discord to format it
* *
* @param content The content to wrap * @param content - The content to wrap
*/ */
export function blockQuote<C extends string>(content: C): `>>> ${C}` { export function blockQuote<C extends string>(content: C): `>>> ${C}` {
return `>>> ${content}`; return `>>> ${content}`;
@@ -85,14 +85,14 @@ export function blockQuote<C extends string>(content: C): `>>> ${C}` {
/** /**
* Wraps the URL into `<>`, which stops it from embedding * Wraps the URL into `<>`, which stops it from embedding
* *
* @param url The URL to wrap * @param url - The URL to wrap
*/ */
export function hideLinkEmbed<C extends string>(url: C): `<${C}>`; export function hideLinkEmbed<C extends string>(url: C): `<${C}>`;
/** /**
* Wraps the URL into `<>`, which stops it from embedding * Wraps the URL into `<>`, which stops it from embedding
* *
* @param url The URL to wrap * @param url - The URL to wrap
*/ */
export function hideLinkEmbed(url: URL): `<${string}>`; export function hideLinkEmbed(url: URL): `<${string}>`;
export function hideLinkEmbed(url: string | URL) { export function hideLinkEmbed(url: string | URL) {
@@ -103,25 +103,25 @@ export function hideLinkEmbed(url: string | URL) {
/** /**
* Formats the content and the URL into a masked URL * Formats the content and the URL into a masked URL
* *
* @param content The content to display * @param content - The content to display
* @param url The URL the content links to * @param url - The URL the content links to
*/ */
export function hyperlink<C extends string>(content: C, url: URL): `[${C}](${string})`; export function hyperlink<C extends string>(content: C, url: URL): `[${C}](${string})`;
/** /**
* Formats the content and the URL into a masked URL * Formats the content and the URL into a masked URL
* *
* @param content The content to display * @param content - The content to display
* @param url The URL the content links to * @param url - The URL the content links to
*/ */
export function hyperlink<C extends string, U extends string>(content: C, url: U): `[${C}](${U})`; export function hyperlink<C extends string, U extends string>(content: C, url: U): `[${C}](${U})`;
/** /**
* Formats the content and the URL into a masked URL * Formats the content and the URL into a masked URL
* *
* @param content The content to display * @param content - The content to display
* @param url The URL the content links to * @param url - The URL the content links to
* @param title The title shown when hovering on the masked link * @param title - The title shown when hovering on the masked link
*/ */
export function hyperlink<C extends string, T extends string>( export function hyperlink<C extends string, T extends string>(
content: C, content: C,
@@ -132,9 +132,9 @@ export function hyperlink<C extends string, T extends string>(
/** /**
* Formats the content and the URL into a masked URL * Formats the content and the URL into a masked URL
* *
* @param content The content to display * @param content - The content to display
* @param url The URL the content links to * @param url - The URL the content links to
* @param title The title shown when hovering on the masked link * @param title - The title shown when hovering on the masked link
*/ */
export function hyperlink<C extends string, U extends string, T extends string>( export function hyperlink<C extends string, U extends string, T extends string>(
content: C, content: C,
@@ -149,7 +149,7 @@ export function hyperlink(content: string, url: string | URL, title?: string) {
/** /**
* Wraps the content inside spoiler (hidden text) * Wraps the content inside spoiler (hidden text)
* *
* @param content The content to wrap * @param content - The content to wrap
*/ */
export function spoiler<C extends string>(content: C): `||${C}||` { export function spoiler<C extends string>(content: C): `||${C}||` {
return `||${content}||`; return `||${content}||`;
@@ -158,7 +158,7 @@ export function spoiler<C extends string>(content: C): `||${C}||` {
/** /**
* Formats a user ID into a user mention * Formats a user ID into a user mention
* *
* @param userId The user ID to format * @param userId - The user ID to format
*/ */
export function userMention<C extends Snowflake>(userId: C): `<@${C}>` { export function userMention<C extends Snowflake>(userId: C): `<@${C}>` {
return `<@${userId}>`; return `<@${userId}>`;
@@ -167,7 +167,7 @@ export function userMention<C extends Snowflake>(userId: C): `<@${C}>` {
/** /**
* Formats a channel ID into a channel mention * Formats a channel ID into a channel mention
* *
* @param channelId The channel ID to format * @param channelId - The channel ID to format
*/ */
export function channelMention<C extends Snowflake>(channelId: C): `<#${C}>` { export function channelMention<C extends Snowflake>(channelId: C): `<#${C}>` {
return `<#${channelId}>`; return `<#${channelId}>`;
@@ -176,7 +176,7 @@ export function channelMention<C extends Snowflake>(channelId: C): `<#${C}>` {
/** /**
* Formats a role ID into a role mention * Formats a role ID into a role mention
* *
* @param roleId The role ID to format * @param roleId - The role ID to format
*/ */
export function roleMention<C extends Snowflake>(roleId: C): `<@&${C}>` { export function roleMention<C extends Snowflake>(roleId: C): `<@&${C}>` {
return `<@&${roleId}>`; return `<@&${roleId}>`;
@@ -185,23 +185,23 @@ export function roleMention<C extends Snowflake>(roleId: C): `<@&${C}>` {
/** /**
* Formats an emoji ID into a fully qualified emoji identifier * Formats an emoji ID into a fully qualified emoji identifier
* *
* @param emojiId The emoji ID to format * @param emojiId - The emoji ID to format
*/ */
export function formatEmoji<C extends Snowflake>(emojiId: C, animated?: false): `<:_:${C}>`; export function formatEmoji<C extends Snowflake>(emojiId: C, animated?: false): `<:_:${C}>`;
/** /**
* Formats an emoji ID into a fully qualified emoji identifier * Formats an emoji ID into a fully qualified emoji identifier
* *
* @param emojiId The emoji ID to format * @param emojiId - The emoji ID to format
* @param animated Whether the emoji is animated or not. Defaults to `false` * @param animated - Whether the emoji is animated or not. Defaults to `false`
*/ */
export function formatEmoji<C extends Snowflake>(emojiId: C, animated?: true): `<a:_:${C}>`; export function formatEmoji<C extends Snowflake>(emojiId: C, animated?: true): `<a:_:${C}>`;
/** /**
* Formats an emoji ID into a fully qualified emoji identifier * Formats an emoji ID into a fully qualified emoji identifier
* *
* @param emojiId The emoji ID to format * @param emojiId - The emoji ID to format
* @param animated Whether the emoji is animated or not. Defaults to `false` * @param animated - Whether the emoji is animated or not. Defaults to `false`
*/ */
export function formatEmoji<C extends Snowflake>(emojiId: C, animated = false): `<a:_:${C}>` | `<:_:${C}>` { export function formatEmoji<C extends Snowflake>(emojiId: C, animated = false): `<a:_:${C}>` | `<:_:${C}>` {
return `<${animated ? 'a' : ''}:_:${emojiId}>`; return `<${animated ? 'a' : ''}:_:${emojiId}>`;
@@ -210,30 +210,30 @@ export function formatEmoji<C extends Snowflake>(emojiId: C, animated = false):
/** /**
* Formats a date into a short date-time string * Formats a date into a short date-time string
* *
* @param date The date to format, defaults to the current time * @param date - The date to format, defaults to the current time
*/ */
export function time(date?: Date): `<t:${bigint}>`; export function time(date?: Date): `<t:${bigint}>`;
/** /**
* Formats a date given a format style * Formats a date given a format style
* *
* @param date The date to format * @param date - The date to format
* @param style The style to use * @param style - The style to use
*/ */
export function time<S extends TimestampStylesString>(date: Date, style: S): `<t:${bigint}:${S}>`; export function time<S extends TimestampStylesString>(date: Date, style: S): `<t:${bigint}:${S}>`;
/** /**
* Formats the given timestamp into a short date-time string * Formats the given timestamp into a short date-time string
* *
* @param seconds The time to format, represents an UNIX timestamp in seconds * @param seconds - The time to format, represents an UNIX timestamp in seconds
*/ */
export function time<C extends number>(seconds: C): `<t:${C}>`; export function time<C extends number>(seconds: C): `<t:${C}>`;
/** /**
* Formats the given timestamp into a short date-time string * Formats the given timestamp into a short date-time string
* *
* @param seconds The time to format, represents an UNIX timestamp in seconds * @param seconds - The time to format, represents an UNIX timestamp in seconds
* @param style The style to use * @param style - The style to use
*/ */
export function time<C extends number, S extends TimestampStylesString>(seconds: C, style: S): `<t:${C}:${S}>`; export function time<C extends number, S extends TimestampStylesString>(seconds: C, style: S): `<t:${C}:${S}>`;
export function time(timeOrSeconds?: number | Date, style?: TimestampStylesString): string { export function time(timeOrSeconds?: number | Date, style?: TimestampStylesString): string {

View File

@@ -7,7 +7,7 @@ export interface Equatable<T> {
/** /**
* Indicates if an object is equatable or not. * Indicates if an object is equatable or not.
* @param maybeEquatable The object to check against * @param maybeEquatable - The object to check against
*/ */
export function isEquatable(maybeEquatable: unknown): maybeEquatable is Equatable<unknown> { export function isEquatable(maybeEquatable: unknown): maybeEquatable is Equatable<unknown> {
return maybeEquatable !== null && typeof maybeEquatable === 'object' && 'equals' in maybeEquatable; return maybeEquatable !== null && typeof maybeEquatable === 'object' && 'equals' in maybeEquatable;

View File

@@ -7,7 +7,7 @@ export interface JSONEncodable<T> {
/** /**
* Indicates if an object is encodable or not. * Indicates if an object is encodable or not.
* @param maybeEncodable The object to check against * @param maybeEncodable - The object to check against
*/ */
export function isJSONEncodable(maybeEncodable: unknown): maybeEncodable is JSONEncodable<unknown> { export function isJSONEncodable(maybeEncodable: unknown): maybeEncodable is JSONEncodable<unknown> {
return maybeEncodable !== null && typeof maybeEncodable === 'object' && 'toJSON' in maybeEncodable; return maybeEncodable !== null && typeof maybeEncodable === 'object' && 'toJSON' in maybeEncodable;

View File

@@ -0,0 +1,376 @@
/**
* Config file for API Extractor. For more info, please visit: https://api-extractor.com
*/
{
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
/**
* Optionally specifies another JSON config file that this file extends from. This provides a way for
* standard settings to be shared across multiple projects.
*
* If the path starts with "./" or "../", the path is resolved relative to the folder of the file that contains
* the "extends" field. Otherwise, the first path segment is interpreted as an NPM package name, and will be
* resolved using NodeJS require().
*
* SUPPORTED TOKENS: none
* DEFAULT VALUE: ""
*/
// "extends": "./shared/api-extractor-base.json"
// "extends": "my-package/include/api-extractor-base.json"
/**
* Determines the "<projectFolder>" token that can be used with other config file settings. The project folder
* typically contains the tsconfig.json and package.json config files, but the path is user-defined.
*
* The path is resolved relative to the folder of the config file that contains the setting.
*
* The default value for "projectFolder" is the token "<lookup>", which means the folder is determined by traversing
* parent folders, starting from the folder containing api-extractor.json, and stopping at the first folder
* that contains a tsconfig.json file. If a tsconfig.json file cannot be found in this way, then an error
* will be reported.
*
* SUPPORTED TOKENS: <lookup>
* DEFAULT VALUE: "<lookup>"
*/
// "projectFolder": "..",
/**
* (REQUIRED) Specifies the .d.ts file to be used as the starting point for analysis. API Extractor
* analyzes the symbols exported by this module.
*
* The file extension must be ".d.ts" and not ".ts".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
*/
"mainEntryPointFilePath": "<projectFolder>/dist/index.d.ts",
/**
* A list of NPM package names whose exports should be treated as part of this package.
*
* For example, suppose that Webpack is used to generate a distributed bundle for the project "library1",
* and another NPM package "library2" is embedded in this bundle. Some types from library2 may become part
* of the exported API for library1, but by default API Extractor would generate a .d.ts rollup that explicitly
* imports library2. To avoid this, we can specify:
*
* "bundledPackages": [ "library2" ],
*
* This would direct API Extractor to embed those types directly in the .d.ts rollup, as if they had been
* local files for library1.
*/
"bundledPackages": [],
/**
* Determines how the TypeScript compiler engine will be invoked by API Extractor.
*/
"compiler": {
/**
* Specifies the path to the tsconfig.json file to be used by API Extractor when analyzing the project.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* Note: This setting will be ignored if "overrideTsconfig" is used.
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/tsconfig.json"
*/
// "tsconfigFilePath": "<projectFolder>/tsconfig.json",
/**
* Provides a compiler configuration that will be used instead of reading the tsconfig.json file from disk.
* The object must conform to the TypeScript tsconfig schema:
*
* http://json.schemastore.org/tsconfig
*
* If omitted, then the tsconfig.json file will be read from the "projectFolder".
*
* DEFAULT VALUE: no overrideTsconfig section
*/
// "overrideTsconfig": {
// . . .
// }
/**
* This option causes the compiler to be invoked with the --skipLibCheck option. This option is not recommended
* and may cause API Extractor to produce incomplete or incorrect declarations, but it may be required when
* dependencies contain declarations that are incompatible with the TypeScript engine that API Extractor uses
* for its analysis. Where possible, the underlying issue should be fixed rather than relying on skipLibCheck.
*
* DEFAULT VALUE: false
*/
// "skipLibCheck": true,
},
/**
* Configures how the API report file (*.api.md) will be generated.
*/
"apiReport": {
/**
* (REQUIRED) Whether to generate an API report.
*/
"enabled": false
/**
* The filename for the API report files. It will be combined with "reportFolder" or "reportTempFolder" to produce
* a full file path.
*
* The file extension should be ".api.md", and the string should not contain a path separator such as "\" or "/".
*
* SUPPORTED TOKENS: <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<unscopedPackageName>.api.md"
*/
// "reportFileName": "<unscopedPackageName>.api.md",
/**
* Specifies the folder where the API report file is written. The file name portion is determined by
* the "reportFileName" setting.
*
* The API report file is normally tracked by Git. Changes to it can be used to trigger a branch policy,
* e.g. for an API review.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/temp/"
*/
// "reportFolder": "<projectFolder>/temp/",
/**
* Specifies the folder where the temporary report file is written. The file name portion is determined by
* the "reportFileName" setting.
*
* After the temporary file is written to disk, it is compared with the file in the "reportFolder".
* If they are different, a production build will fail.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/temp/"
*/
// "reportTempFolder": "<projectFolder>/temp/"
},
/**
* Configures how the doc model file (*.api.json) will be generated.
*/
"docModel": {
/**
* (REQUIRED) Whether to generate a doc model file.
*/
"enabled": true,
/**
* The output path for the doc model file. The file extension should be ".api.json".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/temp/<unscopedPackageName>.api.json"
*/
"apiJsonFilePath": "<projectFolder>/docs/docs.api.json"
},
/**
* Configures how the .d.ts rollup file will be generated.
*/
"dtsRollup": {
/**
* (REQUIRED) Whether to generate the .d.ts rollup file.
*/
"enabled": false
/**
* Specifies the output path for a .d.ts rollup file to be generated without any trimming.
* This file will include all declarations that are exported by the main entry point.
*
* If the path is an empty string, then this file will not be written.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/dist/<unscopedPackageName>.d.ts"
*/
// "untrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>.d.ts",
/**
* Specifies the output path for a .d.ts rollup file to be generated with trimming for an "alpha" release.
* This file will include only declarations that are marked as "@public", "@beta", or "@alpha".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: ""
*/
// "alphaTrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>-alpha.d.ts",
/**
* Specifies the output path for a .d.ts rollup file to be generated with trimming for a "beta" release.
* This file will include only declarations that are marked as "@public" or "@beta".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: ""
*/
// "betaTrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>-beta.d.ts",
/**
* Specifies the output path for a .d.ts rollup file to be generated with trimming for a "public" release.
* This file will include only declarations that are marked as "@public".
*
* If the path is an empty string, then this file will not be written.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: ""
*/
// "publicTrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>-public.d.ts",
/**
* When a declaration is trimmed, by default it will be replaced by a code comment such as
* "Excluded from this release type: exampleMember". Set "omitTrimmingComments" to true to remove the
* declaration completely.
*
* DEFAULT VALUE: false
*/
// "omitTrimmingComments": true
},
/**
* Configures how the tsdoc-metadata.json file will be generated.
*/
"tsdocMetadata": {
/**
* Whether to generate the tsdoc-metadata.json file.
*
* DEFAULT VALUE: true
*/
// "enabled": true,
/**
* Specifies where the TSDoc metadata file should be written.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* The default value is "<lookup>", which causes the path to be automatically inferred from the "tsdocMetadata",
* "typings" or "main" fields of the project's package.json. If none of these fields are set, the lookup
* falls back to "tsdoc-metadata.json" in the package folder.
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<lookup>"
*/
// "tsdocMetadataFilePath": "<projectFolder>/dist/tsdoc-metadata.json"
},
/**
* Specifies what type of newlines API Extractor should use when writing output files. By default, the output files
* will be written with Windows-style newlines. To use POSIX-style newlines, specify "lf" instead.
* To use the OS's default newline kind, specify "os".
*
* DEFAULT VALUE: "crlf"
*/
"newlineKind": "lf",
/**
* Configures how API Extractor reports error and warning messages produced during analysis.
*
* There are three sources of messages: compiler messages, API Extractor messages, and TSDoc messages.
*/
"messages": {
/**
* Configures handling of diagnostic messages reported by the TypeScript compiler engine while analyzing
* the input .d.ts files.
*
* TypeScript message identifiers start with "TS" followed by an integer. For example: "TS2551"
*
* DEFAULT VALUE: A single "default" entry with logLevel=warning.
*/
"compilerMessageReporting": {
/**
* Configures the default routing for messages that don't match an explicit rule in this table.
*/
"default": {
/**
* Specifies whether the message should be written to the the tool's output log. Note that
* the "addToApiReportFile" property may supersede this option.
*
* Possible values: "error", "warning", "none"
*
* Errors cause the build to fail and return a nonzero exit code. Warnings cause a production build fail
* and return a nonzero exit code. For a non-production build (e.g. when "api-extractor run" includes
* the "--local" option), the warning is displayed but the build will not fail.
*
* DEFAULT VALUE: "warning"
*/
"logLevel": "warning"
/**
* When addToApiReportFile is true: If API Extractor is configured to write an API report file (.api.md),
* then the message will be written inside that file; otherwise, the message is instead logged according to
* the "logLevel" option.
*
* DEFAULT VALUE: false
*/
// "addToApiReportFile": false
}
// "TS2551": {
// "logLevel": "warning",
// "addToApiReportFile": true
// },
//
// . . .
},
/**
* Configures handling of messages reported by API Extractor during its analysis.
*
* API Extractor message identifiers start with "ae-". For example: "ae-extra-release-tag"
*
* DEFAULT VALUE: See api-extractor-defaults.json for the complete table of extractorMessageReporting mappings
*/
"extractorMessageReporting": {
"default": {
"logLevel": "warning"
// "addToApiReportFile": false
}
// "ae-extra-release-tag": {
// "logLevel": "warning",
// "addToApiReportFile": true
// },
//
// . . .
},
/**
* Configures handling of messages reported by the TSDoc parser when analyzing code comments.
*
* TSDoc message identifiers start with "tsdoc-". For example: "tsdoc-link-tag-unescaped-text"
*
* DEFAULT VALUE: A single "default" entry with logLevel=warning.
*/
"tsdocMessageReporting": {
"default": {
"logLevel": "warning"
// "addToApiReportFile": false
}
// "tsdoc-link-tag-unescaped-text": {
// "logLevel": "warning",
// "addToApiReportFile": true
// },
//
// . . .
}
}
}

View File

@@ -6,7 +6,7 @@
"build": "tsup", "build": "tsup",
"lint": "prettier --cache --check . && eslint src __tests__ --ext mjs,js,ts --cache", "lint": "prettier --cache --check . && eslint src __tests__ --ext mjs,js,ts --cache",
"format": "prettier --cache --write . && eslint src __tests__ --ext mjs,js,ts --fix --cache", "format": "prettier --cache --write . && eslint src __tests__ --ext mjs,js,ts --fix --cache",
"docs": "docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript", "docs": "docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript && api-extractor run --local",
"prepack": "yarn build && yarn lint", "prepack": "yarn build && yarn lint",
"changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/collection/*'", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/collection/*'",
"release": "cliff-jumper" "release": "cliff-jumper"
@@ -51,6 +51,7 @@
"@discordjs/docgen": "workspace:^", "@discordjs/docgen": "workspace:^",
"@discordjs/scripts": "workspace:^", "@discordjs/scripts": "workspace:^",
"@favware/cliff-jumper": "^1.8.3", "@favware/cliff-jumper": "^1.8.3",
"@microsoft/api-extractor": "^7.28.2",
"@types/node": "^18.0.0", "@types/node": "^18.0.0",
"eslint": "^8.18.0", "eslint": "^8.18.0",
"prettier": "^2.7.1", "prettier": "^2.7.1",

View File

@@ -33,8 +33,8 @@ export class Collection<K, V> extends Map<K, V> {
/** /**
* Obtains the value of the given key if it exists, otherwise sets and returns the value provided by the default value generator. * Obtains the value of the given key if it exists, otherwise sets and returns the value provided by the default value generator.
* *
* @param key The key to get if it exists, or set otherwise * @param key - The key to get if it exists, or set otherwise
* @param defaultValueGenerator A function that generates the default value * @param defaultValueGenerator - A function that generates the default value
* *
* @example * @example
* collection.ensure(guildId, () => defaultGuildConfig); * collection.ensure(guildId, () => defaultGuildConfig);
@@ -72,7 +72,7 @@ export class Collection<K, V> extends Map<K, V> {
/** /**
* Obtains the first value(s) in this collection. * Obtains the first value(s) in this collection.
* *
* @param amount Amount of values to obtain from the beginning * @param amount - Amount of values to obtain from the beginning
* *
* @returns A single value if no amount is provided or an array of values, starting from the end if amount is negative * @returns A single value if no amount is provided or an array of values, starting from the end if amount is negative
*/ */
@@ -91,7 +91,7 @@ export class Collection<K, V> extends Map<K, V> {
/** /**
* Obtains the first key(s) in this collection. * Obtains the first key(s) in this collection.
* *
* @param amount Amount of keys to obtain from the beginning * @param amount - Amount of keys to obtain from the beginning
* *
* @returns A single key if no amount is provided or an array of keys, starting from the end if * @returns A single key if no amount is provided or an array of keys, starting from the end if
* amount is negative * amount is negative
@@ -111,7 +111,7 @@ export class Collection<K, V> extends Map<K, V> {
/** /**
* Obtains the last value(s) in this collection. * Obtains the last value(s) in this collection.
* *
* @param amount Amount of values to obtain from the end * @param amount - Amount of values to obtain from the end
* *
* @returns A single value if no amount is provided or an array of values, starting from the start if * @returns A single value if no amount is provided or an array of values, starting from the start if
* amount is negative * amount is negative
@@ -129,7 +129,7 @@ export class Collection<K, V> extends Map<K, V> {
/** /**
* Obtains the last key(s) in this collection. * Obtains the last key(s) in this collection.
* *
* @param amount Amount of keys to obtain from the end * @param amount - Amount of keys to obtain from the end
* *
* @returns A single key if no amount is provided or an array of keys, starting from the start if * @returns A single key if no amount is provided or an array of keys, starting from the start if
* amount is negative * amount is negative
@@ -149,7 +149,7 @@ export class Collection<K, V> extends Map<K, V> {
* Returns the item at a given index, allowing for positive and negative integers. * Returns the item at a given index, allowing for positive and negative integers.
* Negative integers count back from the last item in the collection. * Negative integers count back from the last item in the collection.
* *
* @param index The index of the element to obtain * @param index - The index of the element to obtain
*/ */
public at(index: number) { public at(index: number) {
index = Math.floor(index); index = Math.floor(index);
@@ -162,7 +162,7 @@ export class Collection<K, V> extends Map<K, V> {
* Returns the key at a given index, allowing for positive and negative integers. * Returns the key at a given index, allowing for positive and negative integers.
* Negative integers count back from the last item in the collection. * Negative integers count back from the last item in the collection.
* *
* @param index The index of the key to obtain * @param index - The index of the key to obtain
*/ */
public keyAt(index: number) { public keyAt(index: number) {
index = Math.floor(index); index = Math.floor(index);
@@ -173,7 +173,7 @@ export class Collection<K, V> extends Map<K, V> {
/** /**
* Obtains unique random value(s) from this collection. * Obtains unique random value(s) from this collection.
* *
* @param amount Amount of values to obtain randomly * @param amount - Amount of values to obtain randomly
* *
* @returns A single value if no amount is provided or an array of values * @returns A single value if no amount is provided or an array of values
*/ */
@@ -192,7 +192,7 @@ export class Collection<K, V> extends Map<K, V> {
/** /**
* Obtains unique random key(s) from this collection. * Obtains unique random key(s) from this collection.
* *
* @param amount Amount of keys to obtain randomly * @param amount - Amount of keys to obtain randomly
* *
* @returns A single key if no amount is provided or an array * @returns A single key if no amount is provided or an array
*/ */
@@ -226,8 +226,8 @@ export class Collection<K, V> extends Map<K, V> {
* should use the `get` method. See * should use the `get` method. See
* [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/get) for details.</warn> * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/get) for details.</warn>
* *
* @param fn The function to test with (should return boolean) * @param fn - The function to test with (should return boolean)
* @param thisArg Value to use as `this` when executing function * @param thisArg - Value to use as `this` when executing function
* *
* @example * @example
* collection.find(user => user.username === 'Bob'); * collection.find(user => user.username === 'Bob');
@@ -253,8 +253,8 @@ export class Collection<K, V> extends Map<K, V> {
* [Array.findIndex()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex), * [Array.findIndex()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex),
* but returns the key rather than the positional index. * but returns the key rather than the positional index.
* *
* @param fn The function to test with (should return boolean) * @param fn - The function to test with (should return boolean)
* @param thisArg Value to use as `this` when executing function * @param thisArg - Value to use as `this` when executing function
* *
* @example * @example
* collection.findKey(user => user.username === 'Bob'); * collection.findKey(user => user.username === 'Bob');
@@ -278,8 +278,8 @@ export class Collection<K, V> extends Map<K, V> {
/** /**
* Removes items that satisfy the provided filter function. * Removes items that satisfy the provided filter function.
* *
* @param fn Function used to test (should return a boolean) * @param fn - Function used to test (should return a boolean)
* @param thisArg Value to use as `this` when executing function * @param thisArg - Value to use as `this` when executing function
* *
* @returns The number of removed entries * @returns The number of removed entries
*/ */
@@ -300,8 +300,8 @@ export class Collection<K, V> extends Map<K, V> {
* [Array.filter()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter), * [Array.filter()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter),
* but returns a Collection instead of an Array. * but returns a Collection instead of an Array.
* *
* @param fn The function to test with (should return boolean) * @param fn - The function to test with (should return boolean)
* @param thisArg Value to use as `this` when executing function * @param thisArg - Value to use as `this` when executing function
* *
* @example * @example
* collection.filter(user => user.username === 'Bob'); * collection.filter(user => user.username === 'Bob');
@@ -332,8 +332,8 @@ export class Collection<K, V> extends Map<K, V> {
* Partitions the collection into two collections where the first collection * Partitions the collection into two collections where the first collection
* contains the items that passed and the second contains the items that failed. * contains the items that passed and the second contains the items that failed.
* *
* @param fn Function used to test (should return a boolean) * @param fn - Function used to test (should return a boolean)
* @param thisArg Value to use as `this` when executing function * @param thisArg - Value to use as `this` when executing function
* *
* @example * @example
* const [big, small] = collection.partition(guild => guild.memberCount > 250); * const [big, small] = collection.partition(guild => guild.memberCount > 250);
@@ -381,8 +381,8 @@ export class Collection<K, V> extends Map<K, V> {
* Maps each item into a Collection, then joins the results into a single Collection. Identical in behavior to * Maps each item into a Collection, then joins the results into a single Collection. Identical in behavior to
* [Array.flatMap()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap). * [Array.flatMap()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap).
* *
* @param fn Function that produces a new Collection * @param fn - Function that produces a new Collection
* @param thisArg Value to use as `this` when executing function * @param thisArg - Value to use as `this` when executing function
* *
* @example * @example
* collection.flatMap(guild => guild.members.cache); * collection.flatMap(guild => guild.members.cache);
@@ -401,8 +401,8 @@ export class Collection<K, V> extends Map<K, V> {
* Maps each item to another value into an array. Identical in behavior to * Maps each item to another value into an array. Identical in behavior to
* [Array.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map). * [Array.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map).
* *
* @param fn Function that produces an element of the new array, taking three arguments * @param fn - Function that produces an element of the new array, taking three arguments
* @param thisArg Value to use as `this` when executing function * @param thisArg - Value to use as `this` when executing function
* *
* @example * @example
* collection.map(user => user.tag); * collection.map(user => user.tag);
@@ -425,8 +425,8 @@ export class Collection<K, V> extends Map<K, V> {
* Maps each item to another value into a collection. Identical in behavior to * Maps each item to another value into a collection. Identical in behavior to
* [Array.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map). * [Array.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map).
* *
* @param fn Function that produces an element of the new collection, taking three arguments * @param fn - Function that produces an element of the new collection, taking three arguments
* @param thisArg Value to use as `this` when executing function * @param thisArg - Value to use as `this` when executing function
* *
* @example * @example
* collection.mapValues(user => user.tag); * collection.mapValues(user => user.tag);
@@ -445,8 +445,8 @@ export class Collection<K, V> extends Map<K, V> {
* Checks if there exists an item that passes a test. Identical in behavior to * Checks if there exists an item that passes a test. Identical in behavior to
* [Array.some()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some). * [Array.some()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some).
* *
* @param fn Function used to test (should return a boolean) * @param fn - Function used to test (should return a boolean)
* @param thisArg Value to use as `this` when executing function * @param thisArg - Value to use as `this` when executing function
* *
* @example * @example
* collection.some(user => user.discriminator === '0000'); * collection.some(user => user.discriminator === '0000');
@@ -466,8 +466,8 @@ export class Collection<K, V> extends Map<K, V> {
* Checks if all items passes a test. Identical in behavior to * Checks if all items passes a test. Identical in behavior to
* [Array.every()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every). * [Array.every()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every).
* *
* @param fn Function used to test (should return a boolean) * @param fn - Function used to test (should return a boolean)
* @param thisArg Value to use as `this` when executing function * @param thisArg - Value to use as `this` when executing function
* *
* @example * @example
* collection.every(user => !user.bot); * collection.every(user => !user.bot);
@@ -497,9 +497,9 @@ export class Collection<K, V> extends Map<K, V> {
* Applies a function to produce a single value. Identical in behavior to * Applies a function to produce a single value. Identical in behavior to
* [Array.reduce()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce). * [Array.reduce()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce).
* *
* @param fn Function used to reduce, taking four arguments; `accumulator`, `currentValue`, `currentKey`, * @param fn - Function used to reduce, taking four arguments; `accumulator`, `currentValue`, `currentKey`,
* and `collection` * and `collection`
* @param initialValue Starting value for the accumulator * @param initialValue - Starting value for the accumulator
* *
* @example * @example
* collection.reduce((acc, guild) => acc + guild.memberCount, 0); * collection.reduce((acc, guild) => acc + guild.memberCount, 0);
@@ -536,8 +536,8 @@ export class Collection<K, V> extends Map<K, V> {
* [Map.forEach()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/forEach), * [Map.forEach()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/forEach),
* but returns the collection instead of undefined. * but returns the collection instead of undefined.
* *
* @param fn Function to execute for each element * @param fn - Function to execute for each element
* @param thisArg Value to use as `this` when executing function * @param thisArg - Value to use as `this` when executing function
* *
* @example * @example
* collection * collection
@@ -556,8 +556,8 @@ export class Collection<K, V> extends Map<K, V> {
/** /**
* Runs a function on the collection and returns the collection. * Runs a function on the collection and returns the collection.
* *
* @param fn Function to execute * @param fn - Function to execute
* @param thisArg Value to use as `this` when executing function * @param thisArg - Value to use as `this` when executing function
* *
* @example * @example
* collection * collection
@@ -587,7 +587,7 @@ export class Collection<K, V> extends Map<K, V> {
/** /**
* Combines this collection with others into a new collection. None of the source collections are modified. * Combines this collection with others into a new collection. None of the source collections are modified.
* *
* @param collections Collections to merge * @param collections - Collections to merge
* *
* @example * @example
* const newColl = someColl.concat(someOtherColl, anotherColl, ohBoyAColl); * const newColl = someColl.concat(someOtherColl, anotherColl, ohBoyAColl);
@@ -605,7 +605,7 @@ export class Collection<K, V> extends Map<K, V> {
* This is different to checking for equality using equal-signs, because * This is different to checking for equality using equal-signs, because
* the collections may be different objects, but contain the same data. * the collections may be different objects, but contain the same data.
* *
* @param collection Collection to compare with * @param collection - Collection to compare with
* *
* @returns Whether the collections have identical contents * @returns Whether the collections have identical contents
*/ */
@@ -627,7 +627,7 @@ export class Collection<K, V> extends Map<K, V> {
* The sort is not necessarily stable in Node 10 or older. * The sort is not necessarily stable in Node 10 or older.
* The default sort order is according to string Unicode code points. * The default sort order is according to string Unicode code points.
* *
* @param compareFunction Specifies a function that defines the sort order. * @param compareFunction - Specifies a function that defines the sort order.
* If omitted, the collection is sorted according to each character's Unicode code point value, according to the string conversion of each element. * If omitted, the collection is sorted according to each character's Unicode code point value, according to the string conversion of each element.
* *
* @example * @example
@@ -650,7 +650,7 @@ export class Collection<K, V> extends Map<K, V> {
/** /**
* The intersect method returns a new structure containing items where the keys and values are present in both original structures. * The intersect method returns a new structure containing items where the keys and values are present in both original structures.
* *
* @param other The other Collection to filter against * @param other - The other Collection to filter against
*/ */
public intersect<T>(other: ReadonlyCollection<K, T>): Collection<K, T> { public intersect<T>(other: ReadonlyCollection<K, T>): Collection<K, T> {
const coll = new this.constructor[Symbol.species]<K, T>(); const coll = new this.constructor[Symbol.species]<K, T>();
@@ -665,7 +665,7 @@ export class Collection<K, V> extends Map<K, V> {
/** /**
* The difference method returns a new structure containing items where the key is present in one of the original structures but not the other. * The difference method returns a new structure containing items where the key is present in one of the original structures but not the other.
* *
* @param other The other Collection to filter against * @param other - The other Collection to filter against
*/ */
public difference<T>(other: ReadonlyCollection<K, T>): Collection<K, V | T> { public difference<T>(other: ReadonlyCollection<K, T>): Collection<K, V | T> {
const coll = new this.constructor[Symbol.species]<K, V | T>(); const coll = new this.constructor[Symbol.species]<K, V | T>();
@@ -680,10 +680,10 @@ export class Collection<K, V> extends Map<K, V> {
/** /**
* Merges two Collections together into a new Collection. * Merges two Collections together into a new Collection.
* @param other The other Collection to merge with * @param other - The other Collection to merge with
* @param whenInSelf Function getting the result if the entry only exists in this Collection * @param whenInSelf - Function getting the result if the entry only exists in this Collection
* @param whenInOther Function getting the result if the entry only exists in the other Collection * @param whenInOther - Function getting the result if the entry only exists in the other Collection
* @param whenInBoth Function getting the result if the entry exists in both Collections * @param whenInBoth - Function getting the result if the entry exists in both Collections
* *
* @example * @example
* // Sums up the entries in two collections. * // Sums up the entries in two collections.
@@ -734,7 +734,7 @@ export class Collection<K, V> extends Map<K, V> {
* The sort is not necessarily stable in Node 10 or older. * The sort is not necessarily stable in Node 10 or older.
* The default sort order is according to string Unicode code points. * The default sort order is according to string Unicode code points.
* *
* @param compareFunction Specifies a function that defines the sort order. * @param compareFunction - Specifies a function that defines the sort order.
* If omitted, the collection is sorted according to each character's Unicode code point value, * If omitted, the collection is sorted according to each character's Unicode code point value,
* according to the string conversion of each element. * according to the string conversion of each element.
* *
@@ -756,8 +756,9 @@ export class Collection<K, V> extends Map<K, V> {
/** /**
* Creates a Collection from a list of entries. * Creates a Collection from a list of entries.
* @param entries The list of entries *
* @param combine Function to combine an existing entry with a new one * @param entries - The list of entries
* @param combine - Function to combine an existing entry with a new one
* *
* @example * @example
* Collection.combineEntries([["a", 1], ["b", 2], ["a", 2]], (x, y) => x + y); * Collection.combineEntries([["a", 1], ["b", 2], ["a", 2]], (x, y) => x + y);

View File

@@ -0,0 +1,376 @@
/**
* Config file for API Extractor. For more info, please visit: https://api-extractor.com
*/
{
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
/**
* Optionally specifies another JSON config file that this file extends from. This provides a way for
* standard settings to be shared across multiple projects.
*
* If the path starts with "./" or "../", the path is resolved relative to the folder of the file that contains
* the "extends" field. Otherwise, the first path segment is interpreted as an NPM package name, and will be
* resolved using NodeJS require().
*
* SUPPORTED TOKENS: none
* DEFAULT VALUE: ""
*/
// "extends": "./shared/api-extractor-base.json"
// "extends": "my-package/include/api-extractor-base.json"
/**
* Determines the "<projectFolder>" token that can be used with other config file settings. The project folder
* typically contains the tsconfig.json and package.json config files, but the path is user-defined.
*
* The path is resolved relative to the folder of the config file that contains the setting.
*
* The default value for "projectFolder" is the token "<lookup>", which means the folder is determined by traversing
* parent folders, starting from the folder containing api-extractor.json, and stopping at the first folder
* that contains a tsconfig.json file. If a tsconfig.json file cannot be found in this way, then an error
* will be reported.
*
* SUPPORTED TOKENS: <lookup>
* DEFAULT VALUE: "<lookup>"
*/
// "projectFolder": "..",
/**
* (REQUIRED) Specifies the .d.ts file to be used as the starting point for analysis. API Extractor
* analyzes the symbols exported by this module.
*
* The file extension must be ".d.ts" and not ".ts".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
*/
"mainEntryPointFilePath": "<projectFolder>/dist/index.d.ts",
/**
* A list of NPM package names whose exports should be treated as part of this package.
*
* For example, suppose that Webpack is used to generate a distributed bundle for the project "library1",
* and another NPM package "library2" is embedded in this bundle. Some types from library2 may become part
* of the exported API for library1, but by default API Extractor would generate a .d.ts rollup that explicitly
* imports library2. To avoid this, we can specify:
*
* "bundledPackages": [ "library2" ],
*
* This would direct API Extractor to embed those types directly in the .d.ts rollup, as if they had been
* local files for library1.
*/
"bundledPackages": [],
/**
* Determines how the TypeScript compiler engine will be invoked by API Extractor.
*/
"compiler": {
/**
* Specifies the path to the tsconfig.json file to be used by API Extractor when analyzing the project.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* Note: This setting will be ignored if "overrideTsconfig" is used.
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/tsconfig.json"
*/
// "tsconfigFilePath": "<projectFolder>/tsconfig.json",
/**
* Provides a compiler configuration that will be used instead of reading the tsconfig.json file from disk.
* The object must conform to the TypeScript tsconfig schema:
*
* http://json.schemastore.org/tsconfig
*
* If omitted, then the tsconfig.json file will be read from the "projectFolder".
*
* DEFAULT VALUE: no overrideTsconfig section
*/
// "overrideTsconfig": {
// . . .
// }
/**
* This option causes the compiler to be invoked with the --skipLibCheck option. This option is not recommended
* and may cause API Extractor to produce incomplete or incorrect declarations, but it may be required when
* dependencies contain declarations that are incompatible with the TypeScript engine that API Extractor uses
* for its analysis. Where possible, the underlying issue should be fixed rather than relying on skipLibCheck.
*
* DEFAULT VALUE: false
*/
// "skipLibCheck": true,
},
/**
* Configures how the API report file (*.api.md) will be generated.
*/
"apiReport": {
/**
* (REQUIRED) Whether to generate an API report.
*/
"enabled": false
/**
* The filename for the API report files. It will be combined with "reportFolder" or "reportTempFolder" to produce
* a full file path.
*
* The file extension should be ".api.md", and the string should not contain a path separator such as "\" or "/".
*
* SUPPORTED TOKENS: <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<unscopedPackageName>.api.md"
*/
// "reportFileName": "<unscopedPackageName>.api.md",
/**
* Specifies the folder where the API report file is written. The file name portion is determined by
* the "reportFileName" setting.
*
* The API report file is normally tracked by Git. Changes to it can be used to trigger a branch policy,
* e.g. for an API review.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/temp/"
*/
// "reportFolder": "<projectFolder>/temp/",
/**
* Specifies the folder where the temporary report file is written. The file name portion is determined by
* the "reportFileName" setting.
*
* After the temporary file is written to disk, it is compared with the file in the "reportFolder".
* If they are different, a production build will fail.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/temp/"
*/
// "reportTempFolder": "<projectFolder>/temp/"
},
/**
* Configures how the doc model file (*.api.json) will be generated.
*/
"docModel": {
/**
* (REQUIRED) Whether to generate a doc model file.
*/
"enabled": true,
/**
* The output path for the doc model file. The file extension should be ".api.json".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/temp/<unscopedPackageName>.api.json"
*/
"apiJsonFilePath": "<projectFolder>/docs/docs.api.json"
},
/**
* Configures how the .d.ts rollup file will be generated.
*/
"dtsRollup": {
/**
* (REQUIRED) Whether to generate the .d.ts rollup file.
*/
"enabled": false
/**
* Specifies the output path for a .d.ts rollup file to be generated without any trimming.
* This file will include all declarations that are exported by the main entry point.
*
* If the path is an empty string, then this file will not be written.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/dist/<unscopedPackageName>.d.ts"
*/
// "untrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>.d.ts",
/**
* Specifies the output path for a .d.ts rollup file to be generated with trimming for an "alpha" release.
* This file will include only declarations that are marked as "@public", "@beta", or "@alpha".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: ""
*/
// "alphaTrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>-alpha.d.ts",
/**
* Specifies the output path for a .d.ts rollup file to be generated with trimming for a "beta" release.
* This file will include only declarations that are marked as "@public" or "@beta".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: ""
*/
// "betaTrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>-beta.d.ts",
/**
* Specifies the output path for a .d.ts rollup file to be generated with trimming for a "public" release.
* This file will include only declarations that are marked as "@public".
*
* If the path is an empty string, then this file will not be written.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: ""
*/
// "publicTrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>-public.d.ts",
/**
* When a declaration is trimmed, by default it will be replaced by a code comment such as
* "Excluded from this release type: exampleMember". Set "omitTrimmingComments" to true to remove the
* declaration completely.
*
* DEFAULT VALUE: false
*/
// "omitTrimmingComments": true
},
/**
* Configures how the tsdoc-metadata.json file will be generated.
*/
"tsdocMetadata": {
/**
* Whether to generate the tsdoc-metadata.json file.
*
* DEFAULT VALUE: true
*/
// "enabled": true,
/**
* Specifies where the TSDoc metadata file should be written.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* The default value is "<lookup>", which causes the path to be automatically inferred from the "tsdocMetadata",
* "typings" or "main" fields of the project's package.json. If none of these fields are set, the lookup
* falls back to "tsdoc-metadata.json" in the package folder.
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<lookup>"
*/
// "tsdocMetadataFilePath": "<projectFolder>/dist/tsdoc-metadata.json"
},
/**
* Specifies what type of newlines API Extractor should use when writing output files. By default, the output files
* will be written with Windows-style newlines. To use POSIX-style newlines, specify "lf" instead.
* To use the OS's default newline kind, specify "os".
*
* DEFAULT VALUE: "crlf"
*/
"newlineKind": "lf",
/**
* Configures how API Extractor reports error and warning messages produced during analysis.
*
* There are three sources of messages: compiler messages, API Extractor messages, and TSDoc messages.
*/
"messages": {
/**
* Configures handling of diagnostic messages reported by the TypeScript compiler engine while analyzing
* the input .d.ts files.
*
* TypeScript message identifiers start with "TS" followed by an integer. For example: "TS2551"
*
* DEFAULT VALUE: A single "default" entry with logLevel=warning.
*/
"compilerMessageReporting": {
/**
* Configures the default routing for messages that don't match an explicit rule in this table.
*/
"default": {
/**
* Specifies whether the message should be written to the the tool's output log. Note that
* the "addToApiReportFile" property may supersede this option.
*
* Possible values: "error", "warning", "none"
*
* Errors cause the build to fail and return a nonzero exit code. Warnings cause a production build fail
* and return a nonzero exit code. For a non-production build (e.g. when "api-extractor run" includes
* the "--local" option), the warning is displayed but the build will not fail.
*
* DEFAULT VALUE: "warning"
*/
"logLevel": "warning"
/**
* When addToApiReportFile is true: If API Extractor is configured to write an API report file (.api.md),
* then the message will be written inside that file; otherwise, the message is instead logged according to
* the "logLevel" option.
*
* DEFAULT VALUE: false
*/
// "addToApiReportFile": false
}
// "TS2551": {
// "logLevel": "warning",
// "addToApiReportFile": true
// },
//
// . . .
},
/**
* Configures handling of messages reported by API Extractor during its analysis.
*
* API Extractor message identifiers start with "ae-". For example: "ae-extra-release-tag"
*
* DEFAULT VALUE: See api-extractor-defaults.json for the complete table of extractorMessageReporting mappings
*/
"extractorMessageReporting": {
"default": {
"logLevel": "warning"
// "addToApiReportFile": false
}
// "ae-extra-release-tag": {
// "logLevel": "warning",
// "addToApiReportFile": true
// },
//
// . . .
},
/**
* Configures handling of messages reported by the TSDoc parser when analyzing code comments.
*
* TSDoc message identifiers start with "tsdoc-". For example: "tsdoc-link-tag-unescaped-text"
*
* DEFAULT VALUE: A single "default" entry with logLevel=warning.
*/
"tsdocMessageReporting": {
"default": {
"logLevel": "warning"
// "addToApiReportFile": false
}
// "tsdoc-link-tag-unescaped-text": {
// "logLevel": "warning",
// "addToApiReportFile": true
// },
//
// . . .
}
}
}

View File

@@ -6,7 +6,7 @@
"build": "tsup", "build": "tsup",
"lint": "prettier --cache --check . && eslint src __tests__ --ext mjs,js,ts --cache", "lint": "prettier --cache --check . && eslint src __tests__ --ext mjs,js,ts --cache",
"format": "prettier --cache --write . && eslint src __tests__ --ext mjs,js,ts --fix --cache", "format": "prettier --cache --write . && eslint src __tests__ --ext mjs,js,ts --fix --cache",
"docs": "docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript", "docs": "docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript && api-extractor run --local",
"prepack": "yarn build && yarn lint", "prepack": "yarn build && yarn lint",
"changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/proxy/*'", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/proxy/*'",
"release": "cliff-jumper" "release": "cliff-jumper"
@@ -60,6 +60,7 @@
"@discordjs/docgen": "workspace:^", "@discordjs/docgen": "workspace:^",
"@discordjs/scripts": "workspace:^", "@discordjs/scripts": "workspace:^",
"@favware/cliff-jumper": "^1.8.3", "@favware/cliff-jumper": "^1.8.3",
"@microsoft/api-extractor": "^7.28.2",
"@types/node": "^18.0.0", "@types/node": "^18.0.0",
"@types/supertest": "^2.0.12", "@types/supertest": "^2.0.12",
"eslint": "^8.18.0", "eslint": "^8.18.0",

View File

@@ -10,7 +10,8 @@ import type { RequestHandler } from '../util/util';
/** /**
* Creates an HTTP handler used to forward requests to Discord * Creates an HTTP handler used to forward requests to Discord
* @param rest REST instance to use for the requests *
* @param rest - REST instance to use for the requests
*/ */
export function proxyRequests(rest: REST): RequestHandler { export function proxyRequests(rest: REST): RequestHandler {
return async (req, res) => { return async (req, res) => {

View File

@@ -5,8 +5,9 @@ import type { Dispatcher } from 'undici';
/** /**
* Populates a server response with the data from a Discord 2xx REST response * Populates a server response with the data from a Discord 2xx REST response
* @param res The server response to populate *
* @param data The data to populate the response with * @param res - The server response to populate
* @param data - The data to populate the response with
*/ */
export async function populateSuccessfulResponse(res: ServerResponse, data: Dispatcher.ResponseData): Promise<void> { export async function populateSuccessfulResponse(res: ServerResponse, data: Dispatcher.ResponseData): Promise<void> {
res.statusCode = data.statusCode; res.statusCode = data.statusCode;
@@ -25,8 +26,9 @@ export async function populateSuccessfulResponse(res: ServerResponse, data: Disp
/** /**
* Populates a server response with the data from a Discord non-2xx REST response that is NOT a 429 * Populates a server response with the data from a Discord non-2xx REST response that is NOT a 429
* @param res The server response to populate *
* @param error The error to populate the response with * @param res - The server response to populate
* @param error - The error to populate the response with
*/ */
export function populateGeneralErrorResponse(res: ServerResponse, error: DiscordAPIError | HTTPError): void { export function populateGeneralErrorResponse(res: ServerResponse, error: DiscordAPIError | HTTPError): void {
res.statusCode = error.status; res.statusCode = error.status;
@@ -39,8 +41,9 @@ export function populateGeneralErrorResponse(res: ServerResponse, error: Discord
/** /**
* Populates a server response with the data from a Discord 429 REST response * Populates a server response with the data from a Discord 429 REST response
* @param res The server response to populate *
* @param error The error to populate the response with * @param res - The server response to populate
* @param error - The error to populate the response with
*/ */
export function populateRatelimitErrorResponse(res: ServerResponse, error: RateLimitError): void { export function populateRatelimitErrorResponse(res: ServerResponse, error: RateLimitError): void {
res.statusCode = 429; res.statusCode = 429;
@@ -48,8 +51,9 @@ export function populateRatelimitErrorResponse(res: ServerResponse, error: RateL
} }
/** /**
* Populates a server response with data relevant for a time out * Populates a server response with data relevant for a timeout
* @param res The sever response to populate *
* @param res - The sever response to populate
*/ */
export function populateAbortErrorResponse(res: ServerResponse): void { export function populateAbortErrorResponse(res: ServerResponse): void {
res.statusCode = 504; res.statusCode = 504;

View File

@@ -4,6 +4,7 @@ import type { IncomingMessage, ServerResponse } from 'node:http';
* Represents a potentially awaitable value * Represents a potentially awaitable value
*/ */
export type Awaitable<T> = T | PromiseLike<T>; export type Awaitable<T> = T | PromiseLike<T>;
/** /**
* Represents a simple HTTP request handler * Represents a simple HTTP request handler
*/ */

View File

@@ -0,0 +1,376 @@
/**
* Config file for API Extractor. For more info, please visit: https://api-extractor.com
*/
{
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
/**
* Optionally specifies another JSON config file that this file extends from. This provides a way for
* standard settings to be shared across multiple projects.
*
* If the path starts with "./" or "../", the path is resolved relative to the folder of the file that contains
* the "extends" field. Otherwise, the first path segment is interpreted as an NPM package name, and will be
* resolved using NodeJS require().
*
* SUPPORTED TOKENS: none
* DEFAULT VALUE: ""
*/
// "extends": "./shared/api-extractor-base.json"
// "extends": "my-package/include/api-extractor-base.json"
/**
* Determines the "<projectFolder>" token that can be used with other config file settings. The project folder
* typically contains the tsconfig.json and package.json config files, but the path is user-defined.
*
* The path is resolved relative to the folder of the config file that contains the setting.
*
* The default value for "projectFolder" is the token "<lookup>", which means the folder is determined by traversing
* parent folders, starting from the folder containing api-extractor.json, and stopping at the first folder
* that contains a tsconfig.json file. If a tsconfig.json file cannot be found in this way, then an error
* will be reported.
*
* SUPPORTED TOKENS: <lookup>
* DEFAULT VALUE: "<lookup>"
*/
// "projectFolder": "..",
/**
* (REQUIRED) Specifies the .d.ts file to be used as the starting point for analysis. API Extractor
* analyzes the symbols exported by this module.
*
* The file extension must be ".d.ts" and not ".ts".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
*/
"mainEntryPointFilePath": "<projectFolder>/dist/index.d.ts",
/**
* A list of NPM package names whose exports should be treated as part of this package.
*
* For example, suppose that Webpack is used to generate a distributed bundle for the project "library1",
* and another NPM package "library2" is embedded in this bundle. Some types from library2 may become part
* of the exported API for library1, but by default API Extractor would generate a .d.ts rollup that explicitly
* imports library2. To avoid this, we can specify:
*
* "bundledPackages": [ "library2" ],
*
* This would direct API Extractor to embed those types directly in the .d.ts rollup, as if they had been
* local files for library1.
*/
"bundledPackages": [],
/**
* Determines how the TypeScript compiler engine will be invoked by API Extractor.
*/
"compiler": {
/**
* Specifies the path to the tsconfig.json file to be used by API Extractor when analyzing the project.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* Note: This setting will be ignored if "overrideTsconfig" is used.
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/tsconfig.json"
*/
// "tsconfigFilePath": "<projectFolder>/tsconfig.json",
/**
* Provides a compiler configuration that will be used instead of reading the tsconfig.json file from disk.
* The object must conform to the TypeScript tsconfig schema:
*
* http://json.schemastore.org/tsconfig
*
* If omitted, then the tsconfig.json file will be read from the "projectFolder".
*
* DEFAULT VALUE: no overrideTsconfig section
*/
// "overrideTsconfig": {
// . . .
// }
/**
* This option causes the compiler to be invoked with the --skipLibCheck option. This option is not recommended
* and may cause API Extractor to produce incomplete or incorrect declarations, but it may be required when
* dependencies contain declarations that are incompatible with the TypeScript engine that API Extractor uses
* for its analysis. Where possible, the underlying issue should be fixed rather than relying on skipLibCheck.
*
* DEFAULT VALUE: false
*/
// "skipLibCheck": true,
},
/**
* Configures how the API report file (*.api.md) will be generated.
*/
"apiReport": {
/**
* (REQUIRED) Whether to generate an API report.
*/
"enabled": false
/**
* The filename for the API report files. It will be combined with "reportFolder" or "reportTempFolder" to produce
* a full file path.
*
* The file extension should be ".api.md", and the string should not contain a path separator such as "\" or "/".
*
* SUPPORTED TOKENS: <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<unscopedPackageName>.api.md"
*/
// "reportFileName": "<unscopedPackageName>.api.md",
/**
* Specifies the folder where the API report file is written. The file name portion is determined by
* the "reportFileName" setting.
*
* The API report file is normally tracked by Git. Changes to it can be used to trigger a branch policy,
* e.g. for an API review.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/temp/"
*/
// "reportFolder": "<projectFolder>/temp/",
/**
* Specifies the folder where the temporary report file is written. The file name portion is determined by
* the "reportFileName" setting.
*
* After the temporary file is written to disk, it is compared with the file in the "reportFolder".
* If they are different, a production build will fail.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/temp/"
*/
// "reportTempFolder": "<projectFolder>/temp/"
},
/**
* Configures how the doc model file (*.api.json) will be generated.
*/
"docModel": {
/**
* (REQUIRED) Whether to generate a doc model file.
*/
"enabled": true,
/**
* The output path for the doc model file. The file extension should be ".api.json".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/temp/<unscopedPackageName>.api.json"
*/
"apiJsonFilePath": "<projectFolder>/docs/docs.api.json"
},
/**
* Configures how the .d.ts rollup file will be generated.
*/
"dtsRollup": {
/**
* (REQUIRED) Whether to generate the .d.ts rollup file.
*/
"enabled": false
/**
* Specifies the output path for a .d.ts rollup file to be generated without any trimming.
* This file will include all declarations that are exported by the main entry point.
*
* If the path is an empty string, then this file will not be written.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/dist/<unscopedPackageName>.d.ts"
*/
// "untrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>.d.ts",
/**
* Specifies the output path for a .d.ts rollup file to be generated with trimming for an "alpha" release.
* This file will include only declarations that are marked as "@public", "@beta", or "@alpha".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: ""
*/
// "alphaTrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>-alpha.d.ts",
/**
* Specifies the output path for a .d.ts rollup file to be generated with trimming for a "beta" release.
* This file will include only declarations that are marked as "@public" or "@beta".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: ""
*/
// "betaTrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>-beta.d.ts",
/**
* Specifies the output path for a .d.ts rollup file to be generated with trimming for a "public" release.
* This file will include only declarations that are marked as "@public".
*
* If the path is an empty string, then this file will not be written.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: ""
*/
// "publicTrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>-public.d.ts",
/**
* When a declaration is trimmed, by default it will be replaced by a code comment such as
* "Excluded from this release type: exampleMember". Set "omitTrimmingComments" to true to remove the
* declaration completely.
*
* DEFAULT VALUE: false
*/
// "omitTrimmingComments": true
},
/**
* Configures how the tsdoc-metadata.json file will be generated.
*/
"tsdocMetadata": {
/**
* Whether to generate the tsdoc-metadata.json file.
*
* DEFAULT VALUE: true
*/
// "enabled": true,
/**
* Specifies where the TSDoc metadata file should be written.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* The default value is "<lookup>", which causes the path to be automatically inferred from the "tsdocMetadata",
* "typings" or "main" fields of the project's package.json. If none of these fields are set, the lookup
* falls back to "tsdoc-metadata.json" in the package folder.
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<lookup>"
*/
// "tsdocMetadataFilePath": "<projectFolder>/dist/tsdoc-metadata.json"
},
/**
* Specifies what type of newlines API Extractor should use when writing output files. By default, the output files
* will be written with Windows-style newlines. To use POSIX-style newlines, specify "lf" instead.
* To use the OS's default newline kind, specify "os".
*
* DEFAULT VALUE: "crlf"
*/
"newlineKind": "lf",
/**
* Configures how API Extractor reports error and warning messages produced during analysis.
*
* There are three sources of messages: compiler messages, API Extractor messages, and TSDoc messages.
*/
"messages": {
/**
* Configures handling of diagnostic messages reported by the TypeScript compiler engine while analyzing
* the input .d.ts files.
*
* TypeScript message identifiers start with "TS" followed by an integer. For example: "TS2551"
*
* DEFAULT VALUE: A single "default" entry with logLevel=warning.
*/
"compilerMessageReporting": {
/**
* Configures the default routing for messages that don't match an explicit rule in this table.
*/
"default": {
/**
* Specifies whether the message should be written to the the tool's output log. Note that
* the "addToApiReportFile" property may supersede this option.
*
* Possible values: "error", "warning", "none"
*
* Errors cause the build to fail and return a nonzero exit code. Warnings cause a production build fail
* and return a nonzero exit code. For a non-production build (e.g. when "api-extractor run" includes
* the "--local" option), the warning is displayed but the build will not fail.
*
* DEFAULT VALUE: "warning"
*/
"logLevel": "warning"
/**
* When addToApiReportFile is true: If API Extractor is configured to write an API report file (.api.md),
* then the message will be written inside that file; otherwise, the message is instead logged according to
* the "logLevel" option.
*
* DEFAULT VALUE: false
*/
// "addToApiReportFile": false
}
// "TS2551": {
// "logLevel": "warning",
// "addToApiReportFile": true
// },
//
// . . .
},
/**
* Configures handling of messages reported by API Extractor during its analysis.
*
* API Extractor message identifiers start with "ae-". For example: "ae-extra-release-tag"
*
* DEFAULT VALUE: See api-extractor-defaults.json for the complete table of extractorMessageReporting mappings
*/
"extractorMessageReporting": {
"default": {
"logLevel": "warning"
// "addToApiReportFile": false
}
// "ae-extra-release-tag": {
// "logLevel": "warning",
// "addToApiReportFile": true
// },
//
// . . .
},
/**
* Configures handling of messages reported by the TSDoc parser when analyzing code comments.
*
* TSDoc message identifiers start with "tsdoc-". For example: "tsdoc-link-tag-unescaped-text"
*
* DEFAULT VALUE: A single "default" entry with logLevel=warning.
*/
"tsdocMessageReporting": {
"default": {
"logLevel": "warning"
// "addToApiReportFile": false
}
// "tsdoc-link-tag-unescaped-text": {
// "logLevel": "warning",
// "addToApiReportFile": true
// },
//
// . . .
}
}
}

View File

@@ -6,7 +6,7 @@
"build": "tsup", "build": "tsup",
"lint": "prettier --cache --check . && eslint src __tests__ --ext mjs,js,ts --cache", "lint": "prettier --cache --check . && eslint src __tests__ --ext mjs,js,ts --cache",
"format": "prettier --cache --write . && eslint src __tests__ --ext mjs,js,ts --fix --cache", "format": "prettier --cache --write . && eslint src __tests__ --ext mjs,js,ts --fix --cache",
"docs": "docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript", "docs": "docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript && api-extractor run --local",
"prepack": "yarn build && yarn lint", "prepack": "yarn build && yarn lint",
"changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/rest/*'", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/rest/*'",
"release": "cliff-jumper" "release": "cliff-jumper"
@@ -61,6 +61,7 @@
"@discordjs/docgen": "workspace:^", "@discordjs/docgen": "workspace:^",
"@discordjs/scripts": "workspace:^", "@discordjs/scripts": "workspace:^",
"@favware/cliff-jumper": "^1.8.3", "@favware/cliff-jumper": "^1.8.3",
"@microsoft/api-extractor": "^7.28.2",
"eslint": "^8.18.0", "eslint": "^8.18.0",
"prettier": "^2.7.1", "prettier": "^2.7.1",
"tsup": "^6.1.2", "tsup": "^6.1.2",

View File

@@ -14,6 +14,7 @@ import {
export interface BaseImageURLOptions { export interface BaseImageURLOptions {
/** /**
* The extension to use for the image URL * The extension to use for the image URL
*
* @default 'webp' * @default 'webp'
*/ */
extension?: ImageExtension; extension?: ImageExtension;
@@ -39,6 +40,7 @@ export interface ImageURLOptions extends BaseImageURLOptions {
export interface MakeURLOptions { export interface MakeURLOptions {
/** /**
* The extension to use for the image URL * The extension to use for the image URL
*
* @default 'webp' * @default 'webp'
*/ */
extension?: string | undefined; extension?: string | undefined;
@@ -60,9 +62,10 @@ export class CDN {
/** /**
* Generates an app asset URL for a client's asset. * Generates an app asset URL for a client's asset.
* @param clientId The client id that has the asset *
* @param assetHash The hash provided by Discord for this asset * @param clientId - The client id that has the asset
* @param options Optional options for the asset * @param assetHash - The hash provided by Discord for this asset
* @param options - Optional options for the asset
*/ */
public appAsset(clientId: string, assetHash: string, options?: Readonly<BaseImageURLOptions>): string { public appAsset(clientId: string, assetHash: string, options?: Readonly<BaseImageURLOptions>): string {
return this.makeURL(`/app-assets/${clientId}/${assetHash}`, options); return this.makeURL(`/app-assets/${clientId}/${assetHash}`, options);
@@ -70,9 +73,10 @@ export class CDN {
/** /**
* Generates an app icon URL for a client's icon. * Generates an app icon URL for a client's icon.
* @param clientId The client id that has the icon *
* @param iconHash The hash provided by Discord for this icon * @param clientId - The client id that has the icon
* @param options Optional options for the icon * @param iconHash - The hash provided by Discord for this icon
* @param options - Optional options for the icon
*/ */
public appIcon(clientId: string, iconHash: string, options?: Readonly<BaseImageURLOptions>): string { public appIcon(clientId: string, iconHash: string, options?: Readonly<BaseImageURLOptions>): string {
return this.makeURL(`/app-icons/${clientId}/${iconHash}`, options); return this.makeURL(`/app-icons/${clientId}/${iconHash}`, options);
@@ -80,9 +84,10 @@ export class CDN {
/** /**
* Generates an avatar URL, e.g. for a user or a webhook. * Generates an avatar URL, e.g. for a user or a webhook.
* @param id The id that has the icon *
* @param avatarHash The hash provided by Discord for this avatar * @param id - The id that has the icon
* @param options Optional options for the avatar * @param avatarHash - The hash provided by Discord for this avatar
* @param options - Optional options for the avatar
*/ */
public avatar(id: string, avatarHash: string, options?: Readonly<ImageURLOptions>): string { public avatar(id: string, avatarHash: string, options?: Readonly<ImageURLOptions>): string {
return this.dynamicMakeURL(`/avatars/${id}/${avatarHash}`, avatarHash, options); return this.dynamicMakeURL(`/avatars/${id}/${avatarHash}`, avatarHash, options);
@@ -90,9 +95,10 @@ export class CDN {
/** /**
* Generates a banner URL, e.g. for a user or a guild. * Generates a banner URL, e.g. for a user or a guild.
* @param id The id that has the banner splash *
* @param bannerHash The hash provided by Discord for this banner * @param id - The id that has the banner splash
* @param options Optional options for the banner * @param bannerHash - The hash provided by Discord for this banner
* @param options - Optional options for the banner
*/ */
public banner(id: string, bannerHash: string, options?: Readonly<ImageURLOptions>): string { public banner(id: string, bannerHash: string, options?: Readonly<ImageURLOptions>): string {
return this.dynamicMakeURL(`/banners/${id}/${bannerHash}`, bannerHash, options); return this.dynamicMakeURL(`/banners/${id}/${bannerHash}`, bannerHash, options);
@@ -100,9 +106,10 @@ export class CDN {
/** /**
* Generates an icon URL for a channel, e.g. a group DM. * Generates an icon URL for a channel, e.g. a group DM.
* @param channelId The channel id that has the icon *
* @param iconHash The hash provided by Discord for this channel * @param channelId - The channel id that has the icon
* @param options Optional options for the icon * @param iconHash - The hash provided by Discord for this channel
* @param options - Optional options for the icon
*/ */
public channelIcon(channelId: string, iconHash: string, options?: Readonly<BaseImageURLOptions>): string { public channelIcon(channelId: string, iconHash: string, options?: Readonly<BaseImageURLOptions>): string {
return this.makeURL(`/channel-icons/${channelId}/${iconHash}`, options); return this.makeURL(`/channel-icons/${channelId}/${iconHash}`, options);
@@ -110,7 +117,8 @@ export class CDN {
/** /**
* Generates the default avatar URL for a discriminator. * Generates the default avatar URL for a discriminator.
* @param discriminator The discriminator modulo 5 *
* @param discriminator - The discriminator modulo 5
*/ */
public defaultAvatar(discriminator: number): string { public defaultAvatar(discriminator: number): string {
return this.makeURL(`/embed/avatars/${discriminator}`, { extension: 'png' }); return this.makeURL(`/embed/avatars/${discriminator}`, { extension: 'png' });
@@ -118,9 +126,10 @@ export class CDN {
/** /**
* Generates a discovery splash URL for a guild's discovery splash. * Generates a discovery splash URL for a guild's discovery splash.
* @param guildId The guild id that has the discovery splash *
* @param splashHash The hash provided by Discord for this splash * @param guildId - The guild id that has the discovery splash
* @param options Optional options for the splash * @param splashHash - The hash provided by Discord for this splash
* @param options - Optional options for the splash
*/ */
public discoverySplash(guildId: string, splashHash: string, options?: Readonly<BaseImageURLOptions>): string { public discoverySplash(guildId: string, splashHash: string, options?: Readonly<BaseImageURLOptions>): string {
return this.makeURL(`/discovery-splashes/${guildId}/${splashHash}`, options); return this.makeURL(`/discovery-splashes/${guildId}/${splashHash}`, options);
@@ -128,8 +137,9 @@ export class CDN {
/** /**
* Generates an emoji's URL for an emoji. * Generates an emoji's URL for an emoji.
* @param emojiId The emoji id *
* @param extension The extension of the emoji * @param emojiId - The emoji id
* @param extension - The extension of the emoji
*/ */
public emoji(emojiId: string, extension?: ImageExtension): string { public emoji(emojiId: string, extension?: ImageExtension): string {
return this.makeURL(`/emojis/${emojiId}`, { extension }); return this.makeURL(`/emojis/${emojiId}`, { extension });
@@ -137,10 +147,11 @@ export class CDN {
/** /**
* Generates a guild member avatar URL. * Generates a guild member avatar URL.
* @param guildId The id of the guild *
* @param userId The id of the user * @param guildId - The id of the guild
* @param avatarHash The hash provided by Discord for this avatar * @param userId - The id of the user
* @param options Optional options for the avatar * @param avatarHash - The hash provided by Discord for this avatar
* @param options - Optional options for the avatar
*/ */
public guildMemberAvatar( public guildMemberAvatar(
guildId: string, guildId: string,
@@ -153,10 +164,11 @@ export class CDN {
/** /**
* Generates a guild member banner URL. * Generates a guild member banner URL.
* @param guildId The id of the guild *
* @param userId The id of the user * @param guildId - The id of the guild
* @param bannerHash The hash provided by Discord for this banner * @param userId - The id of the user
* @param options Optional options for the banner * @param bannerHash - The hash provided by Discord for this banner
* @param options - Optional options for the banner
*/ */
public guildMemberBanner( public guildMemberBanner(
guildId: string, guildId: string,
@@ -169,9 +181,10 @@ export class CDN {
/** /**
* Generates an icon URL, e.g. for a guild. * Generates an icon URL, e.g. for a guild.
* @param id The id that has the icon splash *
* @param iconHash The hash provided by Discord for this icon * @param id - The id that has the icon splash
* @param options Optional options for the icon * @param iconHash - The hash provided by Discord for this icon
* @param options - Optional options for the icon
*/ */
public icon(id: string, iconHash: string, options?: Readonly<ImageURLOptions>): string { public icon(id: string, iconHash: string, options?: Readonly<ImageURLOptions>): string {
return this.dynamicMakeURL(`/icons/${id}/${iconHash}`, iconHash, options); return this.dynamicMakeURL(`/icons/${id}/${iconHash}`, iconHash, options);
@@ -179,9 +192,9 @@ export class CDN {
/** /**
* Generates a URL for the icon of a role * Generates a URL for the icon of a role
* @param roleId The id of the role that has the icon * @param roleId - The id of the role that has the icon
* @param roleIconHash The hash provided by Discord for this role icon * @param roleIconHash - The hash provided by Discord for this role icon
* @param options Optional options for the role icon * @param options - Optional options for the role icon
*/ */
public roleIcon(roleId: string, roleIconHash: string, options?: Readonly<BaseImageURLOptions>): string { public roleIcon(roleId: string, roleIconHash: string, options?: Readonly<BaseImageURLOptions>): string {
return this.makeURL(`/role-icons/${roleId}/${roleIconHash}`, options); return this.makeURL(`/role-icons/${roleId}/${roleIconHash}`, options);
@@ -189,9 +202,10 @@ export class CDN {
/** /**
* Generates a guild invite splash URL for a guild's invite splash. * Generates a guild invite splash URL for a guild's invite splash.
* @param guildId The guild id that has the invite splash *
* @param splashHash The hash provided by Discord for this splash * @param guildId - The guild id that has the invite splash
* @param options Optional options for the splash * @param splashHash - The hash provided by Discord for this splash
* @param options - Optional options for the splash
*/ */
public splash(guildId: string, splashHash: string, options?: Readonly<BaseImageURLOptions>): string { public splash(guildId: string, splashHash: string, options?: Readonly<BaseImageURLOptions>): string {
return this.makeURL(`/splashes/${guildId}/${splashHash}`, options); return this.makeURL(`/splashes/${guildId}/${splashHash}`, options);
@@ -199,8 +213,9 @@ export class CDN {
/** /**
* Generates a sticker URL. * Generates a sticker URL.
* @param stickerId The sticker id *
* @param extension The extension of the sticker * @param stickerId - The sticker id
* @param extension - The extension of the sticker
*/ */
public sticker(stickerId: string, extension?: StickerExtension): string { public sticker(stickerId: string, extension?: StickerExtension): string {
return this.makeURL(`/stickers/${stickerId}`, { return this.makeURL(`/stickers/${stickerId}`, {
@@ -211,8 +226,9 @@ export class CDN {
/** /**
* Generates a sticker pack banner URL. * Generates a sticker pack banner URL.
* @param bannerId The banner id *
* @param options Optional options for the banner * @param bannerId - The banner id
* @param options - Optional options for the banner
*/ */
public stickerPackBanner(bannerId: string, options?: Readonly<BaseImageURLOptions>): string { public stickerPackBanner(bannerId: string, options?: Readonly<BaseImageURLOptions>): string {
return this.makeURL(`/app-assets/710982414301790216/store/${bannerId}`, options); return this.makeURL(`/app-assets/710982414301790216/store/${bannerId}`, options);
@@ -220,9 +236,10 @@ export class CDN {
/** /**
* Generates a team icon URL for a team's icon. * Generates a team icon URL for a team's icon.
* @param teamId The team id that has the icon *
* @param iconHash The hash provided by Discord for this icon * @param teamId - The team id that has the icon
* @param options Optional options for the icon * @param iconHash - The hash provided by Discord for this icon
* @param options - Optional options for the icon
*/ */
public teamIcon(teamId: string, iconHash: string, options?: Readonly<BaseImageURLOptions>): string { public teamIcon(teamId: string, iconHash: string, options?: Readonly<BaseImageURLOptions>): string {
return this.makeURL(`/team-icons/${teamId}/${iconHash}`, options); return this.makeURL(`/team-icons/${teamId}/${iconHash}`, options);
@@ -230,9 +247,10 @@ export class CDN {
/** /**
* Generates a cover image for a guild scheduled event. * Generates a cover image for a guild scheduled event.
* @param scheduledEventId The scheduled event id *
* @param coverHash The hash provided by discord for this cover image * @param scheduledEventId - The scheduled event id
* @param options Optional options for the cover image * @param coverHash - The hash provided by discord for this cover image
* @param options - Optional options for the cover image
*/ */
public guildScheduledEventCover( public guildScheduledEventCover(
scheduledEventId: string, scheduledEventId: string,
@@ -244,9 +262,10 @@ export class CDN {
/** /**
* Constructs the URL for the resource, checking whether or not `hash` starts with `a_` if `dynamic` is set to `true`. * Constructs the URL for the resource, checking whether or not `hash` starts with `a_` if `dynamic` is set to `true`.
* @param route The base cdn route *
* @param hash The hash provided by Discord for this icon * @param route - The base cdn route
* @param options Optional options for the link * @param hash - The hash provided by Discord for this icon
* @param options - Optional options for the link
*/ */
private dynamicMakeURL( private dynamicMakeURL(
route: string, route: string,
@@ -258,8 +277,9 @@ export class CDN {
/** /**
* Constructs the URL for the resource * Constructs the URL for the resource
* @param route The base cdn route *
* @param options The extension/size options for the link * @param route - The base cdn route
* @param options - The extension/size options for the link
*/ */
private makeURL( private makeURL(
route: string, route: string,

View File

@@ -31,32 +31,38 @@ export interface RESTOptions {
/** /**
* The authorization prefix to use for requests, useful if you want to use * The authorization prefix to use for requests, useful if you want to use
* bearer tokens * bearer tokens
*
* @default 'Bot' * @default 'Bot'
*/ */
authPrefix: 'Bot' | 'Bearer'; authPrefix: 'Bot' | 'Bearer';
/** /**
* The cdn path * The cdn path
*
* @default 'https://cdn.discordapp.com' * @default 'https://cdn.discordapp.com'
*/ */
cdn: string; cdn: string;
/** /**
* Additional headers to send for all API requests * Additional headers to send for all API requests
*
* @default {} * @default {}
*/ */
headers: Record<string, string>; headers: Record<string, string>;
/** /**
* The number of invalid REST requests (those that return 401, 403, or 429) in a 10 minute window between emitted warnings (0 for no warnings). * The number of invalid REST requests (those that return 401, 403, or 429) in a 10 minute window between emitted warnings (0 for no warnings).
* That is, if set to 500, warnings will be emitted at invalid request number 500, 1000, 1500, and so on. * That is, if set to 500, warnings will be emitted at invalid request number 500, 1000, 1500, and so on.
*
* @default 0 * @default 0
*/ */
invalidRequestWarningInterval: number; invalidRequestWarningInterval: number;
/** /**
* How many requests to allow sending per second (Infinity for unlimited, 50 for the standard global limit used by Discord) * How many requests to allow sending per second (Infinity for unlimited, 50 for the standard global limit used by Discord)
*
* @default 50 * @default 50
*/ */
globalRequestsPerSecond: number; globalRequestsPerSecond: number;
/** /**
* The extra offset to add to rate limits in milliseconds * The extra offset to add to rate limits in milliseconds
*
* @default 50 * @default 50
*/ */
offset: number; offset: number;
@@ -65,42 +71,50 @@ export interface RESTOptions {
* When an array of strings, each element is treated as a prefix for the request route * When an array of strings, each element is treated as a prefix for the request route
* (e.g. `/channels` to match any route starting with `/channels` such as `/channels/:id/messages`) * (e.g. `/channels` to match any route starting with `/channels` such as `/channels/:id/messages`)
* for which to throw {@link RateLimitError}s. All other request routes will be queued normally * for which to throw {@link RateLimitError}s. All other request routes will be queued normally
*
* @default null * @default null
*/ */
rejectOnRateLimit: string[] | RateLimitQueueFilter | null; rejectOnRateLimit: string[] | RateLimitQueueFilter | null;
/** /**
* The number of retries for errors with the 500 code, or errors * The number of retries for errors with the 500 code, or errors
* that timeout * that timeout
*
* @default 3 * @default 3
*/ */
retries: number; retries: number;
/** /**
* The time to wait in milliseconds before a request is aborted * The time to wait in milliseconds before a request is aborted
*
* @default 15_000 * @default 15_000
*/ */
timeout: number; timeout: number;
/** /**
* Extra information to add to the user agent * Extra information to add to the user agent
*
* @default `Node.js ${process.version}` * @default `Node.js ${process.version}`
*/ */
userAgentAppendix: string; userAgentAppendix: string;
/** /**
* The version of the API to use * The version of the API to use
*
* @default '10' * @default '10'
*/ */
version: string; version: string;
/** /**
* The amount of time in milliseconds that passes between each hash sweep. (defaults to 4h) * The amount of time in milliseconds that passes between each hash sweep. (defaults to 4h)
*
* @default 14_400_000 * @default 14_400_000
*/ */
hashSweepInterval: number; hashSweepInterval: number;
/** /**
* The maximum amount of time a hash can exist in milliseconds without being hit with a request (defaults to 24h) * The maximum amount of time a hash can exist in milliseconds without being hit with a request (defaults to 24h)
*
* @default 86_400_000 * @default 86_400_000
*/ */
hashLifetime: number; hashLifetime: number;
/** /**
* The amount of time in milliseconds that passes between each hash sweep. (defaults to 1h) * The amount of time in milliseconds that passes between each hash sweep. (defaults to 1h)
*
* @default 3_600_000 * @default 3_600_000
*/ */
handlerSweepInterval: number; handlerSweepInterval: number;
@@ -250,7 +264,8 @@ export class REST extends EventEmitter {
/** /**
* Sets the default agent to use for requests performed by this instance * Sets the default agent to use for requests performed by this instance
* @param agent Sets the agent to use *
* @param agent - Sets the agent to use
*/ */
public setAgent(agent: Dispatcher) { public setAgent(agent: Dispatcher) {
this.requestManager.setAgent(agent); this.requestManager.setAgent(agent);
@@ -259,7 +274,8 @@ export class REST extends EventEmitter {
/** /**
* Sets the authorization token that should be used for requests * Sets the authorization token that should be used for requests
* @param token The authorization token to use *
* @param token - The authorization token to use
*/ */
public setToken(token: string) { public setToken(token: string) {
this.requestManager.setToken(token); this.requestManager.setToken(token);
@@ -268,8 +284,9 @@ export class REST extends EventEmitter {
/** /**
* Runs a get request from the api * Runs a get request from the api
* @param fullRoute The full route to query *
* @param options Optional request options * @param fullRoute - The full route to query
* @param options - Optional request options
*/ */
public get(fullRoute: RouteLike, options: RequestData = {}) { public get(fullRoute: RouteLike, options: RequestData = {}) {
return this.request({ ...options, fullRoute, method: RequestMethod.Get }); return this.request({ ...options, fullRoute, method: RequestMethod.Get });
@@ -277,8 +294,9 @@ export class REST extends EventEmitter {
/** /**
* Runs a delete request from the api * Runs a delete request from the api
* @param fullRoute The full route to query *
* @param options Optional request options * @param fullRoute - The full route to query
* @param options - Optional request options
*/ */
public delete(fullRoute: RouteLike, options: RequestData = {}) { public delete(fullRoute: RouteLike, options: RequestData = {}) {
return this.request({ ...options, fullRoute, method: RequestMethod.Delete }); return this.request({ ...options, fullRoute, method: RequestMethod.Delete });
@@ -286,8 +304,9 @@ export class REST extends EventEmitter {
/** /**
* Runs a post request from the api * Runs a post request from the api
* @param fullRoute The full route to query *
* @param options Optional request options * @param fullRoute - The full route to query
* @param options - Optional request options
*/ */
public post(fullRoute: RouteLike, options: RequestData = {}) { public post(fullRoute: RouteLike, options: RequestData = {}) {
return this.request({ ...options, fullRoute, method: RequestMethod.Post }); return this.request({ ...options, fullRoute, method: RequestMethod.Post });
@@ -295,8 +314,9 @@ export class REST extends EventEmitter {
/** /**
* Runs a put request from the api * Runs a put request from the api
* @param fullRoute The full route to query *
* @param options Optional request options * @param fullRoute - The full route to query
* @param options - Optional request options
*/ */
public put(fullRoute: RouteLike, options: RequestData = {}) { public put(fullRoute: RouteLike, options: RequestData = {}) {
return this.request({ ...options, fullRoute, method: RequestMethod.Put }); return this.request({ ...options, fullRoute, method: RequestMethod.Put });
@@ -304,8 +324,9 @@ export class REST extends EventEmitter {
/** /**
* Runs a patch request from the api * Runs a patch request from the api
* @param fullRoute The full route to query *
* @param options Optional request options * @param fullRoute - The full route to query
* @param options - Optional request options
*/ */
public patch(fullRoute: RouteLike, options: RequestData = {}) { public patch(fullRoute: RouteLike, options: RequestData = {}) {
return this.request({ ...options, fullRoute, method: RequestMethod.Patch }); return this.request({ ...options, fullRoute, method: RequestMethod.Patch });
@@ -313,7 +334,8 @@ export class REST extends EventEmitter {
/** /**
* Runs a request from the api * Runs a request from the api
* @param options Request options *
* @param options - Request options
*/ */
public async request(options: InternalRequest) { public async request(options: InternalRequest) {
const response = await this.raw(options); const response = await this.raw(options);
@@ -322,7 +344,8 @@ export class REST extends EventEmitter {
/** /**
* Runs a request from the API, yielding the raw Response object * Runs a request from the API, yielding the raw Response object
* @param options Request options *
* @param options - Request options
*/ */
public raw(options: InternalRequest) { public raw(options: InternalRequest) {
return this.requestManager.queueRequest(options); return this.requestManager.queueRequest(options);

View File

@@ -39,11 +39,13 @@ export interface RequestData {
appendToFormData?: boolean; appendToFormData?: boolean;
/** /**
* If this request needs the `Authorization` header * If this request needs the `Authorization` header
*
* @default true * @default true
*/ */
auth?: boolean; auth?: boolean;
/** /**
* The authorization prefix to use for this request, useful if you use this with bearer tokens * The authorization prefix to use for this request, useful if you use this with bearer tokens
*
* @default 'Bot' * @default 'Bot'
*/ */
authPrefix?: 'Bot' | 'Bearer'; authPrefix?: 'Bot' | 'Bearer';
@@ -79,6 +81,7 @@ export interface RequestData {
reason?: string; reason?: string;
/** /**
* If this request should be versioned * If this request should be versioned
*
* @default true * @default true
*/ */
versioned?: boolean; versioned?: boolean;
@@ -273,7 +276,8 @@ export class RequestManager extends EventEmitter {
/** /**
* Sets the default agent to use for requests performed by this manager * Sets the default agent to use for requests performed by this manager
* @param agent The agent to use *
* @param agent - The agent to use
*/ */
public setAgent(agent: Dispatcher) { public setAgent(agent: Dispatcher) {
this.agent = agent; this.agent = agent;
@@ -282,7 +286,8 @@ export class RequestManager extends EventEmitter {
/** /**
* Sets the authorization token that should be used for requests * Sets the authorization token that should be used for requests
* @param token The authorization token to use *
* @param token - The authorization token to use
*/ */
public setToken(token: string) { public setToken(token: string) {
this.#token = token; this.#token = token;
@@ -291,7 +296,9 @@ export class RequestManager extends EventEmitter {
/** /**
* Queues a request to be sent * Queues a request to be sent
* @param request All the information needed to make a request *
* @param request - All the information needed to make a request
*
* @returns The response from the api request * @returns The response from the api request
*/ */
public async queueRequest(request: InternalRequest): Promise<Dispatcher.ResponseData> { public async queueRequest(request: InternalRequest): Promise<Dispatcher.ResponseData> {
@@ -321,8 +328,10 @@ export class RequestManager extends EventEmitter {
/** /**
* Creates a new rate limit handler from a hash, based on the hash and the major parameter * Creates a new rate limit handler from a hash, based on the hash and the major parameter
* @param hash The hash for the route *
* @param majorParameter The major parameter for this handler * @param hash - The hash for the route
* @param majorParameter - The major parameter for this handler
*
* @private * @private
*/ */
private createHandler(hash: string, majorParameter: string) { private createHandler(hash: string, majorParameter: string) {
@@ -336,7 +345,8 @@ export class RequestManager extends EventEmitter {
/** /**
* Formats the request data to a usable format for fetch * Formats the request data to a usable format for fetch
* @param request The request data *
* @param request - The request data
*/ */
private async resolveRequest(request: InternalRequest): Promise<{ url: string; fetchOptions: RequestOptions }> { private async resolveRequest(request: InternalRequest): Promise<{ url: string; fetchOptions: RequestOptions }> {
const { options } = this; const { options } = this;
@@ -460,8 +470,10 @@ export class RequestManager extends EventEmitter {
/** /**
* Generates route data for an endpoint:method * Generates route data for an endpoint:method
* @param endpoint The raw endpoint to generalize *
* @param method The HTTP method this endpoint is called without * @param endpoint - The raw endpoint to generalize
* @param method - The HTTP method this endpoint is called without
*
* @private * @private
*/ */
private static generateRouteData(endpoint: RouteLike, method: RequestMethod): RouteData { private static generateRouteData(endpoint: RouteLike, method: RequestMethod): RouteData {

View File

@@ -43,12 +43,12 @@ export class DiscordAPIError extends Error {
public requestBody: RequestBody; public requestBody: RequestBody;
/** /**
* @param rawError The error reported by Discord * @param rawError - The error reported by Discord
* @param code The error code reported by Discord * @param code - The error code reported by Discord
* @param status The status code of the response * @param status - The status code of the response
* @param method The method of the request that erred * @param method - The method of the request that erred
* @param url The url of the request that erred * @param url - The url of the request that erred
* @param bodyData The unparsed data for the request that errored * @param bodyData - The unparsed data for the request that errored
*/ */
public constructor( public constructor(
public rawError: DiscordErrorData | OAuthErrorData, public rawError: DiscordErrorData | OAuthErrorData,

View File

@@ -8,11 +8,11 @@ export class HTTPError extends Error {
public requestBody: RequestBody; public requestBody: RequestBody;
/** /**
* @param name The name of the error * @param name - The name of the error
* @param status The status code of the response * @param status - The status code of the response
* @param method The method of the request that erred * @param method - The method of the request that erred
* @param url The url of the request that erred * @param url - The url of the request that erred
* @param bodyData The unparsed data for the request that errored * @param bodyData - The unparsed data for the request that errored
*/ */
public constructor( public constructor(
public override name: string, public override name: string,

View File

@@ -10,7 +10,8 @@ import { RateLimitError } from '../errors/RateLimitError';
import { RESTEvents } from '../utils/constants'; import { RESTEvents } from '../utils/constants';
import { hasSublimit, parseHeader, parseResponse } from '../utils/utils'; import { hasSublimit, parseHeader, parseResponse } from '../utils/utils';
/* Invalid request limiting is done on a per-IP basis, not a per-token basis. /**
* Invalid request limiting is done on a per-IP basis, not a per-token basis.
* The best we can do is track invalid counts process-wide (on the theory that * The best we can do is track invalid counts process-wide (on the theory that
* users could have multiple bots run from one process) rather than per-bot. * users could have multiple bots run from one process) rather than per-bot.
* Therefore, store these at file scope here rather than in the client's * Therefore, store these at file scope here rather than in the client's
@@ -73,9 +74,9 @@ export class SequentialHandler implements IHandler {
#shiftSublimit = false; #shiftSublimit = false;
/** /**
* @param manager The request manager * @param manager - The request manager
* @param hash The hash that this RequestHandler handles * @param hash - The hash that this RequestHandler handles
* @param majorParameter The major parameter for this handler * @param majorParameter - The major parameter for this handler
*/ */
public constructor( public constructor(
private readonly manager: RequestManager, private readonly manager: RequestManager,
@@ -126,7 +127,8 @@ export class SequentialHandler implements IHandler {
/** /**
* Emits a debug message * Emits a debug message
* @param message The message to debug *
* @param message - The message to debug
*/ */
private debug(message: string) { private debug(message: string) {
this.manager.emit(RESTEvents.Debug, `[REST ${this.id}] ${message}`); this.manager.emit(RESTEvents.Debug, `[REST ${this.id}] ${message}`);
@@ -134,8 +136,8 @@ export class SequentialHandler implements IHandler {
/** /**
* Delay all requests for the specified amount of time, handling global rate limits * Delay all requests for the specified amount of time, handling global rate limits
* @param time The amount of time to delay all requests for *
* @returns * @param time - The amount of time to delay all requests for
*/ */
private async globalDelayFor(time: number): Promise<void> { private async globalDelayFor(time: number): Promise<void> {
await sleep(time, undefined, { ref: false }); await sleep(time, undefined, { ref: false });
@@ -160,10 +162,11 @@ export class SequentialHandler implements IHandler {
/** /**
* Queues a request to be sent * Queues a request to be sent
* @param routeId The generalized api route with literal ids for major parameters *
* @param url The url to do the request on * @param routeId - The generalized api route with literal ids for major parameters
* @param options All the information needed to make a request * @param url - The url to do the request on
* @param requestData Extra data from the user's request needed for errors and additional processing * @param options - All the information needed to make a request
* @param requestData - Extra data from the user's request needed for errors and additional processing
*/ */
public async queueRequest( public async queueRequest(
routeId: RouteData, routeId: RouteData,
@@ -216,11 +219,12 @@ export class SequentialHandler implements IHandler {
/** /**
* The method that actually makes the request to the api, and updates info about the bucket accordingly * The method that actually makes the request to the api, and updates info about the bucket accordingly
* @param routeId The generalized api route with literal ids for major parameters *
* @param url The fully resolved url to make the request to * @param routeId - The generalized api route with literal ids for major parameters
* @param options The fetch options needed to make the request * @param url - The fully resolved url to make the request to
* @param requestData Extra data from the user's request needed for errors and additional processing * @param options - The fetch options needed to make the request
* @param retries The number of retries this request has already attempted (recursion) * @param requestData - Extra data from the user's request needed for errors and additional processing
* @param retries - The number of retries this request has already attempted (recursion)
*/ */
private async runRequest( private async runRequest(
routeId: RouteData, routeId: RouteData,

View File

@@ -40,7 +40,9 @@ function serializeSearchParam(value: unknown): string | null {
/** /**
* Creates and populates an URLSearchParams instance from an object, stripping * Creates and populates an URLSearchParams instance from an object, stripping
* out null and undefined values, while also coercing non-strings to strings. * out null and undefined values, while also coercing non-strings to strings.
* @param options The options to use *
* @param options - The options to use
*
* @returns A populated URLSearchParams instance * @returns A populated URLSearchParams instance
*/ */
export function makeURLSearchParams(options?: Record<string, unknown>) { export function makeURLSearchParams(options?: Record<string, unknown>) {
@@ -57,7 +59,8 @@ export function makeURLSearchParams(options?: Record<string, unknown>) {
/** /**
* Converts the response to usable data * Converts the response to usable data
* @param res The fetch response *
* @param res - The fetch response
*/ */
export function parseResponse(res: Dispatcher.ResponseData): Promise<unknown> { export function parseResponse(res: Dispatcher.ResponseData): Promise<unknown> {
const header = parseHeader(res.headers['content-type']); const header = parseHeader(res.headers['content-type']);
@@ -70,9 +73,11 @@ export function parseResponse(res: Dispatcher.ResponseData): Promise<unknown> {
/** /**
* Check whether a request falls under a sublimit * Check whether a request falls under a sublimit
* @param bucketRoute The buckets route identifier *
* @param body The options provided as JSON data * @param bucketRoute - The buckets route identifier
* @param method The HTTP method that will be used to make the request * @param body - The options provided as JSON data
* @param method - The HTTP method that will be used to make the request
*
* @returns Whether the request falls under a sublimit * @returns Whether the request falls under a sublimit
*/ */
export function hasSublimit(bucketRoute: string, body?: unknown, method?: string): boolean { export function hasSublimit(bucketRoute: string, body?: unknown, method?: string): boolean {

View File

@@ -0,0 +1,376 @@
/**
* Config file for API Extractor. For more info, please visit: https://api-extractor.com
*/
{
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
/**
* Optionally specifies another JSON config file that this file extends from. This provides a way for
* standard settings to be shared across multiple projects.
*
* If the path starts with "./" or "../", the path is resolved relative to the folder of the file that contains
* the "extends" field. Otherwise, the first path segment is interpreted as an NPM package name, and will be
* resolved using NodeJS require().
*
* SUPPORTED TOKENS: none
* DEFAULT VALUE: ""
*/
// "extends": "./shared/api-extractor-base.json"
// "extends": "my-package/include/api-extractor-base.json"
/**
* Determines the "<projectFolder>" token that can be used with other config file settings. The project folder
* typically contains the tsconfig.json and package.json config files, but the path is user-defined.
*
* The path is resolved relative to the folder of the config file that contains the setting.
*
* The default value for "projectFolder" is the token "<lookup>", which means the folder is determined by traversing
* parent folders, starting from the folder containing api-extractor.json, and stopping at the first folder
* that contains a tsconfig.json file. If a tsconfig.json file cannot be found in this way, then an error
* will be reported.
*
* SUPPORTED TOKENS: <lookup>
* DEFAULT VALUE: "<lookup>"
*/
// "projectFolder": "..",
/**
* (REQUIRED) Specifies the .d.ts file to be used as the starting point for analysis. API Extractor
* analyzes the symbols exported by this module.
*
* The file extension must be ".d.ts" and not ".ts".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
*/
"mainEntryPointFilePath": "<projectFolder>/dist/index.d.ts",
/**
* A list of NPM package names whose exports should be treated as part of this package.
*
* For example, suppose that Webpack is used to generate a distributed bundle for the project "library1",
* and another NPM package "library2" is embedded in this bundle. Some types from library2 may become part
* of the exported API for library1, but by default API Extractor would generate a .d.ts rollup that explicitly
* imports library2. To avoid this, we can specify:
*
* "bundledPackages": [ "library2" ],
*
* This would direct API Extractor to embed those types directly in the .d.ts rollup, as if they had been
* local files for library1.
*/
"bundledPackages": [],
/**
* Determines how the TypeScript compiler engine will be invoked by API Extractor.
*/
"compiler": {
/**
* Specifies the path to the tsconfig.json file to be used by API Extractor when analyzing the project.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* Note: This setting will be ignored if "overrideTsconfig" is used.
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/tsconfig.json"
*/
// "tsconfigFilePath": "<projectFolder>/tsconfig.json",
/**
* Provides a compiler configuration that will be used instead of reading the tsconfig.json file from disk.
* The object must conform to the TypeScript tsconfig schema:
*
* http://json.schemastore.org/tsconfig
*
* If omitted, then the tsconfig.json file will be read from the "projectFolder".
*
* DEFAULT VALUE: no overrideTsconfig section
*/
// "overrideTsconfig": {
// . . .
// }
/**
* This option causes the compiler to be invoked with the --skipLibCheck option. This option is not recommended
* and may cause API Extractor to produce incomplete or incorrect declarations, but it may be required when
* dependencies contain declarations that are incompatible with the TypeScript engine that API Extractor uses
* for its analysis. Where possible, the underlying issue should be fixed rather than relying on skipLibCheck.
*
* DEFAULT VALUE: false
*/
// "skipLibCheck": true,
},
/**
* Configures how the API report file (*.api.md) will be generated.
*/
"apiReport": {
/**
* (REQUIRED) Whether to generate an API report.
*/
"enabled": false
/**
* The filename for the API report files. It will be combined with "reportFolder" or "reportTempFolder" to produce
* a full file path.
*
* The file extension should be ".api.md", and the string should not contain a path separator such as "\" or "/".
*
* SUPPORTED TOKENS: <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<unscopedPackageName>.api.md"
*/
// "reportFileName": "<unscopedPackageName>.api.md",
/**
* Specifies the folder where the API report file is written. The file name portion is determined by
* the "reportFileName" setting.
*
* The API report file is normally tracked by Git. Changes to it can be used to trigger a branch policy,
* e.g. for an API review.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/temp/"
*/
// "reportFolder": "<projectFolder>/temp/",
/**
* Specifies the folder where the temporary report file is written. The file name portion is determined by
* the "reportFileName" setting.
*
* After the temporary file is written to disk, it is compared with the file in the "reportFolder".
* If they are different, a production build will fail.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/temp/"
*/
// "reportTempFolder": "<projectFolder>/temp/"
},
/**
* Configures how the doc model file (*.api.json) will be generated.
*/
"docModel": {
/**
* (REQUIRED) Whether to generate a doc model file.
*/
"enabled": true,
/**
* The output path for the doc model file. The file extension should be ".api.json".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/temp/<unscopedPackageName>.api.json"
*/
"apiJsonFilePath": "<projectFolder>/docs/docs.api.json"
},
/**
* Configures how the .d.ts rollup file will be generated.
*/
"dtsRollup": {
/**
* (REQUIRED) Whether to generate the .d.ts rollup file.
*/
"enabled": false
/**
* Specifies the output path for a .d.ts rollup file to be generated without any trimming.
* This file will include all declarations that are exported by the main entry point.
*
* If the path is an empty string, then this file will not be written.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<projectFolder>/dist/<unscopedPackageName>.d.ts"
*/
// "untrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>.d.ts",
/**
* Specifies the output path for a .d.ts rollup file to be generated with trimming for an "alpha" release.
* This file will include only declarations that are marked as "@public", "@beta", or "@alpha".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: ""
*/
// "alphaTrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>-alpha.d.ts",
/**
* Specifies the output path for a .d.ts rollup file to be generated with trimming for a "beta" release.
* This file will include only declarations that are marked as "@public" or "@beta".
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: ""
*/
// "betaTrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>-beta.d.ts",
/**
* Specifies the output path for a .d.ts rollup file to be generated with trimming for a "public" release.
* This file will include only declarations that are marked as "@public".
*
* If the path is an empty string, then this file will not be written.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: ""
*/
// "publicTrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>-public.d.ts",
/**
* When a declaration is trimmed, by default it will be replaced by a code comment such as
* "Excluded from this release type: exampleMember". Set "omitTrimmingComments" to true to remove the
* declaration completely.
*
* DEFAULT VALUE: false
*/
// "omitTrimmingComments": true
},
/**
* Configures how the tsdoc-metadata.json file will be generated.
*/
"tsdocMetadata": {
/**
* Whether to generate the tsdoc-metadata.json file.
*
* DEFAULT VALUE: true
*/
// "enabled": true,
/**
* Specifies where the TSDoc metadata file should be written.
*
* The path is resolved relative to the folder of the config file that contains the setting; to change this,
* prepend a folder token such as "<projectFolder>".
*
* The default value is "<lookup>", which causes the path to be automatically inferred from the "tsdocMetadata",
* "typings" or "main" fields of the project's package.json. If none of these fields are set, the lookup
* falls back to "tsdoc-metadata.json" in the package folder.
*
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
* DEFAULT VALUE: "<lookup>"
*/
// "tsdocMetadataFilePath": "<projectFolder>/dist/tsdoc-metadata.json"
},
/**
* Specifies what type of newlines API Extractor should use when writing output files. By default, the output files
* will be written with Windows-style newlines. To use POSIX-style newlines, specify "lf" instead.
* To use the OS's default newline kind, specify "os".
*
* DEFAULT VALUE: "crlf"
*/
"newlineKind": "lf",
/**
* Configures how API Extractor reports error and warning messages produced during analysis.
*
* There are three sources of messages: compiler messages, API Extractor messages, and TSDoc messages.
*/
"messages": {
/**
* Configures handling of diagnostic messages reported by the TypeScript compiler engine while analyzing
* the input .d.ts files.
*
* TypeScript message identifiers start with "TS" followed by an integer. For example: "TS2551"
*
* DEFAULT VALUE: A single "default" entry with logLevel=warning.
*/
"compilerMessageReporting": {
/**
* Configures the default routing for messages that don't match an explicit rule in this table.
*/
"default": {
/**
* Specifies whether the message should be written to the the tool's output log. Note that
* the "addToApiReportFile" property may supersede this option.
*
* Possible values: "error", "warning", "none"
*
* Errors cause the build to fail and return a nonzero exit code. Warnings cause a production build fail
* and return a nonzero exit code. For a non-production build (e.g. when "api-extractor run" includes
* the "--local" option), the warning is displayed but the build will not fail.
*
* DEFAULT VALUE: "warning"
*/
"logLevel": "warning"
/**
* When addToApiReportFile is true: If API Extractor is configured to write an API report file (.api.md),
* then the message will be written inside that file; otherwise, the message is instead logged according to
* the "logLevel" option.
*
* DEFAULT VALUE: false
*/
// "addToApiReportFile": false
}
// "TS2551": {
// "logLevel": "warning",
// "addToApiReportFile": true
// },
//
// . . .
},
/**
* Configures handling of messages reported by API Extractor during its analysis.
*
* API Extractor message identifiers start with "ae-". For example: "ae-extra-release-tag"
*
* DEFAULT VALUE: See api-extractor-defaults.json for the complete table of extractorMessageReporting mappings
*/
"extractorMessageReporting": {
"default": {
"logLevel": "warning"
// "addToApiReportFile": false
}
// "ae-extra-release-tag": {
// "logLevel": "warning",
// "addToApiReportFile": true
// },
//
// . . .
},
/**
* Configures handling of messages reported by the TSDoc parser when analyzing code comments.
*
* TSDoc message identifiers start with "tsdoc-". For example: "tsdoc-link-tag-unescaped-text"
*
* DEFAULT VALUE: A single "default" entry with logLevel=warning.
*/
"tsdocMessageReporting": {
"default": {
"logLevel": "warning"
// "addToApiReportFile": false
}
// "tsdoc-link-tag-unescaped-text": {
// "logLevel": "warning",
// "addToApiReportFile": true
// },
//
// . . .
}
}
}

View File

@@ -7,7 +7,7 @@
"test": "jest --coverage", "test": "jest --coverage",
"lint": "prettier --cache --check . && eslint src __tests__ --ext mjs,js,ts --cache", "lint": "prettier --cache --check . && eslint src __tests__ --ext mjs,js,ts --cache",
"format": "prettier --cache --write . && eslint src __tests__ --ext mjs,js,ts --fix --cache", "format": "prettier --cache --write . && eslint src __tests__ --ext mjs,js,ts --fix --cache",
"docs": "docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript", "docs": "docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript && api-extractor run --local",
"prepack": "yarn build && yarn lint && yarn test", "prepack": "yarn build && yarn lint && yarn test",
"changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/voice/*'", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/voice/*'",
"release": "cliff-jumper" "release": "cliff-jumper"
@@ -64,6 +64,7 @@
"@discordjs/docgen": "workspace:^", "@discordjs/docgen": "workspace:^",
"@discordjs/scripts": "workspace:^", "@discordjs/scripts": "workspace:^",
"@favware/cliff-jumper": "^1.8.3", "@favware/cliff-jumper": "^1.8.3",
"@microsoft/api-extractor": "^7.28.2",
"@types/jest": "^28.1.2", "@types/jest": "^28.1.2",
"eslint": "^8.18.0", "eslint": "^8.18.0",
"jest": "^28.1.1", "jest": "^28.1.1",

View File

@@ -125,7 +125,7 @@ export class VoiceUDPSocket extends EventEmitter {
/** /**
* Called when a message is received on the UDP socket. * Called when a message is received on the UDP socket.
* *
* @param buffer The received buffer * @param buffer - The received buffer
*/ */
private onMessage(buffer: Buffer): void { private onMessage(buffer: Buffer): void {
// Handle keep alive message // Handle keep alive message

View File

@@ -45,7 +45,7 @@ export class SSRCMap extends EventEmitter {
/** /**
* Updates the map with new user data * Updates the map with new user data
* *
* @param data The data to update with * @param data - The data to update with
*/ */
public update(data: VoiceUserData) { public update(data: VoiceUserData) {
const existing = this.map.get(data.audioSSRC); const existing = this.map.get(data.audioSSRC);
@@ -63,7 +63,7 @@ export class SSRCMap extends EventEmitter {
/** /**
* Gets the stored voice data of a user. * Gets the stored voice data of a user.
* *
* @param target The target, either their user id or audio SSRC * @param target - The target, either their user id or audio SSRC
*/ */
public get(target: number | string) { public get(target: number | string) {
if (typeof target === 'number') { if (typeof target === 'number') {
@@ -82,7 +82,7 @@ export class SSRCMap extends EventEmitter {
/** /**
* Deletes the stored voice data about a user. * Deletes the stored voice data about a user.
* *
* @param target The target of the delete operation, either their audio SSRC or user id * @param target - The target of the delete operation, either their audio SSRC or user id
* *
* @returns The data that was deleted, if any * @returns The data that was deleted, if any
*/ */

View File

@@ -58,7 +58,7 @@ export class VoiceReceiver {
/** /**
* Called when a packet is received on the attached connection's WebSocket. * Called when a packet is received on the attached connection's WebSocket.
* *
* @param packet The received packet * @param packet - The received packet
* *
* @internal * @internal
*/ */
@@ -118,10 +118,10 @@ export class VoiceReceiver {
/** /**
* Parses an audio packet, decrypting it to yield an Opus packet. * Parses an audio packet, decrypting it to yield an Opus packet.
* *
* @param buffer The buffer to parse * @param buffer - The buffer to parse
* @param mode The encryption mode * @param mode - The encryption mode
* @param nonce The nonce buffer used by the connection for encryption * @param nonce - The nonce buffer used by the connection for encryption
* @param secretKey The secret key used by the connection for encryption * @param secretKey - The secret key used by the connection for encryption
* *
* @returns The parsed Opus packet * @returns The parsed Opus packet
*/ */
@@ -152,7 +152,7 @@ export class VoiceReceiver {
/** /**
* Called when the UDP socket of the attached connection receives a message. * Called when the UDP socket of the attached connection receives a message.
* *
* @param msg The received message * @param msg - The received message
* *
* @internal * @internal
*/ */
@@ -186,7 +186,7 @@ export class VoiceReceiver {
/** /**
* Creates a subscription for the given user id. * Creates a subscription for the given user id.
* *
* @param target The id of the user to subscribe to * @param target - The id of the user to subscribe to
* *
* @returns A readable stream of Opus packets received from the target * @returns A readable stream of Opus packets received from the target
*/ */

View File

@@ -6,7 +6,7 @@ import { StreamType } from '..';
/** /**
* Takes an Opus Head, and verifies whether the associated Opus audio is suitable to play in a Discord voice channel. * Takes an Opus Head, and verifies whether the associated Opus audio is suitable to play in a Discord voice channel.
* *
* @param opusHead The Opus Head to validate * @param opusHead - The Opus Head to validate
* *
* @returns `true` if suitable to play in a Discord voice channel, otherwise `false` * @returns `true` if suitable to play in a Discord voice channel, otherwise `false`
*/ */
@@ -35,9 +35,9 @@ export interface ProbeInfo {
/** /**
* Attempt to probe a readable stream to figure out whether it can be demuxed using an Ogg or WebM Opus demuxer. * Attempt to probe a readable stream to figure out whether it can be demuxed using an Ogg or WebM Opus demuxer.
* *
* @param stream The readable stream to probe * @param stream - The readable stream to probe
* @param probeSize The number of bytes to attempt to read before giving up on the probe * @param probeSize - The number of bytes to attempt to read before giving up on the probe
* @param validator The Opus Head validator function * @param validator - The Opus Head validator function
* *
* @experimental * @experimental
*/ */

273
yarn.lock
View File

@@ -1826,6 +1826,7 @@ __metadata:
"@discordjs/docgen": "workspace:^" "@discordjs/docgen": "workspace:^"
"@discordjs/scripts": "workspace:^" "@discordjs/scripts": "workspace:^"
"@favware/cliff-jumper": ^1.8.3 "@favware/cliff-jumper": ^1.8.3
"@microsoft/api-extractor": ^7.28.2
"@sapphire/shapeshift": ^3.2.0 "@sapphire/shapeshift": ^3.2.0
"@types/node": ^18.0.0 "@types/node": ^18.0.0
discord-api-types: ^0.33.5 discord-api-types: ^0.33.5
@@ -1853,6 +1854,7 @@ __metadata:
"@discordjs/docgen": "workspace:^" "@discordjs/docgen": "workspace:^"
"@discordjs/scripts": "workspace:^" "@discordjs/scripts": "workspace:^"
"@favware/cliff-jumper": ^1.8.3 "@favware/cliff-jumper": ^1.8.3
"@microsoft/api-extractor": ^7.28.2
"@types/node": ^18.0.0 "@types/node": ^18.0.0
eslint: ^8.18.0 eslint: ^8.18.0
prettier: ^2.7.1 prettier: ^2.7.1
@@ -1931,6 +1933,7 @@ __metadata:
"@discordjs/rest": ^0.5.0 "@discordjs/rest": ^0.5.0
"@discordjs/scripts": "workspace:^" "@discordjs/scripts": "workspace:^"
"@favware/cliff-jumper": ^1.8.3 "@favware/cliff-jumper": ^1.8.3
"@microsoft/api-extractor": ^7.28.2
"@types/node": ^18.0.0 "@types/node": ^18.0.0
"@types/supertest": ^2.0.12 "@types/supertest": ^2.0.12
eslint: ^8.18.0 eslint: ^8.18.0
@@ -1965,6 +1968,7 @@ __metadata:
"@discordjs/docgen": "workspace:^" "@discordjs/docgen": "workspace:^"
"@discordjs/scripts": "workspace:^" "@discordjs/scripts": "workspace:^"
"@favware/cliff-jumper": ^1.8.3 "@favware/cliff-jumper": ^1.8.3
"@microsoft/api-extractor": ^7.28.2
"@sapphire/async-queue": ^1.3.1 "@sapphire/async-queue": ^1.3.1
"@sapphire/snowflake": ^3.2.2 "@sapphire/snowflake": ^3.2.2
discord-api-types: ^0.33.5 discord-api-types: ^0.33.5
@@ -2001,6 +2005,7 @@ __metadata:
"@discordjs/docgen": "workspace:^" "@discordjs/docgen": "workspace:^"
"@discordjs/scripts": "workspace:^" "@discordjs/scripts": "workspace:^"
"@favware/cliff-jumper": ^1.8.3 "@favware/cliff-jumper": ^1.8.3
"@microsoft/api-extractor": ^7.28.2
"@types/jest": ^28.1.2 "@types/jest": ^28.1.2
"@types/ws": ^8.5.3 "@types/ws": ^8.5.3
discord-api-types: ^0.33.5 discord-api-types: ^0.33.5
@@ -2508,6 +2513,58 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@microsoft/api-extractor-model@npm:7.21.0":
version: 7.21.0
resolution: "@microsoft/api-extractor-model@npm:7.21.0"
dependencies:
"@microsoft/tsdoc": 0.14.1
"@microsoft/tsdoc-config": ~0.16.1
"@rushstack/node-core-library": 3.49.0
checksum: 9e0cb0cd2d344ee23f32294103856e413fd998ceefc5ea26427b603ef7a6dc155ff6710bf3a30d0c426b9928118e8f56e080f0c0aa9685f3e825e7e154340f62
languageName: node
linkType: hard
"@microsoft/api-extractor@npm:^7.28.2":
version: 7.28.2
resolution: "@microsoft/api-extractor@npm:7.28.2"
dependencies:
"@microsoft/api-extractor-model": 7.21.0
"@microsoft/tsdoc": 0.14.1
"@microsoft/tsdoc-config": ~0.16.1
"@rushstack/node-core-library": 3.49.0
"@rushstack/rig-package": 0.3.13
"@rushstack/ts-command-line": 4.12.1
colors: ~1.2.1
lodash: ~4.17.15
resolve: ~1.17.0
semver: ~7.3.0
source-map: ~0.6.1
typescript: ~4.6.3
bin:
api-extractor: bin/api-extractor
checksum: ba32ce0c8466c09f43d65a32bf57046a7d36216781851bcab339b99b094c66e9beba209b714a9fda41c524e9372aeb686293a0dddb927f71d478f7d3df574861
languageName: node
linkType: hard
"@microsoft/tsdoc-config@npm:~0.16.1":
version: 0.16.1
resolution: "@microsoft/tsdoc-config@npm:0.16.1"
dependencies:
"@microsoft/tsdoc": 0.14.1
ajv: ~6.12.6
jju: ~1.4.0
resolve: ~1.19.0
checksum: 2b2121803caf6584fe0264ad16f8fa10de68438c0b82bd25f918606052af5312050f38b6abd4bcf3d40f120713aab144762a7a280fa22dd12e5571cd08e348e1
languageName: node
linkType: hard
"@microsoft/tsdoc@npm:0.14.1":
version: 0.14.1
resolution: "@microsoft/tsdoc@npm:0.14.1"
checksum: e4ad038ccff2cd96e0d53ee42e2136f0f5a925b16cfda14261f1c2eb55ba0088a0e3b08ff819b476ddc69b2242a391925fab7f6ae2afabb19b96f87e19c114fc
languageName: node
linkType: hard
"@mswjs/cookies@npm:^0.2.0": "@mswjs/cookies@npm:^0.2.0":
version: 0.2.1 version: 0.2.1
resolution: "@mswjs/cookies@npm:0.2.1" resolution: "@mswjs/cookies@npm:0.2.1"
@@ -2818,6 +2875,45 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@rushstack/node-core-library@npm:3.49.0":
version: 3.49.0
resolution: "@rushstack/node-core-library@npm:3.49.0"
dependencies:
"@types/node": 12.20.24
colors: ~1.2.1
fs-extra: ~7.0.1
import-lazy: ~4.0.0
jju: ~1.4.0
resolve: ~1.17.0
semver: ~7.3.0
timsort: ~0.3.0
z-schema: ~5.0.2
checksum: 6ac8247a466faebc242cf8ca6a9960d78dee305482358cca15e9a9ba22f775c18d4f857a9dfcad4c03853d4a6fde768d142a794b6af2baa6aecd5f8faee989a2
languageName: node
linkType: hard
"@rushstack/rig-package@npm:0.3.13":
version: 0.3.13
resolution: "@rushstack/rig-package@npm:0.3.13"
dependencies:
resolve: ~1.17.0
strip-json-comments: ~3.1.1
checksum: 98c0b7dbefe6ae169745d065d696fbef5d07e71bae5146e070a2e37de82c5625752865c54f12bba6b002868fcb27a1d2d098a19b0a5d20a1dfacaa002c81c13d
languageName: node
linkType: hard
"@rushstack/ts-command-line@npm:4.12.1":
version: 4.12.1
resolution: "@rushstack/ts-command-line@npm:4.12.1"
dependencies:
"@types/argparse": 1.0.38
argparse: ~1.0.9
colors: ~1.2.1
string-argv: ~0.3.1
checksum: e9479bd001f4f206d207c867ec7b91444727cf8a1c685dac7589c6a33b54f47200deabc450d6831a1cc38501f0322eb7003c1f78f1fa43230541c4b7ddc4718d
languageName: node
linkType: hard
"@sapphire/async-queue@npm:^1.3.1": "@sapphire/async-queue@npm:^1.3.1":
version: 1.3.1 version: 1.3.1
resolution: "@sapphire/async-queue@npm:1.3.1" resolution: "@sapphire/async-queue@npm:1.3.1"
@@ -3032,6 +3128,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/argparse@npm:1.0.38":
version: 1.0.38
resolution: "@types/argparse@npm:1.0.38"
checksum: 26ed7e3f1e3595efdb883a852f5205f971b798e4c28b7e30a32c5298eee596e8b45834ce831f014d250b9730819ab05acff5b31229666d3af4ba465b4697d0eb
languageName: node
linkType: hard
"@types/aria-query@npm:^4.2.0": "@types/aria-query@npm:^4.2.0":
version: 4.2.2 version: 4.2.2
resolution: "@types/aria-query@npm:4.2.2" resolution: "@types/aria-query@npm:4.2.2"
@@ -3374,6 +3477,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/node@npm:12.20.24":
version: 12.20.24
resolution: "@types/node@npm:12.20.24"
checksum: e7a13460e2f5b0b5a32c0f3af7daf1a05201552a66d542d3cc3b1ea8b52d4730250f9eb1961d755e31cfe5d03c78340911a6242657a0a9a17d6f7e341fc9f366
languageName: node
linkType: hard
"@types/node@npm:>=12": "@types/node@npm:>=12":
version: 17.0.17 version: 17.0.17
resolution: "@types/node@npm:17.0.17" resolution: "@types/node@npm:17.0.17"
@@ -4173,7 +4283,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"ajv@npm:^6.10.0, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.6": "ajv@npm:^6.10.0, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.6, ajv@npm:~6.12.6":
version: 6.12.6 version: 6.12.6
resolution: "ajv@npm:6.12.6" resolution: "ajv@npm:6.12.6"
dependencies: dependencies:
@@ -4321,7 +4431,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"argparse@npm:^1.0.7": "argparse@npm:^1.0.7, argparse@npm:~1.0.9":
version: 1.0.10 version: 1.0.10
resolution: "argparse@npm:1.0.10" resolution: "argparse@npm:1.0.10"
dependencies: dependencies:
@@ -5627,6 +5737,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"colors@npm:~1.2.1":
version: 1.2.5
resolution: "colors@npm:1.2.5"
checksum: b6e23de735f68b72d5cdf6fd854ca43d1b66d82dcf54bda0b788083b910164a040f2c4edf23c670d36a7a2d8f1b7d6e62e3292703e4642691e6ccaa1c62d8f74
languageName: node
linkType: hard
"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6": "combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6":
version: 1.0.8 version: 1.0.8
resolution: "combined-stream@npm:1.0.8" resolution: "combined-stream@npm:1.0.8"
@@ -5687,7 +5804,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"commander@npm:^2.12.1": "commander@npm:^2.12.1, commander@npm:^2.20.3":
version: 2.20.3 version: 2.20.3
resolution: "commander@npm:2.20.3" resolution: "commander@npm:2.20.3"
checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e
@@ -8743,6 +8860,17 @@ dts-critic@latest:
languageName: node languageName: node
linkType: hard linkType: hard
"fs-extra@npm:~7.0.1":
version: 7.0.1
resolution: "fs-extra@npm:7.0.1"
dependencies:
graceful-fs: ^4.1.2
jsonfile: ^4.0.0
universalify: ^0.1.0
checksum: 141b9dccb23b66a66cefdd81f4cda959ff89282b1d721b98cea19ba08db3dcbe6f862f28841f3cf24bb299e0b7e6c42303908f65093cb7e201708e86ea5a8dcf
languageName: node
linkType: hard
"fs-minipass@npm:^2.0.0": "fs-minipass@npm:^2.0.0":
version: 2.1.0 version: 2.1.0
resolution: "fs-minipass@npm:2.1.0" resolution: "fs-minipass@npm:2.1.0"
@@ -9703,6 +9831,13 @@ dts-critic@latest:
languageName: node languageName: node
linkType: hard linkType: hard
"import-lazy@npm:~4.0.0":
version: 4.0.0
resolution: "import-lazy@npm:4.0.0"
checksum: 22f5e51702134aef78890156738454f620e5fe7044b204ebc057c614888a1dd6fdf2ede0fdcca44d5c173fd64f65c985f19a51775b06967ef58cc3d26898df07
languageName: node
linkType: hard
"import-local@npm:^3.0.2": "import-local@npm:^3.0.2":
version: 3.1.0 version: 3.1.0
resolution: "import-local@npm:3.1.0" resolution: "import-local@npm:3.1.0"
@@ -9941,6 +10076,15 @@ dts-critic@latest:
languageName: node languageName: node
linkType: hard linkType: hard
"is-core-module@npm:^2.1.0":
version: 2.9.0
resolution: "is-core-module@npm:2.9.0"
dependencies:
has: ^1.0.3
checksum: b27034318b4b462f1c8f1dfb1b32baecd651d891a4e2d1922135daeff4141dfced2b82b07aef83ef54275c4a3526aa38da859223664d0868ca24182badb784ce
languageName: node
linkType: hard
"is-core-module@npm:^2.2.0, is-core-module@npm:^2.5.0": "is-core-module@npm:^2.2.0, is-core-module@npm:^2.5.0":
version: 2.8.0 version: 2.8.0
resolution: "is-core-module@npm:2.8.0" resolution: "is-core-module@npm:2.8.0"
@@ -10923,6 +11067,13 @@ dts-critic@latest:
languageName: node languageName: node
linkType: hard linkType: hard
"jju@npm:~1.4.0":
version: 1.4.0
resolution: "jju@npm:1.4.0"
checksum: 3790481bd2b7827dd6336e6e3dc2dcc6d425679ba7ebde7b679f61dceb4457ea0cda330972494de608571f4973c6dfb5f70fab6f3c5037dbab19ac449a60424f
languageName: node
linkType: hard
"joycon@npm:^3.0.1": "joycon@npm:^3.0.1":
version: 3.1.1 version: 3.1.1
resolution: "joycon@npm:3.1.1" resolution: "joycon@npm:3.1.1"
@@ -11506,6 +11657,20 @@ dts-critic@latest:
languageName: node languageName: node
linkType: hard linkType: hard
"lodash.get@npm:^4.4.2":
version: 4.4.2
resolution: "lodash.get@npm:4.4.2"
checksum: e403047ddb03181c9d0e92df9556570e2b67e0f0a930fcbbbd779370972368f5568e914f913e93f3b08f6d492abc71e14d4e9b7a18916c31fa04bd2306efe545
languageName: node
linkType: hard
"lodash.isequal@npm:^4.5.0":
version: 4.5.0
resolution: "lodash.isequal@npm:4.5.0"
checksum: da27515dc5230eb1140ba65ff8de3613649620e8656b19a6270afe4866b7bd461d9ba2ac8a48dcc57f7adac4ee80e1de9f965d89d4d81a0ad52bb3eec2609644
languageName: node
linkType: hard
"lodash.ismatch@npm:^4.4.0": "lodash.ismatch@npm:^4.4.0":
version: 4.4.0 version: 4.4.0
resolution: "lodash.ismatch@npm:4.4.0" resolution: "lodash.ismatch@npm:4.4.0"
@@ -11562,7 +11727,7 @@ dts-critic@latest:
languageName: node languageName: node
linkType: hard linkType: hard
"lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.21": "lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.21, lodash@npm:~4.17.15":
version: 4.17.21 version: 4.17.21
resolution: "lodash@npm:4.17.21" resolution: "lodash@npm:4.17.21"
checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7
@@ -14556,6 +14721,25 @@ dts-critic@latest:
languageName: node languageName: node
linkType: hard linkType: hard
"resolve@npm:~1.17.0":
version: 1.17.0
resolution: "resolve@npm:1.17.0"
dependencies:
path-parse: ^1.0.6
checksum: 9ceaf83b3429f2d7ff5d0281b8d8f18a1f05b6ca86efea7633e76b8f76547f33800799dfdd24434942dec4fbd9e651ed3aef577d9a6b5ec87ad89c1060e24759
languageName: node
linkType: hard
"resolve@npm:~1.19.0":
version: 1.19.0
resolution: "resolve@npm:1.19.0"
dependencies:
is-core-module: ^2.1.0
path-parse: ^1.0.6
checksum: a05b356e47b85ad3613d9e2a39a824f3c27f4fcad9c9ff6c7cc71a2e314c5904a90ab37481ad0069d03cab9eaaac6eb68aca1bc3355fdb05f1045cd50e2aacea
languageName: node
linkType: hard
"resolve@patch:resolve@^1.10.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.20.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.3.2#~builtin<compat/resolve>": "resolve@patch:resolve@^1.10.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.20.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.3.2#~builtin<compat/resolve>":
version: 1.20.0 version: 1.20.0
resolution: "resolve@patch:resolve@npm%3A1.20.0#~builtin<compat/resolve>::version=1.20.0&hash=07638b" resolution: "resolve@patch:resolve@npm%3A1.20.0#~builtin<compat/resolve>::version=1.20.0&hash=07638b"
@@ -14589,6 +14773,25 @@ dts-critic@latest:
languageName: node languageName: node
linkType: hard linkType: hard
"resolve@patch:resolve@~1.17.0#~builtin<compat/resolve>":
version: 1.17.0
resolution: "resolve@patch:resolve@npm%3A1.17.0#~builtin<compat/resolve>::version=1.17.0&hash=07638b"
dependencies:
path-parse: ^1.0.6
checksum: 6fd799f282ddf078c4bc20ce863e3af01fa8cb218f0658d9162c57161a2dbafe092b13015b9a4c58d0e1e801cf7aa7a4f13115fea9db98c3f9a0c43e429bad6f
languageName: node
linkType: hard
"resolve@patch:resolve@~1.19.0#~builtin<compat/resolve>":
version: 1.19.0
resolution: "resolve@patch:resolve@npm%3A1.19.0#~builtin<compat/resolve>::version=1.19.0&hash=07638b"
dependencies:
is-core-module: ^2.1.0
path-parse: ^1.0.6
checksum: 2443b94d347e6946c87c85faf13071f605e609e0b54784829b0ed2b917d050bfc1cbaf4ecc6453f224cfa7d0c5dcd97cbb273454cd210bee68e4af15c1a5abc9
languageName: node
linkType: hard
"responselike@npm:^2.0.0": "responselike@npm:^2.0.0":
version: 2.0.0 version: 2.0.0
resolution: "responselike@npm:2.0.0" resolution: "responselike@npm:2.0.0"
@@ -14828,7 +15031,7 @@ dts-critic@latest:
languageName: node languageName: node
linkType: hard linkType: hard
"semver@npm:7.3.7, semver@npm:^7.3.2, semver@npm:^7.3.7": "semver@npm:7.3.7, semver@npm:^7.3.2, semver@npm:^7.3.7, semver@npm:~7.3.0":
version: 7.3.7 version: 7.3.7
resolution: "semver@npm:7.3.7" resolution: "semver@npm:7.3.7"
dependencies: dependencies:
@@ -15465,6 +15668,13 @@ dts-critic@latest:
languageName: node languageName: node
linkType: hard linkType: hard
"string-argv@npm:~0.3.1":
version: 0.3.1
resolution: "string-argv@npm:0.3.1"
checksum: efbd0289b599bee808ce80820dfe49c9635610715429c6b7cc50750f0437e3c2f697c81e5c390208c13b5d5d12d904a1546172a88579f6ee5cbaaaa4dc9ec5cf
languageName: node
linkType: hard
"string-length@npm:^4.0.1": "string-length@npm:^4.0.1":
version: 4.0.2 version: 4.0.2
resolution: "string-length@npm:4.0.2" resolution: "string-length@npm:4.0.2"
@@ -15638,7 +15848,7 @@ dts-critic@latest:
languageName: node languageName: node
linkType: hard linkType: hard
"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": "strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1, strip-json-comments@npm:~3.1.1":
version: 3.1.1 version: 3.1.1
resolution: "strip-json-comments@npm:3.1.1" resolution: "strip-json-comments@npm:3.1.1"
checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443
@@ -16016,6 +16226,13 @@ dts-critic@latest:
languageName: node languageName: node
linkType: hard linkType: hard
"timsort@npm:~0.3.0":
version: 0.3.0
resolution: "timsort@npm:0.3.0"
checksum: 1a66cb897dacabd7dd7c91b7e2301498ca9e224de2edb9e42d19f5b17c4b6dc62a8d4cbc64f28be82aaf1541cb5a78ab49aa818f42a2989ebe049a64af731e2a
languageName: node
linkType: hard
"tinypool@npm:^0.1.3": "tinypool@npm:^0.1.3":
version: 0.1.3 version: 0.1.3
resolution: "tinypool@npm:0.1.3" resolution: "tinypool@npm:0.1.3"
@@ -16691,6 +16908,16 @@ dts-critic@latest:
languageName: node languageName: node
linkType: hard linkType: hard
"typescript@npm:~4.6.3":
version: 4.6.4
resolution: "typescript@npm:4.6.4"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: e7bfcc39cd4571a63a54e5ea21f16b8445268b9900bf55aee0e02ad981be576acc140eba24f1af5e3c1457767c96cea6d12861768fb386cf3ffb34013718631a
languageName: node
linkType: hard
"typescript@patch:typescript@^4.6.4#~builtin<compat/typescript>, typescript@patch:typescript@^4.7.3#~builtin<compat/typescript>": "typescript@patch:typescript@^4.6.4#~builtin<compat/typescript>, typescript@patch:typescript@^4.7.3#~builtin<compat/typescript>":
version: 4.7.3 version: 4.7.3
resolution: "typescript@patch:typescript@npm%3A4.7.3#~builtin<compat/typescript>::version=4.7.3&hash=7ad353" resolution: "typescript@patch:typescript@npm%3A4.7.3#~builtin<compat/typescript>::version=4.7.3&hash=7ad353"
@@ -16711,6 +16938,16 @@ dts-critic@latest:
languageName: node languageName: node
linkType: hard linkType: hard
"typescript@patch:typescript@~4.6.3#~builtin<compat/typescript>":
version: 4.6.4
resolution: "typescript@patch:typescript@npm%3A4.6.4#~builtin<compat/typescript>::version=4.6.4&hash=7ad353"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 1cb434fbc637d347be90e3a0c6cd05e33c38f941713c8786d3031faf1842c2c148ba91d2fac01e7276b0ae3249b8633f1660e32686cc7a8c6a8fd5361dc52c66
languageName: node
linkType: hard
"typical@npm:^2.4.2, typical@npm:^2.6.0, typical@npm:^2.6.1": "typical@npm:^2.4.2, typical@npm:^2.6.0, typical@npm:^2.6.1":
version: 2.6.1 version: 2.6.1
resolution: "typical@npm:2.6.1" resolution: "typical@npm:2.6.1"
@@ -17182,6 +17419,13 @@ dts-critic@latest:
languageName: node languageName: node
linkType: hard linkType: hard
"validator@npm:^13.7.0":
version: 13.7.0
resolution: "validator@npm:13.7.0"
checksum: 2b83283de1222ca549a7ef57f46e8d49c6669213348db78b7045bce36a3b5843ff1e9f709ebf74574e06223461ee1f264f8cc9a26a0060a79a27de079d8286ef
languageName: node
linkType: hard
"vary@npm:~1.1.2": "vary@npm:~1.1.2":
version: 1.1.2 version: 1.1.2
resolution: "vary@npm:1.1.2" resolution: "vary@npm:1.1.2"
@@ -17763,6 +18007,23 @@ dts-critic@latest:
languageName: node languageName: node
linkType: hard linkType: hard
"z-schema@npm:~5.0.2":
version: 5.0.3
resolution: "z-schema@npm:5.0.3"
dependencies:
commander: ^2.20.3
lodash.get: ^4.4.2
lodash.isequal: ^4.5.0
validator: ^13.7.0
dependenciesMeta:
commander:
optional: true
bin:
z-schema: bin/z-schema
checksum: eb6c2c3c2878c4c333fd3755703616c8f846158da0154f60f81f188c3c4ce7ad5b8ff5ce570d6372d4803fb5c8c9d97b4e54becdd5a832b1a31240d149b87191
languageName: node
linkType: hard
"zwitch@npm:^2.0.0": "zwitch@npm:^2.0.0":
version: 2.0.2 version: 2.0.2
resolution: "zwitch@npm:2.0.2" resolution: "zwitch@npm:2.0.2"