discord.js/packages/api-extractor-model
Qjuh b0e57126dc
fix(website): link tags to events named same as methods (#10351)
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2024-06-17 13:26:58 +00:00
..
config
src fix(website): link tags to events named same as methods (#10351) 2024-06-17 13:26:58 +00:00
.gitignore
.lintstagedrc.js build: multi-config build and dep update 2023-11-14 01:26:22 +01:00
.npmignore
.prettierignore
.prettierrc.js build: multi-config build and dep update 2023-11-14 01:26:22 +01:00
CHANGELOG.json
CHANGELOG.md
LICENSE
package.json build: Bump dependencies (#10322) 2024-06-05 09:42:33 +00:00
README.md
tsconfig.eslint.json build: fix the messy dependency graph 2023-11-09 00:13:01 +01:00
tsconfig.json build: fix the messy dependency graph 2023-11-09 00:13:01 +01:00
tsup.config.ts build: multi-config build and dep update 2023-11-14 01:26:22 +01:00

@discordjs/api-extractor-model

Use this library to read and write *.api.json files as defined by the API Extractor tool. These files are used to generate a documentation website for your TypeScript package. The files store the API signatures and doc comments that were extracted from your package.

API documentation for this package: https://rushstack.io/pages/api/api-extractor-model/

Example Usage

The following code sample shows how to load example.api.json, which would be generated by API Extractor when it analyzes a hypothetical NPM package called example:

import { ApiModel, ApiPackage } from '@discordjs/api-extractor-model';

const apiModel: ApiModel = new ApiModel();
const apiPackage: ApiPackage = apiModel.loadPackage('example.api.json');

for (const member of apiPackage.members) {
	console.log(member.displayName);
}

The ApiModel is acts as a container for various packages that are loaded and operated on as a group. For example, a documentation tool may need to resolve @link references across different packages. In this case we would load the various packages into the ApiModel, and then use the ApiModel.resolveDeclarationReference() to resolve the @link targets.

The data structure forms a tree of various classes that start with the Api prefix. The nesting hierarchy might look like this:

- ApiModel
  - ApiPackage
    - ApiEntryPoint
      - ApiClass
        - ApiMethod
        - ApiProperty
      - ApiEnum
        - ApiEnumMember
      - ApiInterface
        - ApiMethodSignature
        - ApiPropertySignature
      - ApiNamespace
        - (ApiClass, ApiEnum, ApiInterface, ...)

You can use the ApiItem.members property to traverse this tree.

Note that the non-abstract classes (e.g. ApiClass, ApiEnum, ApiInterface, etc.) use TypeScript "mixin" functions (e.g. ApiDeclaredItem, ApiItemContainerMixin, etc.) to add various features that cannot be represented as a normal inheritance chain (since TypeScript does not allow a child class to extend more than one base class). The "mixin" is a TypeScript merged declaration with three components: the function that generates a subclass, an interface that describes the members of the subclass, and a namespace containing static members of the class.

For a complete project that uses these APIs to generate an API reference web site, see the @microsoft/api-documenter source code.

API Extractor is part of the Rush Stack family of projects.