Showing preview only (6,512K chars total). Download the full file or copy to clipboard to get everything.
Repository: discordjs/discord.js
Branch: main
Commit: 2a067216c410
Files: 1689
Total size: 5.9 MB
Directory structure:
gitextract_it4iz3cx/
├── .commitlintrc.json
├── .dockerignore
├── .git-blame-ignore-revs
├── .gitattributes
├── .github/
│ ├── .kodiak.toml
│ ├── CODEOWNERS
│ ├── CODE_OF_CONDUCT.md
│ ├── COMMIT_CONVENTION.md
│ ├── CONTRIBUTING.md
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── 01-package_bug_report.yml
│ │ ├── 02-application_bug_report.yml
│ │ ├── 03-proxy_container_bug_report.yml
│ │ ├── 04-feature_request.yml
│ │ ├── 05-guide.yml
│ │ └── config.yml
│ ├── SUPPORT.md
│ ├── issue-labeler.yml
│ ├── labeler.yml
│ ├── labels.yml
│ ├── tsc.json
│ └── workflows/
│ ├── cleanup-cache.yml
│ ├── deploy-website.yml
│ ├── deprecate-version.yml
│ ├── documentation.yml
│ ├── issue-triage.yml
│ ├── label-sync.yml
│ ├── lock.yml
│ ├── pr-triage.yml
│ ├── publish-dev-docker.yml
│ ├── publish-dev.yml
│ ├── publish-docker.yml
│ ├── release.yml
│ ├── remove-tag.yml
│ ├── tests.yml
│ └── upload-readmes.yml
├── .gitignore
├── .husky/
│ ├── commit-msg
│ └── pre-commit
├── .lintstagedrc.json
├── .prettierignore
├── .prettierrc.json
├── .vscode/
│ ├── extensions.json
│ └── settings.json
├── LICENSE
├── README.md
├── api-extractor.json
├── apps/
│ ├── guide/
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.cjs
│ │ ├── .prettierignore
│ │ ├── .prettierrc.cjs
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── content/
│ │ │ └── docs/
│ │ │ ├── legacy/
│ │ │ │ ├── additional-features/
│ │ │ │ │ ├── cooldowns.mdx
│ │ │ │ │ ├── meta.json
│ │ │ │ │ └── reloading-commands.mdx
│ │ │ │ ├── additional-info/
│ │ │ │ │ ├── async-await.mdx
│ │ │ │ │ ├── changes-in-v14.mdx
│ │ │ │ │ ├── collections.mdx
│ │ │ │ │ ├── es6-syntax.mdx
│ │ │ │ │ ├── meta.json
│ │ │ │ │ ├── notation.mdx
│ │ │ │ │ ├── proxy.mdx
│ │ │ │ │ └── rest-api.mdx
│ │ │ │ ├── app-creation/
│ │ │ │ │ ├── creating-commands.mdx
│ │ │ │ │ ├── deploying-commands.mdx
│ │ │ │ │ ├── handling-commands.mdx
│ │ │ │ │ ├── handling-events.mdx
│ │ │ │ │ ├── main-file.mdx
│ │ │ │ │ ├── meta.json
│ │ │ │ │ └── project-setup.mdx
│ │ │ │ ├── improving-dev-environment/
│ │ │ │ │ ├── meta.json
│ │ │ │ │ ├── package-json-scripts.mdx
│ │ │ │ │ └── pm2.mdx
│ │ │ │ ├── index.mdx
│ │ │ │ ├── interactions/
│ │ │ │ │ ├── context-menus.mdx
│ │ │ │ │ ├── meta.json
│ │ │ │ │ └── modals.mdx
│ │ │ │ ├── interactive-components/
│ │ │ │ │ ├── action-rows.mdx
│ │ │ │ │ ├── buttons.mdx
│ │ │ │ │ ├── interactions.mdx
│ │ │ │ │ ├── meta.json
│ │ │ │ │ └── select-menus.mdx
│ │ │ │ ├── keyv/
│ │ │ │ │ └── keyv.mdx
│ │ │ │ ├── meta.json
│ │ │ │ ├── miscellaneous/
│ │ │ │ │ ├── cache-customization.mdx
│ │ │ │ │ └── useful-packages.mdx
│ │ │ │ ├── oauth2/
│ │ │ │ │ └── oauth2.mdx
│ │ │ │ ├── popular-topics/
│ │ │ │ │ ├── audit-logs.mdx
│ │ │ │ │ ├── canvas.mdx
│ │ │ │ │ ├── collectors.mdx
│ │ │ │ │ ├── display-components.mdx
│ │ │ │ │ ├── embeds.mdx
│ │ │ │ │ ├── errors.mdx
│ │ │ │ │ ├── faq.mdx
│ │ │ │ │ ├── formatters.mdx
│ │ │ │ │ ├── intents.mdx
│ │ │ │ │ ├── meta.json
│ │ │ │ │ ├── partials.mdx
│ │ │ │ │ ├── permissions-extended.mdx
│ │ │ │ │ ├── permissions.mdx
│ │ │ │ │ ├── reactions.mdx
│ │ │ │ │ ├── threads.mdx
│ │ │ │ │ └── webhooks.mdx
│ │ │ │ ├── preparations/
│ │ │ │ │ ├── adding-your-app.mdx
│ │ │ │ │ ├── app-setup.mdx
│ │ │ │ │ ├── installation.mdx
│ │ │ │ │ ├── linter.mdx
│ │ │ │ │ └── meta.json
│ │ │ │ ├── sequelize/
│ │ │ │ │ ├── currency.mdx
│ │ │ │ │ └── index.mdx
│ │ │ │ ├── sharding/
│ │ │ │ │ ├── additional-information.mdx
│ │ │ │ │ ├── extended.mdx
│ │ │ │ │ └── index.mdx
│ │ │ │ └── slash-commands/
│ │ │ │ ├── advanced-creation.mdx
│ │ │ │ ├── autocomplete.mdx
│ │ │ │ ├── deleting-commands.mdx
│ │ │ │ ├── meta.json
│ │ │ │ ├── parsing-options.mdx
│ │ │ │ ├── permissions.mdx
│ │ │ │ └── response-methods.mdx
│ │ │ ├── meta.json
│ │ │ ├── v15/
│ │ │ │ ├── index.mdx
│ │ │ │ └── meta.json
│ │ │ └── voice/
│ │ │ ├── audio-player.mdx
│ │ │ ├── audio-resources.mdx
│ │ │ ├── index.mdx
│ │ │ ├── life-cycles.mdx
│ │ │ ├── meta.json
│ │ │ ├── seeking.mdx
│ │ │ └── voice-connections.mdx
│ │ ├── next.config.ts
│ │ ├── open-next.config.ts
│ │ ├── package.json
│ │ ├── postcss.config.js
│ │ ├── public/
│ │ │ ├── _headers
│ │ │ └── site.webmanifest
│ │ ├── source.config.ts
│ │ ├── src/
│ │ │ ├── app/
│ │ │ │ ├── [[...slug]]/
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── api/
│ │ │ │ │ └── search/
│ │ │ │ │ └── route.ts
│ │ │ │ ├── layout.client.tsx
│ │ │ │ ├── layout.config.tsx
│ │ │ │ ├── layout.tsx
│ │ │ │ └── og/
│ │ │ │ └── [...slug]/
│ │ │ │ └── route.tsx
│ │ │ ├── components/
│ │ │ │ ├── GitHubInfo.tsx
│ │ │ │ └── mdx/
│ │ │ │ └── mermaid.tsx
│ │ │ ├── lib/
│ │ │ │ └── source.ts
│ │ │ ├── mdx-components.tsx
│ │ │ ├── middleware.ts
│ │ │ ├── styles/
│ │ │ │ └── base.css
│ │ │ └── util/
│ │ │ └── env.ts
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ └── wrangler.jsonc
│ ├── proxy-container/
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.cjs
│ │ ├── .prettierignore
│ │ ├── .prettierrc.cjs
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── index.ts
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ └── website/
│ ├── .gitignore
│ ├── .lintstagedrc.cjs
│ ├── .prettierignore
│ ├── .prettierrc.cjs
│ ├── LICENSE
│ ├── README.md
│ ├── next.config.ts
│ ├── open-next.config.ts
│ ├── package.json
│ ├── postcss.config.js
│ ├── public/
│ │ ├── _headers
│ │ └── site.webmanifest
│ ├── scripts/
│ │ └── generateAllIndices.js
│ ├── src/
│ │ ├── app/
│ │ │ ├── api/
│ │ │ │ └── docs/
│ │ │ │ ├── entrypoints/
│ │ │ │ │ └── route.ts
│ │ │ │ ├── sitemap/
│ │ │ │ │ └── route.ts
│ │ │ │ └── versions/
│ │ │ │ └── route.ts
│ │ │ ├── docs/
│ │ │ │ └── packages/
│ │ │ │ ├── [packageName]/
│ │ │ │ │ └── [version]/
│ │ │ │ │ └── [[...item]]/
│ │ │ │ │ ├── CmdK.tsx
│ │ │ │ │ ├── layout.tsx
│ │ │ │ │ ├── opengraph-image.tsx.bak
│ │ │ │ │ └── page.tsx
│ │ │ │ └── layout.tsx
│ │ │ ├── layout.tsx
│ │ │ ├── not-found.tsx
│ │ │ ├── opengraph-image.tsx
│ │ │ ├── page.tsx
│ │ │ └── providers.tsx
│ │ ├── components/
│ │ │ ├── Badges.tsx
│ │ │ ├── CmdK.tsx
│ │ │ ├── ConstructorNode.tsx
│ │ │ ├── DeprecatedNode.tsx
│ │ │ ├── DocItem.tsx
│ │ │ ├── DocKind.tsx
│ │ │ ├── DocNode.tsx
│ │ │ ├── EntrypointSelect.tsx
│ │ │ ├── EnumMemberNode.tsx
│ │ │ ├── EventNode.tsx
│ │ │ ├── ExampleNode.tsx
│ │ │ ├── ExcerptNode.tsx
│ │ │ ├── Footer.tsx
│ │ │ ├── InformationNode.tsx
│ │ │ ├── InheritanceNode.tsx
│ │ │ ├── InheritedFromNode.tsx
│ │ │ ├── InstallButton.tsx
│ │ │ ├── MethodNode.tsx
│ │ │ ├── Navigation.tsx
│ │ │ ├── NavigationItem.tsx
│ │ │ ├── Outline.tsx
│ │ │ ├── OverlayScrollbars.tsx
│ │ │ ├── PackageSelect.tsx
│ │ │ ├── ParameterNode.tsx
│ │ │ ├── PropertyNode.tsx
│ │ │ ├── ReturnNode.tsx
│ │ │ ├── SearchButton.tsx
│ │ │ ├── SeeNode.tsx
│ │ │ ├── Sidebar.tsx
│ │ │ ├── SummaryNode.tsx
│ │ │ ├── SyntaxHighlighter.tsx
│ │ │ ├── ThemeSwitch.tsx
│ │ │ ├── TypeParameterNode.tsx
│ │ │ ├── UnionMember.tsx
│ │ │ ├── UnstableNode.tsx
│ │ │ ├── VersionSelect.tsx
│ │ │ └── ui/
│ │ │ ├── Alert.tsx
│ │ │ ├── Button.tsx
│ │ │ ├── Collapsible.tsx
│ │ │ ├── Dialog.tsx
│ │ │ ├── Dropdown.tsx
│ │ │ ├── Field.tsx
│ │ │ ├── Keyboard.tsx
│ │ │ ├── ListBox.tsx
│ │ │ ├── Popover.tsx
│ │ │ ├── Select.tsx
│ │ │ ├── Sheet.tsx
│ │ │ ├── Sidebar.tsx
│ │ │ └── Tabs.tsx
│ │ ├── hooks/
│ │ │ ├── useSystemThemeFallback.ts
│ │ │ └── useUnregisterServiceWorker.ts
│ │ ├── middleware.ts
│ │ ├── stores/
│ │ │ ├── cmdk.ts
│ │ │ └── drawer.ts
│ │ ├── styles/
│ │ │ ├── base.css
│ │ │ ├── cva.ts
│ │ │ ├── ui/
│ │ │ │ ├── button.ts
│ │ │ │ └── focusRing.ts
│ │ │ └── util.ts
│ │ └── util/
│ │ ├── builtinDocumentationLinks.ts
│ │ ├── constants.ts
│ │ ├── env.ts
│ │ ├── fetchDependencies.ts
│ │ ├── fetchEntryPoints.ts
│ │ ├── fetchLatestVersion.ts
│ │ ├── fetchNode.ts
│ │ ├── fetchSitemap.ts
│ │ ├── fetchVersions.ts
│ │ ├── parseDocsPathParams.ts
│ │ ├── resolveNodeKind.tsx
│ │ └── shiki.bundle.ts
│ ├── tsconfig.eslint.json
│ ├── tsconfig.json
│ └── wrangler.jsonc
├── biome.json
├── codecov.yml
├── eslint.config.js
├── package.json
├── packages/
│ ├── actions/
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.cjs
│ │ ├── .prettierignore
│ │ ├── .prettierrc.cjs
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── __tests__/
│ │ │ └── formatTag.test.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── deprecateVersion/
│ │ │ │ └── action.yml
│ │ │ ├── formatTag/
│ │ │ │ ├── action.yml
│ │ │ │ ├── formatTag.ts
│ │ │ │ └── index.ts
│ │ │ ├── index.ts
│ │ │ ├── pnpmCache/
│ │ │ │ └── action.yml
│ │ │ ├── releasePackages/
│ │ │ │ ├── action.yml
│ │ │ │ ├── generateReleaseTree.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── releasePackage.ts
│ │ │ ├── uploadCoverage/
│ │ │ │ └── action.yml
│ │ │ ├── uploadDocumentation/
│ │ │ │ ├── action.yml
│ │ │ │ └── index.ts
│ │ │ ├── uploadReadmeFiles/
│ │ │ │ ├── action.yml
│ │ │ │ └── index.ts
│ │ │ ├── uploadSearchIndices/
│ │ │ │ ├── action.yml
│ │ │ │ └── index.ts
│ │ │ ├── uploadSplitDocumentation/
│ │ │ │ ├── action.yml
│ │ │ │ └── index.ts
│ │ │ └── yarnCache/
│ │ │ └── action.yml
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.test.json
│ │ └── tsup.config.ts
│ ├── api-extractor/
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.js
│ │ ├── .npmignore
│ │ ├── .prettierignore
│ │ ├── .prettierrc.js
│ │ ├── CHANGELOG.json
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bin/
│ │ │ └── api-extractor
│ │ ├── config/
│ │ │ ├── api-extractor.json
│ │ │ └── jest.config.json
│ │ ├── extends/
│ │ │ └── tsdoc-base.json
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── aedoc/
│ │ │ │ └── PackageDocComment.ts
│ │ │ ├── analyzer/
│ │ │ │ ├── AstDeclaration.ts
│ │ │ │ ├── AstEntity.ts
│ │ │ │ ├── AstImport.ts
│ │ │ │ ├── AstModule.ts
│ │ │ │ ├── AstNamespaceExport.ts
│ │ │ │ ├── AstNamespaceImport.ts
│ │ │ │ ├── AstReferenceResolver.ts
│ │ │ │ ├── AstSymbol.ts
│ │ │ │ ├── AstSymbolTable.ts
│ │ │ │ ├── ExportAnalyzer.ts
│ │ │ │ ├── PackageMetadataManager.ts
│ │ │ │ ├── SourceFileLocationFormatter.ts
│ │ │ │ ├── Span.ts
│ │ │ │ ├── SyntaxHelpers.ts
│ │ │ │ ├── TypeScriptHelpers.ts
│ │ │ │ └── TypeScriptInternals.ts
│ │ │ ├── api/
│ │ │ │ ├── CompilerState.ts
│ │ │ │ ├── ConsoleMessageId.ts
│ │ │ │ ├── Extractor.ts
│ │ │ │ ├── ExtractorConfig.ts
│ │ │ │ ├── ExtractorLogLevel.ts
│ │ │ │ ├── ExtractorMessage.ts
│ │ │ │ ├── ExtractorMessageId.ts
│ │ │ │ └── IConfigFile.ts
│ │ │ ├── cli/
│ │ │ │ ├── ApiExtractorCommandLine.ts
│ │ │ │ ├── InitAction.ts
│ │ │ │ └── RunAction.ts
│ │ │ ├── collector/
│ │ │ │ ├── ApiItemMetadata.ts
│ │ │ │ ├── Collector.ts
│ │ │ │ ├── CollectorEntity.ts
│ │ │ │ ├── DeclarationMetadata.ts
│ │ │ │ ├── MessageRouter.ts
│ │ │ │ ├── SourceMapper.ts
│ │ │ │ ├── SymbolMetadata.ts
│ │ │ │ ├── VisitorState.ts
│ │ │ │ └── WorkingPackage.ts
│ │ │ ├── enhancers/
│ │ │ │ ├── DocCommentEnhancer.ts
│ │ │ │ └── ValidationEnhancer.ts
│ │ │ ├── generators/
│ │ │ │ ├── ApiModelGenerator.ts
│ │ │ │ ├── ApiReportGenerator.ts
│ │ │ │ ├── DeclarationReferenceGenerator.ts
│ │ │ │ ├── DtsEmitHelpers.ts
│ │ │ │ ├── DtsRollupGenerator.ts
│ │ │ │ ├── ExcerptBuilder.ts
│ │ │ │ └── IndentedWriter.ts
│ │ │ ├── index.ts
│ │ │ ├── schemas/
│ │ │ │ ├── api-extractor-defaults.json
│ │ │ │ ├── api-extractor-template.json
│ │ │ │ └── api-extractor.schema.json
│ │ │ └── start.ts
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── api-extractor-model/
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.js
│ │ ├── .npmignore
│ │ ├── .prettierignore
│ │ ├── .prettierrc.js
│ │ ├── CHANGELOG.json
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── config/
│ │ │ └── api-extractor.json
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── aedoc/
│ │ │ │ ├── AedocDefinitions.ts
│ │ │ │ └── ReleaseTag.ts
│ │ │ ├── index.ts
│ │ │ ├── items/
│ │ │ │ ├── ApiDeclaredItem.ts
│ │ │ │ ├── ApiDocumentedItem.ts
│ │ │ │ ├── ApiItem.ts
│ │ │ │ └── ApiPropertyItem.ts
│ │ │ ├── mixins/
│ │ │ │ ├── ApiAbstractMixin.ts
│ │ │ │ ├── ApiExportedMixin.ts
│ │ │ │ ├── ApiInitializerMixin.ts
│ │ │ │ ├── ApiItemContainerMixin.ts
│ │ │ │ ├── ApiNameMixin.ts
│ │ │ │ ├── ApiOptionalMixin.ts
│ │ │ │ ├── ApiParameterListMixin.ts
│ │ │ │ ├── ApiProtectedMixin.ts
│ │ │ │ ├── ApiReadonlyMixin.ts
│ │ │ │ ├── ApiReleaseTagMixin.ts
│ │ │ │ ├── ApiReturnTypeMixin.ts
│ │ │ │ ├── ApiStaticMixin.ts
│ │ │ │ ├── ApiTypeParameterListMixin.ts
│ │ │ │ ├── Excerpt.ts
│ │ │ │ ├── IFindApiItemsResult.ts
│ │ │ │ └── Mixin.ts
│ │ │ └── model/
│ │ │ ├── ApiCallSignature.ts
│ │ │ ├── ApiClass.ts
│ │ │ ├── ApiConstructSignature.ts
│ │ │ ├── ApiConstructor.ts
│ │ │ ├── ApiEntryPoint.ts
│ │ │ ├── ApiEnum.ts
│ │ │ ├── ApiEnumMember.ts
│ │ │ ├── ApiEvent.ts
│ │ │ ├── ApiFunction.ts
│ │ │ ├── ApiIndexSignature.ts
│ │ │ ├── ApiInterface.ts
│ │ │ ├── ApiMethod.ts
│ │ │ ├── ApiMethodSignature.ts
│ │ │ ├── ApiModel.ts
│ │ │ ├── ApiNamespace.ts
│ │ │ ├── ApiPackage.ts
│ │ │ ├── ApiProperty.ts
│ │ │ ├── ApiPropertySignature.ts
│ │ │ ├── ApiTypeAlias.ts
│ │ │ ├── ApiVariable.ts
│ │ │ ├── Deserializer.ts
│ │ │ ├── DeserializerContext.ts
│ │ │ ├── HeritageType.ts
│ │ │ ├── ModelReferenceResolver.ts
│ │ │ ├── Parameter.ts
│ │ │ ├── SourceLocation.ts
│ │ │ └── TypeParameter.ts
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── api-extractor-utils/
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.js
│ │ ├── .prettierignore
│ │ ├── .prettierrc.js
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── ApiNodeJSONEncoder.ts
│ │ │ ├── TypeParameterJSONEncoder.ts
│ │ │ ├── index.ts
│ │ │ ├── parse.ts
│ │ │ └── tsdoc/
│ │ │ ├── CommentBlock.ts
│ │ │ ├── CommentBlockTag.ts
│ │ │ ├── CommentCodeSpan.ts
│ │ │ ├── CommentNode.ts
│ │ │ ├── CommentNodeContainer.ts
│ │ │ ├── FencedCodeCommentNode.ts
│ │ │ ├── LinkTagCommentNode.ts
│ │ │ ├── ParamBlock.ts
│ │ │ ├── PlainTextCommentNode.ts
│ │ │ ├── RootComment.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── brokers/
│ │ ├── .cliff-jumperrc.json
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.js
│ │ ├── .prettierignore
│ │ ├── .prettierrc.js
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── __tests__/
│ │ │ └── index.test.ts
│ │ ├── api-extractor.json
│ │ ├── cliff.toml
│ │ ├── docs/
│ │ │ └── README.md
│ │ ├── package.json
│ │ ├── scripts/
│ │ │ └── xcleangroup.lua
│ │ ├── src/
│ │ │ ├── brokers/
│ │ │ │ ├── Broker.ts
│ │ │ │ └── redis/
│ │ │ │ ├── BaseRedis.ts
│ │ │ │ ├── PubSubRedis.ts
│ │ │ │ ├── RPCRedis.ts
│ │ │ │ └── RedisGateway.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.docs.json
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.test.json
│ │ └── tsup.config.ts
│ ├── builders/
│ │ ├── .cliff-jumperrc.json
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.js
│ │ ├── .prettierignore
│ │ ├── .prettierrc.js
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── __tests__/
│ │ │ ├── components/
│ │ │ │ ├── actionRow.test.ts
│ │ │ │ ├── button.test.ts
│ │ │ │ ├── components.test.ts
│ │ │ │ ├── fileUpload.test.ts
│ │ │ │ ├── label.test.ts
│ │ │ │ ├── selectMenu.test.ts
│ │ │ │ ├── textInput.test.ts
│ │ │ │ └── v2/
│ │ │ │ ├── container.test.ts
│ │ │ │ ├── file.test.ts
│ │ │ │ ├── mediaGallery.test.ts
│ │ │ │ ├── mediaGalleryItem.test.ts
│ │ │ │ ├── section.test.ts
│ │ │ │ ├── separator.test.ts
│ │ │ │ ├── textDisplay.test.ts
│ │ │ │ └── thumbnail.test.ts
│ │ │ ├── interactions/
│ │ │ │ ├── ChatInputCommands/
│ │ │ │ │ ├── ChatInputCommands.test.ts
│ │ │ │ │ └── Options.test.ts
│ │ │ │ ├── ContextMenuCommands.test.ts
│ │ │ │ └── modal.test.ts
│ │ │ ├── messages/
│ │ │ │ ├── embed.test.ts
│ │ │ │ ├── fileBody.test.ts
│ │ │ │ ├── message.test.ts
│ │ │ │ └── poll.test.ts
│ │ │ ├── types.test-d.ts
│ │ │ └── util.test.ts
│ │ ├── api-extractor.json
│ │ ├── cliff.toml
│ │ ├── docs/
│ │ │ ├── README.md
│ │ │ └── examples/
│ │ │ └── Slash Command Builders.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── Assertions.ts
│ │ │ ├── components/
│ │ │ │ ├── ActionRow.ts
│ │ │ │ ├── Assertions.ts
│ │ │ │ ├── Component.ts
│ │ │ │ ├── Components.ts
│ │ │ │ ├── button/
│ │ │ │ │ ├── Button.ts
│ │ │ │ │ ├── CustomIdButton.ts
│ │ │ │ │ ├── LinkButton.ts
│ │ │ │ │ ├── PremiumButton.ts
│ │ │ │ │ └── mixins/
│ │ │ │ │ └── EmojiOrLabelButtonMixin.ts
│ │ │ │ ├── fileUpload/
│ │ │ │ │ ├── Assertions.ts
│ │ │ │ │ └── FileUpload.ts
│ │ │ │ ├── label/
│ │ │ │ │ ├── Assertions.ts
│ │ │ │ │ └── Label.ts
│ │ │ │ ├── selectMenu/
│ │ │ │ │ ├── BaseSelectMenu.ts
│ │ │ │ │ ├── ChannelSelectMenu.ts
│ │ │ │ │ ├── MentionableSelectMenu.ts
│ │ │ │ │ ├── RoleSelectMenu.ts
│ │ │ │ │ ├── StringSelectMenu.ts
│ │ │ │ │ ├── StringSelectMenuOption.ts
│ │ │ │ │ └── UserSelectMenu.ts
│ │ │ │ ├── textInput/
│ │ │ │ │ ├── Assertions.ts
│ │ │ │ │ └── TextInput.ts
│ │ │ │ └── v2/
│ │ │ │ ├── Assertions.ts
│ │ │ │ ├── Container.ts
│ │ │ │ ├── File.ts
│ │ │ │ ├── MediaGallery.ts
│ │ │ │ ├── MediaGalleryItem.ts
│ │ │ │ ├── Section.ts
│ │ │ │ ├── Separator.ts
│ │ │ │ ├── TextDisplay.ts
│ │ │ │ └── Thumbnail.ts
│ │ │ ├── index.ts
│ │ │ ├── interactions/
│ │ │ │ ├── commands/
│ │ │ │ │ ├── Command.ts
│ │ │ │ │ ├── SharedName.ts
│ │ │ │ │ ├── SharedNameAndDescription.ts
│ │ │ │ │ ├── chatInput/
│ │ │ │ │ │ ├── Assertions.ts
│ │ │ │ │ │ ├── ChatInputCommand.ts
│ │ │ │ │ │ ├── ChatInputCommandSubcommands.ts
│ │ │ │ │ │ ├── mixins/
│ │ │ │ │ │ │ ├── ApplicationCommandNumericOptionMinMaxValueMixin.ts
│ │ │ │ │ │ │ ├── ApplicationCommandOptionChannelTypesMixin.ts
│ │ │ │ │ │ │ ├── ApplicationCommandOptionWithAutocompleteMixin.ts
│ │ │ │ │ │ │ ├── ApplicationCommandOptionWithChoicesMixin.ts
│ │ │ │ │ │ │ ├── SharedChatInputCommandOptions.ts
│ │ │ │ │ │ │ └── SharedSubcommands.ts
│ │ │ │ │ │ └── options/
│ │ │ │ │ │ ├── ApplicationCommandOptionBase.ts
│ │ │ │ │ │ ├── attachment.ts
│ │ │ │ │ │ ├── boolean.ts
│ │ │ │ │ │ ├── channel.ts
│ │ │ │ │ │ ├── integer.ts
│ │ │ │ │ │ ├── mentionable.ts
│ │ │ │ │ │ ├── number.ts
│ │ │ │ │ │ ├── role.ts
│ │ │ │ │ │ ├── string.ts
│ │ │ │ │ │ └── user.ts
│ │ │ │ │ └── contextMenu/
│ │ │ │ │ ├── Assertions.ts
│ │ │ │ │ ├── ContextMenuCommand.ts
│ │ │ │ │ ├── MessageCommand.ts
│ │ │ │ │ └── UserCommand.ts
│ │ │ │ └── modals/
│ │ │ │ ├── Assertions.ts
│ │ │ │ └── Modal.ts
│ │ │ ├── messages/
│ │ │ │ ├── AllowedMentions.ts
│ │ │ │ ├── Assertions.ts
│ │ │ │ ├── Attachment.ts
│ │ │ │ ├── Message.ts
│ │ │ │ ├── MessageReference.ts
│ │ │ │ ├── embed/
│ │ │ │ │ ├── Assertions.ts
│ │ │ │ │ ├── Embed.ts
│ │ │ │ │ ├── EmbedAuthor.ts
│ │ │ │ │ ├── EmbedField.ts
│ │ │ │ │ └── EmbedFooter.ts
│ │ │ │ └── poll/
│ │ │ │ ├── Assertions.ts
│ │ │ │ ├── Poll.ts
│ │ │ │ ├── PollAnswer.ts
│ │ │ │ ├── PollAnswerMedia.ts
│ │ │ │ ├── PollMedia.ts
│ │ │ │ └── PollQuestion.ts
│ │ │ └── util/
│ │ │ ├── ValidationError.ts
│ │ │ ├── normalizeArray.ts
│ │ │ ├── resolveBuilder.ts
│ │ │ └── validation.ts
│ │ ├── tsconfig.docs.json
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.test.json
│ │ ├── tsdoc.json
│ │ └── tsup.config.ts
│ ├── collection/
│ │ ├── .cliff-jumperrc.json
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.js
│ │ ├── .prettierignore
│ │ ├── .prettierrc.js
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── __tests__/
│ │ │ └── collection.test.ts
│ │ ├── api-extractor.json
│ │ ├── cliff.toml
│ │ ├── docs/
│ │ │ └── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── collection.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.docs.json
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.test.json
│ │ └── tsup.config.ts
│ ├── core/
│ │ ├── .cliff-jumperrc.json
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.js
│ │ ├── .prettierignore
│ │ ├── .prettierrc.js
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── __tests__/
│ │ │ └── types.test-d.ts
│ │ ├── api-extractor.json
│ │ ├── cliff.toml
│ │ ├── docs/
│ │ │ └── README.md
│ │ ├── package.json
│ │ ├── scripts/
│ │ │ ├── check-routes.mts
│ │ │ └── find-returns-not-return-type.mts
│ │ ├── src/
│ │ │ ├── Gateway.ts
│ │ │ ├── api/
│ │ │ │ ├── applicationCommands.ts
│ │ │ │ ├── applications.ts
│ │ │ │ ├── channel.ts
│ │ │ │ ├── gateway.ts
│ │ │ │ ├── guild.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── interactions.ts
│ │ │ │ ├── invite.ts
│ │ │ │ ├── monetization.ts
│ │ │ │ ├── oauth2.ts
│ │ │ │ ├── poll.ts
│ │ │ │ ├── roleConnections.ts
│ │ │ │ ├── soundboardSounds.ts
│ │ │ │ ├── stageInstances.ts
│ │ │ │ ├── sticker.ts
│ │ │ │ ├── thread.ts
│ │ │ │ ├── user.ts
│ │ │ │ ├── voice.ts
│ │ │ │ └── webhook.ts
│ │ │ ├── client.ts
│ │ │ ├── http-only/
│ │ │ │ └── index.ts
│ │ │ ├── index.ts
│ │ │ └── util/
│ │ │ ├── files.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.docs.json
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.test.json
│ │ └── tsup.config.ts
│ ├── create-discord-bot/
│ │ ├── .cliff-jumperrc.json
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.cjs
│ │ ├── .prettierignore
│ │ ├── .prettierrc.cjs
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── api-extractor.json
│ │ ├── bin/
│ │ │ └── index.ts
│ │ ├── cliff.toml
│ │ ├── package.json
│ │ ├── scripts/
│ │ │ └── rename-to-app.mjs
│ │ ├── src/
│ │ │ ├── create-discord-bot.ts
│ │ │ ├── helpers/
│ │ │ │ └── packageManager.ts
│ │ │ └── util/
│ │ │ ├── constants.ts
│ │ │ └── isFolderEmpty.ts
│ │ ├── template/
│ │ │ ├── Bun/
│ │ │ │ ├── JavaScript/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── .prettierrc.json
│ │ │ │ │ ├── .vscode/
│ │ │ │ │ │ ├── extensions.json
│ │ │ │ │ │ └── settings.json
│ │ │ │ │ ├── eslint.config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── commands/
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ ├── ping.js
│ │ │ │ │ │ └── utility/
│ │ │ │ │ │ └── user.js
│ │ │ │ │ ├── events/
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ ├── interactionCreate.js
│ │ │ │ │ │ └── ready.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── util/
│ │ │ │ │ ├── deploy.js
│ │ │ │ │ └── loaders.js
│ │ │ │ └── TypeScript/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── .prettierrc.json
│ │ │ │ ├── .vscode/
│ │ │ │ │ ├── extensions.json
│ │ │ │ │ └── settings.json
│ │ │ │ ├── eslint.config.js
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── commands/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── ping.ts
│ │ │ │ │ │ └── utility/
│ │ │ │ │ │ └── user.ts
│ │ │ │ │ ├── events/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── interactionCreate.ts
│ │ │ │ │ │ └── ready.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── util/
│ │ │ │ │ ├── deploy.ts
│ │ │ │ │ └── loaders.ts
│ │ │ │ ├── tsconfig.eslint.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── Deno/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── .vscode/
│ │ │ │ │ ├── extensions.json
│ │ │ │ │ └── settings.json
│ │ │ │ ├── deno.jsonc
│ │ │ │ └── src/
│ │ │ │ ├── commands/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── ping.ts
│ │ │ │ │ └── utility/
│ │ │ │ │ └── user.ts
│ │ │ │ ├── events/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── interactionCreate.ts
│ │ │ │ │ └── ready.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── util/
│ │ │ │ ├── deploy.ts
│ │ │ │ └── loaders.ts
│ │ │ ├── JavaScript/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── .prettierignore
│ │ │ │ ├── .prettierrc.json
│ │ │ │ ├── .vscode/
│ │ │ │ │ ├── extensions.json
│ │ │ │ │ └── settings.json
│ │ │ │ ├── eslint.config.js
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ ├── commands/
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── ping.js
│ │ │ │ │ └── utility/
│ │ │ │ │ └── user.js
│ │ │ │ ├── events/
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── interactionCreate.js
│ │ │ │ │ └── ready.js
│ │ │ │ ├── index.js
│ │ │ │ └── util/
│ │ │ │ ├── deploy.js
│ │ │ │ └── loaders.js
│ │ │ └── TypeScript/
│ │ │ ├── .gitignore
│ │ │ ├── .prettierignore
│ │ │ ├── .prettierrc.json
│ │ │ ├── .vscode/
│ │ │ │ ├── extensions.json
│ │ │ │ └── settings.json
│ │ │ ├── eslint.config.js
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── commands/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── ping.ts
│ │ │ │ │ └── utility/
│ │ │ │ │ └── user.ts
│ │ │ │ ├── events/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── interactionCreate.ts
│ │ │ │ │ └── ready.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── util/
│ │ │ │ ├── deploy.ts
│ │ │ │ └── loaders.ts
│ │ │ ├── tsconfig.eslint.json
│ │ │ └── tsconfig.json
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── discord.js/
│ │ ├── .cliff-jumperrc.json
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.json
│ │ ├── .prettierignore
│ │ ├── .prettierrc.json
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── api-extractor.json
│ │ ├── cliff.toml
│ │ ├── docs/
│ │ │ ├── README.md
│ │ │ └── index.json
│ │ ├── package.json
│ │ ├── scripts/
│ │ │ ├── esmDts.mjs
│ │ │ └── generateRequires.mjs
│ │ ├── src/
│ │ │ ├── client/
│ │ │ │ ├── Client.js
│ │ │ │ ├── actions/
│ │ │ │ │ ├── Action.js
│ │ │ │ │ ├── ActionsManager.js
│ │ │ │ │ ├── ChannelCreate.js
│ │ │ │ │ ├── ChannelDelete.js
│ │ │ │ │ ├── ChannelUpdate.js
│ │ │ │ │ ├── GuildChannelsPositionUpdate.js
│ │ │ │ │ ├── GuildEmojiCreate.js
│ │ │ │ │ ├── GuildEmojiDelete.js
│ │ │ │ │ ├── GuildEmojiUpdate.js
│ │ │ │ │ ├── GuildEmojisUpdate.js
│ │ │ │ │ ├── GuildMemberRemove.js
│ │ │ │ │ ├── GuildMemberUpdate.js
│ │ │ │ │ ├── GuildRoleCreate.js
│ │ │ │ │ ├── GuildRoleDelete.js
│ │ │ │ │ ├── GuildRolesPositionUpdate.js
│ │ │ │ │ ├── GuildScheduledEventDelete.js
│ │ │ │ │ ├── GuildScheduledEventUserAdd.js
│ │ │ │ │ ├── GuildScheduledEventUserRemove.js
│ │ │ │ │ ├── GuildSoundboardSoundDelete.js
│ │ │ │ │ ├── GuildStickerCreate.js
│ │ │ │ │ ├── GuildStickerDelete.js
│ │ │ │ │ ├── GuildStickerUpdate.js
│ │ │ │ │ ├── GuildStickersUpdate.js
│ │ │ │ │ ├── GuildUpdate.js
│ │ │ │ │ ├── InteractionCreate.js
│ │ │ │ │ ├── MessageCreate.js
│ │ │ │ │ ├── MessageDelete.js
│ │ │ │ │ ├── MessageDeleteBulk.js
│ │ │ │ │ ├── MessagePollVoteAdd.js
│ │ │ │ │ ├── MessagePollVoteRemove.js
│ │ │ │ │ ├── MessageReactionAdd.js
│ │ │ │ │ ├── MessageReactionRemove.js
│ │ │ │ │ ├── MessageReactionRemoveAll.js
│ │ │ │ │ ├── MessageReactionRemoveEmoji.js
│ │ │ │ │ ├── MessageUpdate.js
│ │ │ │ │ ├── StageInstanceCreate.js
│ │ │ │ │ ├── StageInstanceDelete.js
│ │ │ │ │ ├── StageInstanceUpdate.js
│ │ │ │ │ ├── ThreadCreate.js
│ │ │ │ │ ├── ThreadMembersUpdate.js
│ │ │ │ │ ├── TypingStart.js
│ │ │ │ │ └── UserUpdate.js
│ │ │ │ ├── voice/
│ │ │ │ │ └── ClientVoiceManager.js
│ │ │ │ └── websocket/
│ │ │ │ └── handlers/
│ │ │ │ ├── APPLICATION_COMMAND_PERMISSIONS_UPDATE.js
│ │ │ │ ├── AUTO_MODERATION_ACTION_EXECUTION.js
│ │ │ │ ├── AUTO_MODERATION_RULE_CREATE.js
│ │ │ │ ├── AUTO_MODERATION_RULE_DELETE.js
│ │ │ │ ├── AUTO_MODERATION_RULE_UPDATE.js
│ │ │ │ ├── CHANNEL_CREATE.js
│ │ │ │ ├── CHANNEL_DELETE.js
│ │ │ │ ├── CHANNEL_PINS_UPDATE.js
│ │ │ │ ├── CHANNEL_UPDATE.js
│ │ │ │ ├── ENTITLEMENT_CREATE.js
│ │ │ │ ├── ENTITLEMENT_DELETE.js
│ │ │ │ ├── ENTITLEMENT_UPDATE.js
│ │ │ │ ├── GUILD_AUDIT_LOG_ENTRY_CREATE.js
│ │ │ │ ├── GUILD_BAN_ADD.js
│ │ │ │ ├── GUILD_BAN_REMOVE.js
│ │ │ │ ├── GUILD_CREATE.js
│ │ │ │ ├── GUILD_DELETE.js
│ │ │ │ ├── GUILD_EMOJIS_UPDATE.js
│ │ │ │ ├── GUILD_INTEGRATIONS_UPDATE.js
│ │ │ │ ├── GUILD_MEMBERS_CHUNK.js
│ │ │ │ ├── GUILD_MEMBER_ADD.js
│ │ │ │ ├── GUILD_MEMBER_REMOVE.js
│ │ │ │ ├── GUILD_MEMBER_UPDATE.js
│ │ │ │ ├── GUILD_ROLE_CREATE.js
│ │ │ │ ├── GUILD_ROLE_DELETE.js
│ │ │ │ ├── GUILD_ROLE_UPDATE.js
│ │ │ │ ├── GUILD_SCHEDULED_EVENT_CREATE.js
│ │ │ │ ├── GUILD_SCHEDULED_EVENT_DELETE.js
│ │ │ │ ├── GUILD_SCHEDULED_EVENT_UPDATE.js
│ │ │ │ ├── GUILD_SCHEDULED_EVENT_USER_ADD.js
│ │ │ │ ├── GUILD_SCHEDULED_EVENT_USER_REMOVE.js
│ │ │ │ ├── GUILD_SOUNDBOARD_SOUNDS_UPDATE.js
│ │ │ │ ├── GUILD_SOUNDBOARD_SOUND_CREATE.js
│ │ │ │ ├── GUILD_SOUNDBOARD_SOUND_DELETE.js
│ │ │ │ ├── GUILD_SOUNDBOARD_SOUND_UPDATE.js
│ │ │ │ ├── GUILD_STICKERS_UPDATE.js
│ │ │ │ ├── GUILD_UPDATE.js
│ │ │ │ ├── INTERACTION_CREATE.js
│ │ │ │ ├── INVITE_CREATE.js
│ │ │ │ ├── INVITE_DELETE.js
│ │ │ │ ├── MESSAGE_CREATE.js
│ │ │ │ ├── MESSAGE_DELETE.js
│ │ │ │ ├── MESSAGE_DELETE_BULK.js
│ │ │ │ ├── MESSAGE_POLL_VOTE_ADD.js
│ │ │ │ ├── MESSAGE_POLL_VOTE_REMOVE.js
│ │ │ │ ├── MESSAGE_REACTION_ADD.js
│ │ │ │ ├── MESSAGE_REACTION_REMOVE.js
│ │ │ │ ├── MESSAGE_REACTION_REMOVE_ALL.js
│ │ │ │ ├── MESSAGE_REACTION_REMOVE_EMOJI.js
│ │ │ │ ├── MESSAGE_UPDATE.js
│ │ │ │ ├── PRESENCE_UPDATE.js
│ │ │ │ ├── RATE_LIMITED.js
│ │ │ │ ├── READY.js
│ │ │ │ ├── SOUNDBOARD_SOUNDS.js
│ │ │ │ ├── STAGE_INSTANCE_CREATE.js
│ │ │ │ ├── STAGE_INSTANCE_DELETE.js
│ │ │ │ ├── STAGE_INSTANCE_UPDATE.js
│ │ │ │ ├── SUBSCRIPTION_CREATE.js
│ │ │ │ ├── SUBSCRIPTION_DELETE.js
│ │ │ │ ├── SUBSCRIPTION_UPDATE.js
│ │ │ │ ├── THREAD_CREATE.js
│ │ │ │ ├── THREAD_DELETE.js
│ │ │ │ ├── THREAD_LIST_SYNC.js
│ │ │ │ ├── THREAD_MEMBERS_UPDATE.js
│ │ │ │ ├── THREAD_MEMBER_UPDATE.js
│ │ │ │ ├── THREAD_UPDATE.js
│ │ │ │ ├── TYPING_START.js
│ │ │ │ ├── USER_UPDATE.js
│ │ │ │ ├── VOICE_CHANNEL_EFFECT_SEND.js
│ │ │ │ ├── VOICE_SERVER_UPDATE.js
│ │ │ │ ├── VOICE_STATE_UPDATE.js
│ │ │ │ ├── WEBHOOKS_UPDATE.js
│ │ │ │ └── index.js
│ │ │ ├── errors/
│ │ │ │ ├── DJSError.js
│ │ │ │ ├── ErrorCodes.js
│ │ │ │ ├── Messages.js
│ │ │ │ └── index.js
│ │ │ ├── index.js
│ │ │ ├── managers/
│ │ │ │ ├── ApplicationCommandManager.js
│ │ │ │ ├── ApplicationCommandPermissionsManager.js
│ │ │ │ ├── ApplicationEmojiManager.js
│ │ │ │ ├── AutoModerationRuleManager.js
│ │ │ │ ├── BaseManager.js
│ │ │ │ ├── CachedManager.js
│ │ │ │ ├── CategoryChannelChildManager.js
│ │ │ │ ├── ChannelManager.js
│ │ │ │ ├── DMMessageManager.js
│ │ │ │ ├── DataManager.js
│ │ │ │ ├── EntitlementManager.js
│ │ │ │ ├── GuildApplicationCommandManager.js
│ │ │ │ ├── GuildBanManager.js
│ │ │ │ ├── GuildChannelManager.js
│ │ │ │ ├── GuildEmojiManager.js
│ │ │ │ ├── GuildEmojiRoleManager.js
│ │ │ │ ├── GuildForumThreadManager.js
│ │ │ │ ├── GuildInviteManager.js
│ │ │ │ ├── GuildManager.js
│ │ │ │ ├── GuildMemberManager.js
│ │ │ │ ├── GuildMemberRoleManager.js
│ │ │ │ ├── GuildMessageManager.js
│ │ │ │ ├── GuildScheduledEventManager.js
│ │ │ │ ├── GuildSoundboardSoundManager.js
│ │ │ │ ├── GuildStickerManager.js
│ │ │ │ ├── GuildTextThreadManager.js
│ │ │ │ ├── MessageManager.js
│ │ │ │ ├── PartialGroupDMMessageManager.js
│ │ │ │ ├── PermissionOverwriteManager.js
│ │ │ │ ├── PollAnswerVoterManager.js
│ │ │ │ ├── PresenceManager.js
│ │ │ │ ├── ReactionManager.js
│ │ │ │ ├── ReactionUserManager.js
│ │ │ │ ├── RoleManager.js
│ │ │ │ ├── StageInstanceManager.js
│ │ │ │ ├── SubscriptionManager.js
│ │ │ │ ├── ThreadManager.js
│ │ │ │ ├── ThreadMemberManager.js
│ │ │ │ ├── UserManager.js
│ │ │ │ └── VoiceStateManager.js
│ │ │ ├── sharding/
│ │ │ │ ├── Shard.js
│ │ │ │ ├── ShardClientUtil.js
│ │ │ │ └── ShardingManager.js
│ │ │ ├── structures/
│ │ │ │ ├── ActionRow.js
│ │ │ │ ├── AnnouncementChannel.js
│ │ │ │ ├── AnonymousGuild.js
│ │ │ │ ├── ApplicationCommand.js
│ │ │ │ ├── ApplicationEmoji.js
│ │ │ │ ├── ApplicationRoleConnectionMetadata.js
│ │ │ │ ├── Attachment.js
│ │ │ │ ├── AuthorizingIntegrationOwners.js
│ │ │ │ ├── AutoModerationActionExecution.js
│ │ │ │ ├── AutoModerationRule.js
│ │ │ │ ├── AutocompleteInteraction.js
│ │ │ │ ├── Base.js
│ │ │ │ ├── BaseChannel.js
│ │ │ │ ├── BaseGuild.js
│ │ │ │ ├── BaseGuildEmoji.js
│ │ │ │ ├── BaseGuildTextChannel.js
│ │ │ │ ├── BaseGuildVoiceChannel.js
│ │ │ │ ├── BaseInteraction.js
│ │ │ │ ├── BaseInvite.js
│ │ │ │ ├── BaseSelectMenuComponent.js
│ │ │ │ ├── ButtonComponent.js
│ │ │ │ ├── ButtonInteraction.js
│ │ │ │ ├── CategoryChannel.js
│ │ │ │ ├── ChannelSelectMenuComponent.js
│ │ │ │ ├── ChannelSelectMenuInteraction.js
│ │ │ │ ├── ChatInputCommandInteraction.js
│ │ │ │ ├── ClientApplication.js
│ │ │ │ ├── ClientPresence.js
│ │ │ │ ├── ClientUser.js
│ │ │ │ ├── CommandInteraction.js
│ │ │ │ ├── CommandInteractionOptionResolver.js
│ │ │ │ ├── Component.js
│ │ │ │ ├── ContainerComponent.js
│ │ │ │ ├── ContextMenuCommandInteraction.js
│ │ │ │ ├── DMChannel.js
│ │ │ │ ├── DirectoryChannel.js
│ │ │ │ ├── Embed.js
│ │ │ │ ├── Emoji.js
│ │ │ │ ├── Entitlement.js
│ │ │ │ ├── FileComponent.js
│ │ │ │ ├── ForumChannel.js
│ │ │ │ ├── GroupDMInvite.js
│ │ │ │ ├── Guild.js
│ │ │ │ ├── GuildAuditLogs.js
│ │ │ │ ├── GuildAuditLogsEntry.js
│ │ │ │ ├── GuildBan.js
│ │ │ │ ├── GuildChannel.js
│ │ │ │ ├── GuildEmoji.js
│ │ │ │ ├── GuildInvite.js
│ │ │ │ ├── GuildMember.js
│ │ │ │ ├── GuildOnboarding.js
│ │ │ │ ├── GuildOnboardingPrompt.js
│ │ │ │ ├── GuildOnboardingPromptOption.js
│ │ │ │ ├── GuildPreview.js
│ │ │ │ ├── GuildPreviewEmoji.js
│ │ │ │ ├── GuildScheduledEvent.js
│ │ │ │ ├── GuildTemplate.js
│ │ │ │ ├── Integration.js
│ │ │ │ ├── IntegrationApplication.js
│ │ │ │ ├── InteractionCallback.js
│ │ │ │ ├── InteractionCallbackResource.js
│ │ │ │ ├── InteractionCallbackResponse.js
│ │ │ │ ├── InteractionCollector.js
│ │ │ │ ├── InteractionWebhook.js
│ │ │ │ ├── InviteGuild.js
│ │ │ │ ├── LabelComponent.js
│ │ │ │ ├── MediaChannel.js
│ │ │ │ ├── MediaGalleryComponent.js
│ │ │ │ ├── MediaGalleryItem.js
│ │ │ │ ├── MentionableSelectMenuComponent.js
│ │ │ │ ├── MentionableSelectMenuInteraction.js
│ │ │ │ ├── Message.js
│ │ │ │ ├── MessageCollector.js
│ │ │ │ ├── MessageComponentInteraction.js
│ │ │ │ ├── MessageContextMenuCommandInteraction.js
│ │ │ │ ├── MessageMentions.js
│ │ │ │ ├── MessagePayload.js
│ │ │ │ ├── MessageReaction.js
│ │ │ │ ├── ModalComponentResolver.js
│ │ │ │ ├── ModalSubmitInteraction.js
│ │ │ │ ├── OAuth2Guild.js
│ │ │ │ ├── PartialGroupDMChannel.js
│ │ │ │ ├── PermissionOverwrites.js
│ │ │ │ ├── Poll.js
│ │ │ │ ├── PollAnswer.js
│ │ │ │ ├── Presence.js
│ │ │ │ ├── PrimaryEntryPointCommandInteraction.js
│ │ │ │ ├── ReactionCollector.js
│ │ │ │ ├── ReactionEmoji.js
│ │ │ │ ├── Role.js
│ │ │ │ ├── RoleSelectMenuComponent.js
│ │ │ │ ├── RoleSelectMenuInteraction.js
│ │ │ │ ├── SKU.js
│ │ │ │ ├── SectionComponent.js
│ │ │ │ ├── SeparatorComponent.js
│ │ │ │ ├── SoundboardSound.js
│ │ │ │ ├── StageChannel.js
│ │ │ │ ├── StageInstance.js
│ │ │ │ ├── Sticker.js
│ │ │ │ ├── StickerPack.js
│ │ │ │ ├── StringSelectMenuComponent.js
│ │ │ │ ├── StringSelectMenuInteraction.js
│ │ │ │ ├── Subscription.js
│ │ │ │ ├── Team.js
│ │ │ │ ├── TeamMember.js
│ │ │ │ ├── TextChannel.js
│ │ │ │ ├── TextDisplayComponent.js
│ │ │ │ ├── TextInputComponent.js
│ │ │ │ ├── ThreadChannel.js
│ │ │ │ ├── ThreadMember.js
│ │ │ │ ├── ThreadOnlyChannel.js
│ │ │ │ ├── ThumbnailComponent.js
│ │ │ │ ├── Typing.js
│ │ │ │ ├── UnfurledMediaItem.js
│ │ │ │ ├── User.js
│ │ │ │ ├── UserContextMenuCommandInteraction.js
│ │ │ │ ├── UserSelectMenuComponent.js
│ │ │ │ ├── UserSelectMenuInteraction.js
│ │ │ │ ├── VoiceChannel.js
│ │ │ │ ├── VoiceChannelEffect.js
│ │ │ │ ├── VoiceRegion.js
│ │ │ │ ├── VoiceState.js
│ │ │ │ ├── Webhook.js
│ │ │ │ ├── WelcomeChannel.js
│ │ │ │ ├── WelcomeScreen.js
│ │ │ │ ├── Widget.js
│ │ │ │ ├── WidgetMember.js
│ │ │ │ └── interfaces/
│ │ │ │ ├── Application.js
│ │ │ │ ├── Collector.js
│ │ │ │ ├── InteractionResponses.js
│ │ │ │ └── TextBasedChannel.js
│ │ │ └── util/
│ │ │ ├── APITypes.js
│ │ │ ├── ActivityFlagsBitField.js
│ │ │ ├── ApplicationFlagsBitField.js
│ │ │ ├── AttachmentFlagsBitField.js
│ │ │ ├── BitField.js
│ │ │ ├── ChannelFlagsBitField.js
│ │ │ ├── Channels.js
│ │ │ ├── Colors.js
│ │ │ ├── Components.js
│ │ │ ├── Constants.js
│ │ │ ├── DataResolver.js
│ │ │ ├── Enums.js
│ │ │ ├── Events.js
│ │ │ ├── GuildMemberFlagsBitField.js
│ │ │ ├── IntentsBitField.js
│ │ │ ├── InviteFlagsBitField.js
│ │ │ ├── Invites.js
│ │ │ ├── LimitedCollection.js
│ │ │ ├── MessageFlagsBitField.js
│ │ │ ├── Options.js
│ │ │ ├── Partials.js
│ │ │ ├── PermissionsBitField.js
│ │ │ ├── RoleFlagsBitField.js
│ │ │ ├── SKUFlagsBitField.js
│ │ │ ├── ShardEvents.js
│ │ │ ├── Status.js
│ │ │ ├── Sweepers.js
│ │ │ ├── Symbols.js
│ │ │ ├── SystemChannelFlagsBitField.js
│ │ │ ├── ThreadMemberFlagsBitField.js
│ │ │ ├── Transformers.js
│ │ │ ├── UserFlagsBitField.js
│ │ │ └── Util.js
│ │ ├── test/
│ │ │ ├── createGuild.js
│ │ │ ├── messages.js
│ │ │ ├── monetization.js
│ │ │ ├── polls.js
│ │ │ ├── random.js
│ │ │ ├── reactionCollectorCreated.test.js
│ │ │ ├── resolveGuildTemplateCode.test.js
│ │ │ ├── sendtest.js
│ │ │ ├── shard.js
│ │ │ ├── sharder.js
│ │ │ ├── templateCreateGuild.js
│ │ │ ├── tester1000.js
│ │ │ ├── tester2000.js
│ │ │ └── webhooktest.js
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ ├── tsdoc.json
│ │ └── typings/
│ │ ├── index.d.ts
│ │ ├── index.test-d.ts
│ │ └── tsdoc-metadata.json
│ ├── docgen/
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.js
│ │ ├── .prettierignore
│ │ ├── .prettierrc.js
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bin/
│ │ │ ├── index.js
│ │ │ └── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── documentation.ts
│ │ │ ├── index.ts
│ │ │ ├── interfaces/
│ │ │ │ ├── access.type.ts
│ │ │ │ ├── childTypes.type.ts
│ │ │ │ ├── class.interface.ts
│ │ │ │ ├── config.interface.ts
│ │ │ │ ├── constructor.interface.ts
│ │ │ │ ├── customDocs.interface.ts
│ │ │ │ ├── event.interface.ts
│ │ │ │ ├── exception.interface.ts
│ │ │ │ ├── external.interface.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── interface.interface.ts
│ │ │ │ ├── item.interface.ts
│ │ │ │ ├── member.interface.ts
│ │ │ │ ├── meta.interface.ts
│ │ │ │ ├── method.interface.ts
│ │ │ │ ├── param.interface.ts
│ │ │ │ ├── return.interface.ts
│ │ │ │ ├── rootTypes.type.ts
│ │ │ │ ├── scope.type.ts
│ │ │ │ ├── type.interface.ts
│ │ │ │ ├── typedef.interface.ts
│ │ │ │ └── var-type.interface.ts
│ │ │ ├── types/
│ │ │ │ ├── class.ts
│ │ │ │ ├── constructor.ts
│ │ │ │ ├── event.ts
│ │ │ │ ├── external.ts
│ │ │ │ ├── interface.ts
│ │ │ │ ├── item-meta.ts
│ │ │ │ ├── item.ts
│ │ │ │ ├── member.ts
│ │ │ │ ├── method.ts
│ │ │ │ ├── param.ts
│ │ │ │ ├── typedef.ts
│ │ │ │ └── var-type.ts
│ │ │ └── util/
│ │ │ ├── parseType.ts
│ │ │ ├── splitVarName.ts
│ │ │ └── types.ts
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── formatters/
│ │ ├── .cliff-jumperrc.json
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.js
│ │ ├── .prettierignore
│ │ ├── .prettierrc.js
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── __tests__/
│ │ │ ├── escapers.test.ts
│ │ │ └── formatters.test.ts
│ │ ├── api-extractor.json
│ │ ├── cliff.toml
│ │ ├── docs/
│ │ │ └── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── escapers.ts
│ │ │ ├── formatters.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.docs.json
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.test.json
│ │ └── tsup.config.ts
│ ├── next/
│ │ ├── .cliff-jumperrc.json
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.js
│ │ ├── .prettierignore
│ │ ├── .prettierrc.js
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── __tests__/
│ │ │ └── fake.test.ts
│ │ ├── api-extractor.json
│ │ ├── cliff.toml
│ │ ├── docs/
│ │ │ └── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── exports/
│ │ │ │ ├── builders.ts
│ │ │ │ ├── collection.ts
│ │ │ │ ├── core.ts
│ │ │ │ ├── discord-api-types.ts
│ │ │ │ ├── formatters.ts
│ │ │ │ ├── rest.ts
│ │ │ │ ├── util.ts
│ │ │ │ └── ws.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.docs.json
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.test.json
│ │ └── tsup.config.ts
│ ├── proxy/
│ │ ├── .cliff-jumperrc.json
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.js
│ │ ├── .prettierignore
│ │ ├── .prettierrc.js
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── __tests__/
│ │ │ └── proxyRequests.test.ts
│ │ ├── api-extractor.json
│ │ ├── cliff.toml
│ │ ├── docs/
│ │ │ └── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── handlers/
│ │ │ │ └── proxyRequests.ts
│ │ │ ├── index.ts
│ │ │ └── util/
│ │ │ ├── responseHelpers.ts
│ │ │ └── util.ts
│ │ ├── tsconfig.docs.json
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.test.json
│ │ └── tsup.config.ts
│ ├── rest/
│ │ ├── .cliff-jumperrc.json
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.js
│ │ ├── .prettierignore
│ │ ├── .prettierrc.js
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── __tests__/
│ │ │ ├── BurstHandler.test.ts
│ │ │ ├── CDN.test.ts
│ │ │ ├── DiscordAPIError.test.ts
│ │ │ ├── REST.test.ts
│ │ │ ├── RequestHandler.test.ts
│ │ │ ├── RequestManager.test.ts
│ │ │ ├── UndiciRequest.test.ts
│ │ │ ├── setup.ts
│ │ │ ├── util.ts
│ │ │ └── utils.test.ts
│ │ ├── api-extractor.json
│ │ ├── cliff.toml
│ │ ├── docs/
│ │ │ └── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── environment.ts
│ │ │ ├── index.ts
│ │ │ ├── lib/
│ │ │ │ ├── CDN.ts
│ │ │ │ ├── REST.ts
│ │ │ │ ├── errors/
│ │ │ │ │ ├── DiscordAPIError.ts
│ │ │ │ │ ├── HTTPError.ts
│ │ │ │ │ └── RateLimitError.ts
│ │ │ │ ├── handlers/
│ │ │ │ │ ├── BurstHandler.ts
│ │ │ │ │ ├── SequentialHandler.ts
│ │ │ │ │ └── Shared.ts
│ │ │ │ ├── interfaces/
│ │ │ │ │ └── Handler.ts
│ │ │ │ └── utils/
│ │ │ │ ├── constants.ts
│ │ │ │ ├── types.ts
│ │ │ │ └── utils.ts
│ │ │ ├── shared.ts
│ │ │ ├── strategies/
│ │ │ │ └── undiciRequest.ts
│ │ │ └── web.ts
│ │ ├── tsconfig.docs.json
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.test.json
│ │ ├── tsup.config.ts
│ │ └── vitest.config.ts
│ ├── scripts/
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.js
│ │ ├── .prettierignore
│ │ ├── .prettierrc.js
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bin/
│ │ │ ├── generateSplitDocumentation.js
│ │ │ ├── generateSplitDocumentation.ts
│ │ │ ├── sortLabels.js
│ │ │ └── sortLabels.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── builtinDocumentationLinks.ts
│ │ │ ├── generateIndex.ts
│ │ │ ├── generateSplitDocumentation.ts
│ │ │ ├── index.ts
│ │ │ ├── populateDevDatabaseBranch.ts
│ │ │ └── shared.ts
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ ├── tsup.config.ts
│ │ └── turbo/
│ │ └── generators/
│ │ ├── config.ts
│ │ └── templates/
│ │ └── default/
│ │ ├── .cliff-jumperrc.json.hbs
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.js.hbs
│ │ ├── .prettierignore
│ │ ├── .prettierrc.js.hbs
│ │ ├── LICENSE
│ │ ├── api-extractor.json.hbs
│ │ ├── cliff.toml
│ │ ├── package.json.hbs
│ │ ├── tsconfig.docs.json
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.test.json
│ │ └── tsup.config.ts
│ ├── structures/
│ │ ├── .cliff-jumperrc.json
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.js
│ │ ├── .prettierignore
│ │ ├── .prettierrc.js
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── __tests__/
│ │ │ ├── Mixin.test.ts
│ │ │ ├── Structure.test.ts
│ │ │ ├── channels.test.ts
│ │ │ ├── invite.test.ts
│ │ │ ├── message.test.ts
│ │ │ ├── mixinClasses.ts
│ │ │ └── types/
│ │ │ ├── Mixin.test-d.ts
│ │ │ └── channels.test-d.ts
│ │ ├── api-extractor.json
│ │ ├── cliff.toml
│ │ ├── docs/
│ │ │ └── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── Mixin.ts
│ │ │ ├── MixinTypes.d.ts
│ │ │ ├── Structure.ts
│ │ │ ├── automoderation/
│ │ │ │ ├── AutoModerationRule.ts
│ │ │ │ ├── AutoModerationRuleTriggerMetadata.ts
│ │ │ │ ├── actions/
│ │ │ │ │ ├── AutoModerationAction.ts
│ │ │ │ │ ├── AutoModerationActionMetadata.ts
│ │ │ │ │ └── index.ts
│ │ │ │ └── index.ts
│ │ │ ├── bitfields/
│ │ │ │ ├── AttachmentFlagsBitField.ts
│ │ │ │ ├── BitField.ts
│ │ │ │ ├── ChannelFlagsBitField.ts
│ │ │ │ ├── MessageFlagsBitField.ts
│ │ │ │ ├── PermissionsBitField.ts
│ │ │ │ ├── SKUFlagsBitField.ts
│ │ │ │ └── index.ts
│ │ │ ├── channels/
│ │ │ │ ├── AnnouncementChannel.ts
│ │ │ │ ├── AnnouncementThreadChannel.ts
│ │ │ │ ├── CategoryChannel.ts
│ │ │ │ ├── Channel.ts
│ │ │ │ ├── DMChannel.ts
│ │ │ │ ├── ForumChannel.ts
│ │ │ │ ├── ForumTag.ts
│ │ │ │ ├── GroupDMChannel.ts
│ │ │ │ ├── MediaChannel.ts
│ │ │ │ ├── PermissionOverwrite.ts
│ │ │ │ ├── PrivateThreadChannel.ts
│ │ │ │ ├── PublicThreadChannel.ts
│ │ │ │ ├── StageChannel.ts
│ │ │ │ ├── TextChannel.ts
│ │ │ │ ├── ThreadMetadata.ts
│ │ │ │ ├── VoiceChannel.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── mixins/
│ │ │ │ ├── AppliedTagsMixin.ts
│ │ │ │ ├── ChannelOwnerMixin.ts
│ │ │ │ ├── ChannelParentMixin.ts
│ │ │ │ ├── ChannelPermissionMixin.ts
│ │ │ │ ├── ChannelPinMixin.ts
│ │ │ │ ├── ChannelSlowmodeMixin.ts
│ │ │ │ ├── ChannelTopicMixin.ts
│ │ │ │ ├── ChannelWebhookMixin.ts
│ │ │ │ ├── DMChannelMixin.ts
│ │ │ │ ├── GroupDMMixin.ts
│ │ │ │ ├── GuildChannelMixin.ts
│ │ │ │ ├── TextChannelMixin.ts
│ │ │ │ ├── ThreadChannelMixin.ts
│ │ │ │ ├── ThreadOnlyChannelMixin.ts
│ │ │ │ ├── VoiceChannelMixin.ts
│ │ │ │ └── index.ts
│ │ │ ├── emojis/
│ │ │ │ ├── Emoji.ts
│ │ │ │ └── index.ts
│ │ │ ├── entitlements/
│ │ │ │ ├── Entitlement.ts
│ │ │ │ └── index.ts
│ │ │ ├── index.ts
│ │ │ ├── interactions/
│ │ │ │ ├── ResolvedInteractionData.ts
│ │ │ │ └── index.ts
│ │ │ ├── invites/
│ │ │ │ ├── Invite.ts
│ │ │ │ └── index.ts
│ │ │ ├── messages/
│ │ │ │ ├── ApplicationCommandInteractionMetadata.ts
│ │ │ │ ├── Attachment.ts
│ │ │ │ ├── ChannelMention.ts
│ │ │ │ ├── InteractionMetadata.ts
│ │ │ │ ├── Message.ts
│ │ │ │ ├── MessageActivity.ts
│ │ │ │ ├── MessageCall.ts
│ │ │ │ ├── MessageComponentInteractionMetadata.ts
│ │ │ │ ├── MessageReference.ts
│ │ │ │ ├── ModalSubmitInteractionMetadata.ts
│ │ │ │ ├── Reaction.ts
│ │ │ │ ├── ReactionCountDetails.ts
│ │ │ │ ├── RoleSubscriptionData.ts
│ │ │ │ ├── components/
│ │ │ │ │ ├── ActionRowComponent.ts
│ │ │ │ │ ├── ButtonComponent.ts
│ │ │ │ │ ├── ChannelSelectMenuComponent.ts
│ │ │ │ │ ├── Component.ts
│ │ │ │ │ ├── ComponentEmoji.ts
│ │ │ │ │ ├── ContainerComponent.ts
│ │ │ │ │ ├── FileComponent.ts
│ │ │ │ │ ├── FileUploadComponent.ts
│ │ │ │ │ ├── InteractiveButtonComponent.ts
│ │ │ │ │ ├── LabelComponent.ts
│ │ │ │ │ ├── LabeledButtonComponent.ts
│ │ │ │ │ ├── LinkButtonComponent.ts
│ │ │ │ │ ├── MediaGalleryComponent.ts
│ │ │ │ │ ├── MediaGalleryItem.ts
│ │ │ │ │ ├── MentionableSelectMenuComponent.ts
│ │ │ │ │ ├── PremiumButtonComponent.ts
│ │ │ │ │ ├── RoleSelectMenuComponent.ts
│ │ │ │ │ ├── SectionComponent.ts
│ │ │ │ │ ├── SelectMenuComponent.ts
│ │ │ │ │ ├── SelectMenuDefaultValue.ts
│ │ │ │ │ ├── SeparatorComponent.ts
│ │ │ │ │ ├── StringSelectMenuComponent.ts
│ │ │ │ │ ├── StringSelectMenuOption.ts
│ │ │ │ │ ├── TextDisplayComponent.ts
│ │ │ │ │ ├── TextInputComponent.ts
│ │ │ │ │ ├── ThumbnailComponent.ts
│ │ │ │ │ ├── UnfurledMediaItem.ts
│ │ │ │ │ ├── UserSelectMenuComponent.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── embeds/
│ │ │ │ │ ├── Embed.ts
│ │ │ │ │ ├── EmbedAuthor.ts
│ │ │ │ │ ├── EmbedField.ts
│ │ │ │ │ ├── EmbedFooter.ts
│ │ │ │ │ ├── EmbedImage.ts
│ │ │ │ │ ├── EmbedProvider.ts
│ │ │ │ │ ├── EmbedThumbnail.ts
│ │ │ │ │ ├── EmbedVideo.ts
│ │ │ │ │ └── index.ts
│ │ │ │ └── index.ts
│ │ │ ├── polls/
│ │ │ │ ├── Poll.ts
│ │ │ │ ├── PollAnswer.ts
│ │ │ │ ├── PollAnswerCount.ts
│ │ │ │ ├── PollMedia.ts
│ │ │ │ ├── PollResults.ts
│ │ │ │ └── index.ts
│ │ │ ├── skus/
│ │ │ │ ├── SKU.ts
│ │ │ │ └── index.ts
│ │ │ ├── soundboards/
│ │ │ │ ├── SoundboardSound.ts
│ │ │ │ └── index.ts
│ │ │ ├── stageInstances/
│ │ │ │ ├── StageInstance.ts
│ │ │ │ └── index.ts
│ │ │ ├── stickers/
│ │ │ │ ├── Sticker.ts
│ │ │ │ ├── StickerPack.ts
│ │ │ │ └── index.ts
│ │ │ ├── subscriptions/
│ │ │ │ ├── Subscription.ts
│ │ │ │ └── index.ts
│ │ │ ├── teams/
│ │ │ │ ├── Team.ts
│ │ │ │ ├── TeamMember.ts
│ │ │ │ └── index.ts
│ │ │ ├── users/
│ │ │ │ ├── AvatarDecorationData.ts
│ │ │ │ ├── Connection.ts
│ │ │ │ ├── User.ts
│ │ │ │ └── index.ts
│ │ │ ├── utils/
│ │ │ │ ├── optimization.ts
│ │ │ │ ├── symbols.ts
│ │ │ │ ├── type-guards.ts
│ │ │ │ └── types.ts
│ │ │ ├── voice/
│ │ │ │ ├── VoiceRegion.ts
│ │ │ │ ├── VoiceState.ts
│ │ │ │ └── index.ts
│ │ │ └── webhooks/
│ │ │ ├── Webhook.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.docs.json
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.test.json
│ │ └── tsup.config.ts
│ ├── ui/
│ │ ├── .cliff-jumperrc.json
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.cjs
│ │ ├── .prettierignore
│ │ ├── .prettierrc.cjs
│ │ ├── .storybook/
│ │ │ ├── main.ts
│ │ │ ├── preview.css
│ │ │ └── preview.ts
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── cliff.toml
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── lib/
│ │ │ ├── components/
│ │ │ │ ├── Alert.stories.tsx
│ │ │ │ ├── Alert.tsx
│ │ │ │ ├── Section.stories.tsx
│ │ │ │ ├── Section.tsx
│ │ │ │ └── discord/
│ │ │ │ ├── DiscordMessages.stories.tsx
│ │ │ │ ├── Message.tsx
│ │ │ │ ├── MessageAuthor.tsx
│ │ │ │ ├── MessageAuthorReply.tsx
│ │ │ │ ├── MessageBaseReply.tsx
│ │ │ │ ├── MessageEmbed.tsx
│ │ │ │ ├── MessageEmbedAuthor.tsx
│ │ │ │ ├── MessageEmbedField.tsx
│ │ │ │ ├── MessageEmbedFields.tsx
│ │ │ │ ├── MessageEmbedFooter.tsx
│ │ │ │ ├── MessageEmbedImage.tsx
│ │ │ │ ├── MessageEmbedThumbnail.tsx
│ │ │ │ ├── MessageEmbedTitle.tsx
│ │ │ │ ├── MessageInteraction.tsx
│ │ │ │ ├── MessageReply.tsx
│ │ │ │ └── Messages.tsx
│ │ │ └── index.ts
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ └── vite.config.ts
│ ├── util/
│ │ ├── .cliff-jumperrc.json
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.js
│ │ ├── .prettierignore
│ │ ├── .prettierrc.js
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── __tests__/
│ │ │ ├── Equatable.test.ts
│ │ │ ├── JSONEncodable.test.ts
│ │ │ ├── embedLength.test.ts
│ │ │ ├── lazy.test.ts
│ │ │ ├── range.test.ts
│ │ │ └── types/
│ │ │ ├── Equatable.test-d.ts
│ │ │ └── JSONEncodable.test-d.ts
│ │ ├── api-extractor.json
│ │ ├── cliff.toml
│ │ ├── docs/
│ │ │ └── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── Equatable.ts
│ │ │ ├── RawFile.ts
│ │ │ ├── encodables.ts
│ │ │ ├── functions/
│ │ │ │ ├── calculateShardId.ts
│ │ │ │ ├── embedLength.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── lazy.ts
│ │ │ │ ├── range.ts
│ │ │ │ ├── runtime.ts
│ │ │ │ └── userAgentAppendix.ts
│ │ │ ├── gatewayRateLimitError.ts
│ │ │ ├── index.ts
│ │ │ └── types.ts
│ │ ├── tsconfig.docs.json
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.test.json
│ │ └── tsup.config.ts
│ ├── voice/
│ │ ├── .cliff-jumperrc.json
│ │ ├── .gitignore
│ │ ├── .lintstagedrc.js
│ │ ├── .prettierignore
│ │ ├── .prettierrc.js
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── __mocks__/
│ │ │ └── rtp.ts
│ │ ├── __tests__/
│ │ │ ├── AudioPlayer.test.ts
│ │ │ ├── AudioReceiveStream.test.ts
│ │ │ ├── AudioResource.test.ts
│ │ │ ├── DataStore.test.ts
│ │ │ ├── SSRCMap.test.ts
│ │ │ ├── Secretbox.test.ts
│ │ │ ├── SpeakingMap.test.ts
│ │ │ ├── TransformerGraph.test.ts
│ │ │ ├── VoiceConnection.test.ts
│ │ │ ├── VoiceReceiver.test.ts
│ │ │ ├── VoiceUDPSocket.test.ts
│ │ │ ├── VoiceWebSocket.test.ts
│ │ │ ├── abortAfter.test.ts
│ │ │ ├── demuxProbe.test.ts
│ │ │ ├── entersState.test.ts
│ │ │ └── joinVoiceChannel.test.ts
│ │ ├── api-extractor.json
│ │ ├── cliff.toml
│ │ ├── docs/
│ │ │ └── README.md
│ │ ├── package.json
│ │ ├── scripts/
│ │ │ └── postbuild.mjs
│ │ ├── src/
│ │ │ ├── DataStore.ts
│ │ │ ├── VoiceConnection.ts
│ │ │ ├── audio/
│ │ │ │ ├── AudioPlayer.ts
│ │ │ │ ├── AudioPlayerError.ts
│ │ │ │ ├── AudioResource.ts
│ │ │ │ ├── PlayerSubscription.ts
│ │ │ │ ├── TransformerGraph.ts
│ │ │ │ └── index.ts
│ │ │ ├── index.ts
│ │ │ ├── joinVoiceChannel.ts
│ │ │ ├── networking/
│ │ │ │ ├── DAVESession.ts
│ │ │ │ ├── Networking.ts
│ │ │ │ ├── VoiceUDPSocket.ts
│ │ │ │ ├── VoiceWebSocket.ts
│ │ │ │ └── index.ts
│ │ │ ├── receive/
│ │ │ │ ├── AudioReceiveStream.ts
│ │ │ │ ├── SSRCMap.ts
│ │ │ │ ├── SpeakingMap.ts
│ │ │ │ ├── VoiceReceiver.ts
│ │ │ │ └── index.ts
│ │ │ └── util/
│ │ │ ├── Secretbox.ts
│ │ │ ├── abortAfter.ts
│ │ │ ├── adapter.ts
│ │ │ ├── constants.ts
│ │ │ ├── demuxProbe.ts
│ │ │ ├── entersState.ts
│ │ │ ├── generateDependencyReport.ts
│ │ │ ├── index.ts
│ │ │ └── util.ts
│ │ ├── tsconfig.docs.json
│ │ ├── tsconfig.eslint.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.test.json
│ │ └── tsup.config.ts
│ └── ws/
│ ├── .cliff-jumperrc.json
│ ├── .gitignore
│ ├── .lintstagedrc.js
│ ├── .prettierignore
│ ├── .prettierrc.js
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── __tests__/
│ │ ├── gateway.mock.ts
│ │ ├── strategy/
│ │ │ ├── WorkerContextFetchingStrategy.test.ts
│ │ │ └── WorkerShardingStrategy.test.ts
│ │ ├── types/
│ │ │ └── WebSocketManager.test-d.ts
│ │ ├── util/
│ │ │ └── SimpleIdentifyThrottler.test.ts
│ │ └── ws/
│ │ └── WebSocketManager.test.ts
│ ├── api-extractor.json
│ ├── cliff.toml
│ ├── docs/
│ │ └── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.ts
│ │ ├── strategies/
│ │ │ ├── context/
│ │ │ │ ├── IContextFetchingStrategy.ts
│ │ │ │ ├── SimpleContextFetchingStrategy.ts
│ │ │ │ └── WorkerContextFetchingStrategy.ts
│ │ │ └── sharding/
│ │ │ ├── IShardingStrategy.ts
│ │ │ ├── SimpleShardingStrategy.ts
│ │ │ ├── WorkerShardingStrategy.ts
│ │ │ └── defaultWorker.ts
│ │ ├── throttling/
│ │ │ ├── IIdentifyThrottler.ts
│ │ │ └── SimpleIdentifyThrottler.ts
│ │ ├── utils/
│ │ │ ├── WorkerBootstrapper.ts
│ │ │ └── constants.ts
│ │ └── ws/
│ │ ├── WebSocketManager.ts
│ │ └── WebSocketShard.ts
│ ├── tsconfig.docs.json
│ ├── tsconfig.eslint.json
│ ├── tsconfig.json
│ ├── tsconfig.test.json
│ └── tsup.config.ts
├── patches/
│ └── @microsoft__tsdoc-config@0.17.1.patch
├── pnpm-workspace.yaml
├── tsconfig.docs.json
├── tsconfig.eslint.json
├── tsconfig.json
├── tsup.config.ts
├── turbo.json
├── unocss.config.ts
└── vitest.config.ts
================================================
FILE CONTENTS
================================================
================================================
FILE: .commitlintrc.json
================================================
{
"$schema": "https://json.schemastore.org/commitlintrc.json",
"extends": ["@commitlint/config-angular"],
"rules": {
"type-enum": [
2,
"always",
["chore", "build", "ci", "docs", "feat", "fix", "perf", "refactor", "revert", "style", "test", "types"]
],
"scope-case": [0],
"subject-exclamation-mark": [0]
}
}
================================================
FILE: .dockerignore
================================================
# Packages
**/node_modules
# Log files
**/logs
**/*.log
**/npm-debug.log*
# Runtime data
**/pids
**/*.pid
**/*.seed
# Env
**/.env
# Dist
**/dist/
**/dist-docs/
# Miscellaneous
**/.tmp
**/.vscode
**/.idea
**/.DS_Store
**/.turbo
**/tsconfig.tsbuildinfo
**/coverage
**/__tests__
**/out
# yarn
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
# Cache
**/.prettiercache
**/.eslintcache
**/.vercel
# Docker specific
**/.cliff-jumperrc.json
**/api-extractor.json
**/api-extractor-docs.json
**/.eslintignore
**/.eslintrc.json
**/.lintstagedrc.js
**/.lintstagedrc.cjs
**/.lintstagedrc.json
**/.prettierignore
**/.prettierrc.js
**/.prettierrc.cjs
**/.prettierrc.json
**/cliff.toml
**/CHANGELOG.md
**/README.md
**/LICENSE
**/tsconfig.eslint.json
**/tsconfig.docs.json
**/docs/
**/vitest.config.ts
================================================
FILE: .git-blame-ignore-revs
================================================
# .git-blame-ignore-revs
# switched to eslint-config-neon for mainlib discord.js
b03c65c34c6e8bab7f97d507d6ccd7c441a14360
================================================
FILE: .gitattributes
================================================
* text=auto eol=lf
pnpm-lock.yaml linguist-generated=true text=auto eol=lf
================================================
FILE: .github/.kodiak.toml
================================================
version = 1
[merge]
require_automerge_label = false
blocking_labels = ['blocked', 'in review', 'semver:major']
method = 'squash'
[merge.message]
title = 'pull_request_title'
strip_html_comments = true
include_coauthors = true
================================================
FILE: .github/CODEOWNERS
================================================
# Learn how to add code owners here:
# https://help.github.com/articles/about-code-owners
* @iCrawl
package.json @discordjs/core
pnpm-lock.yaml @discordjs/core
/.github/ISSUE_TEMPLATE/ @discordjs/guide @discordjs/core
/apps/guide/ @discordjs/website @discordjs/guide
/apps/guide/content/ @discordjs/guide
/apps/proxy-container/ @discordjs/proxy
/apps/website/ @discordjs/website
/packages/actions/ @discordjs/actions
/packages/api-extractor/ @discordjs/api-extractor-utils
/packages/api-extractor-model/ @discordjs/api-extractor-utils
/packages/api-extractor-utils/ @discordjs/api-extractor-utils
/packages/brokers/ @discordjs/brokers
/packages/builders/ @discordjs/builders
/packages/collection/ @discordjs/collection
/packages/core/ @discordjs/core
/packages/create-discord-bot/ @discordjs/guide
/packages/discord.js/ @discordjs/core
/packages/docgen/ @iCrawl
/packages/formatters/ @discordjs/formatters
/packages/next/ @discordjs/core
/packages/proxy/ @discordjs/proxy
/packages/rest/ @discordjs/rest
/packages/scripts/ @discordjs/scripts
/packages/structures/ @discordjs/structures
/packages/ui/ @discordjs/ui
/packages/util/ @discordjs/util
/packages/voice/ @discordjs/core
/packages/ws/ @discordjs/ws
================================================
FILE: .github/CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to make participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
- The use of sexualized language or imagery and unwelcome sexual attention or
advances
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or electronic
address, without explicit permission
- Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies within all project spaces, and it also applies when
an individual is representing the project or its community in public spaces.
Examples of representing a project or community include using an official
project e-mail address, posting via an official social media account, or acting
as an appointed representative at an online or offline event. Representation of
a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at https://discord.gg/djs. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq
================================================
FILE: .github/COMMIT_CONVENTION.md
================================================
## Git Commit Message Convention
> This is adapted from [Angular's commit convention](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular).
#### TL;DR:
Messages must be matched by the following regex:
```js
/^(revert: )?(feat|fix|docs|style|refactor|perf|test|build|ci|chore|types)(\(.+\))?!?: .{1,72}/;
```
#### Examples
Appears under "Features" header, `GuildMember` subheader:
```
feat(GuildMember): add 'tag' method
```
Appears under "Bug Fixes" header, `Guild` subheader, with a link to issue #28:
```
fix(Guild): handle events correctly
close #28
```
Appears under "Performance Improvements" header, and under "Breaking Changes" with the breaking change explanation:
```
perf(core): improve patching by removing 'bar' option
BREAKING CHANGE: The 'bar' option has been removed.
```
The following commit and commit `667ecc1` do not appear in the changelog if they are under the same release. If not, the revert commit appears under the "Reverts" header.
```
revert: feat(Managers): add Managers
This reverts commit 667ecc1654a317a13331b17617d973392f415f02.
```
### Full Message Format
A commit message consists of a **header**, **body** and **footer**. The header has a **type**, **scope** and **subject**:
```
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
```
The **header** is mandatory and the **scope** of the header is optional.
If the commit contains **Breaking Changes**, a `!` can be added before the `:` as an indicator.
### Revert
If the commit reverts a previous commit, it should begin with `revert:`, followed by the header of the reverted commit. In the body, it should say: `This reverts commit <hash>.`, where the hash is the SHA of the commit being reverted.
### Type
If the prefix is `feat`, `fix` or `perf`, it will appear in the changelog. However, if there is any [BREAKING CHANGE](#footer), the commit will always appear in the changelog.
Other prefixes are up to your discretion. Suggested prefixes are `docs`, `chore`, `style`, `refactor`, and `test` for non-changelog related tasks.
### Scope
The scope could be anything specifying the place of the commit change. For example `GuildMember`, `Guild`, `Message`, `TextChannel` etc...
### Subject
The subject contains a succinct description of the change:
- use the imperative, present tense: "change" not "changed" nor "changes"
- don't capitalize the first letter
- no dot (.) at the end
### Body
Just as in the **subject**, use the imperative, present tense: "change" not "changed" nor "changes".
The body should include the motivation for the change and contrast this with previous behavior.
### Footer
The footer should contain any information about **Breaking Changes** and is also the place to
reference GitHub issues that this commit **Closes**.
**Breaking Changes** should start with the word `BREAKING CHANGE:` with a space or two newlines. The rest of the commit message is then used for this.
================================================
FILE: .github/CONTRIBUTING.md
================================================
# Contributing
**The issue tracker is only for bug reports and enhancement suggestions. If you have a question, please ask it in the [Discord server](https://discord.gg/djs) instead of opening an issue – you will get redirected there anyway.**
If you wish to contribute to the discord.js codebase or documentation, feel free to fork the repository and submit a
pull request. We use ESLint to enforce a consistent coding style, so having that set up in your editor of choice
is a great boon to your development process.
## Setup
To get ready to work on the codebase, please do the following:
1. Fork & clone the repository, and make sure you're on the **main** branch
2. Run `pnpm install --frozen-lockfile` ([install](https://pnpm.io/installation))
3. Run `pnpm run build` to build local packages
4. Code your heart out!
5. Run `pnpm run test` to run ESLint and ensure any JSDoc changes are valid
6. [Submit a pull request](https://github.com/discordjs/discord.js/compare) (Make sure you follow the [conventional commit format](https://github.com/discordjs/discord.js/blob/main/.github/COMMIT_CONVENTION.md))
## Testing changes locally
If you want to test changes you've made locally, you can do so by using `pnpm link <package-you-want-to-link-to-your-current-package>`. This will create a symlink to your local copy of the discord.js libraries.
1. Create a new directory `mkdir discordjs-test` and move into it `cd discordjs-test`
2. Initialize a new pnpm project `pnpm init`
3. Now link the discord.js package from the directory you cloned earlier `pnpm link {PATH_TO_DISCORDJS_REPO}/packages/<package>`. (e.g. `pnpm link ~/discord.js/packages/rest`)
4. Import the package in your source code and test them out!
### Working with TypeScript packages
When testing local changes, you may notice you need to manually recompile TypeScript projects on every change in order to get the latest code changes to test locally.
To avoid this you can use the `--watch` parameter in the package build script to automatically recompile the project when changes are detected.
For example, to automatically recompile the `@discordjs/rest` project when changes are detected, run `pnpm turbo run build --filter='@discordjs/rest' -- --watch` in the root folder of where you cloned the discord.js repo.
## Adding new packages
If you'd like to create another package under the `@discordjs` organization run the following command:
```sh
pnpm run create-package <package-name> [package-description]
```
This will create new package directory under `packages/` with the required configuration files. You may begin
to make changes within the `src/` directory. You may also need to:
- Update workflows that utilize packages
- Update the CODEOWNERS file
================================================
FILE: .github/FUNDING.yml
================================================
github: [iCrawl, amishshah, vladfrangu, kyranet]
open_collective: discordjs
================================================
FILE: .github/ISSUE_TEMPLATE/01-package_bug_report.yml
================================================
name: Bug report
description: Report an issue with discord.js or another package.
labels: [bug, need repro]
body:
- type: markdown
attributes:
value: |
Thank you for filing an issue! If you are here to ask a question, use Discord instead: https://discord.gg/djs
This issue form is for discord.js, including other packages.
- type: dropdown
id: package
attributes:
label: Which package is this bug report for?
options:
- discord.js
- brokers
- builders
- collection
- core
- create-discord-bot
- formatters
- next
- proxy
- rest
- structures
- ui
- util
- voice
- ws
validations:
required: true
- type: textarea
id: description
attributes:
label: Issue description
description: Describe the issue in as much detail as possible.
placeholder: |
Steps to reproduce with below code sample:
1. Do thing
2. Do thing in Discord client
3. Observe behavior
4. See error logs below
validations:
required: true
- type: textarea
id: code_sample
attributes:
label: Code sample
description: |
Your code sample should be:
1. Minimal - Use as little code as possible that still produces the same problem (and is understandable)
2. Complete - Provide all parts someone else needs to reproduce your problem
3. Reproducible - Test the code you're about to provide to make sure it reproduces the problem
This will be automatically formatted into code, so no need for backticks.
render: typescript
- type: textarea
id: versions
attributes:
label: Versions
description: List necessary versions here. This includes your package version, runtime version, operating system etc.
placeholder: |
- discord.js 14.24.2 (`npm ls discord.js` or another package)
- Node.js 24.11.0 (`node --version`)
- TypeScript 5.9.3 (`npm ls typescript` if you use it)
- macOS Ventura 13.3.1
validations:
required: true
- type: dropdown
id: priority
attributes:
label: Issue priority
description: Please be realistic. If you need to elaborate on your reasoning, please use the issue description field above.
options:
- Low (slightly annoying)
- Medium (should be fixed soon)
- High (immediate attention needed)
validations:
required: true
- type: dropdown
id: partials
attributes:
label: Which partials do you have configured?
description: Check your `Client` constructor for the `partials` key.
options:
- Not applicable
- No Partials
- User
- Channel
- GuildMember
- Message
- Reaction
- GuildScheduledEvent
- ThreadMember
- Poll
- PollAnswer
- SoundboardSound
multiple: true
validations:
required: true
- type: dropdown
id: intents
attributes:
label: Which gateway intents are you subscribing to?
description: Check your `Client` constructor for the `intents` key.
options:
- Not applicable
- No Intents
- Guilds
- GuildMembers
- GuildModeration
- GuildExpressions
- GuildIntegrations
- GuildWebhooks
- GuildInvites
- GuildVoiceStates
- GuildPresences
- GuildMessages
- GuildMessageReactions
- GuildMessageTyping
- DirectMessages
- DirectMessageReactions
- DirectMessageTyping
- MessageContent
- GuildScheduledEvents
- AutoModerationConfiguration
- AutoModerationExecution
- GuildMessagePolls
- DirectMessagePolls
multiple: true
validations:
required: true
- type: input
id: dev_release
attributes:
label: I have tested this issue on a development release
placeholder: d23280c (commit hash)
description: |
The issue might already be fixed in a development release or main. This is not required, but helps us greatly.
[discord.js only] To install the latest development release run `npm i discord.js@dev` in your project directory.
Run `npm list discord.js` and use the last part of the printed information (`d23280c` for `discord.js@xx.x.x-dev.1530234593.d23280c`)
================================================
FILE: .github/ISSUE_TEMPLATE/02-application_bug_report.yml
================================================
name: Websites bug report
description: Report an issue with the documentation or guide websites.
labels: [bug, need repro]
body:
- type: markdown
attributes:
value: |
Thank you for filing an issue! If you are here to ask a question, use Discord instead: https://discord.gg/djs
This issue form is for our documentation and guide websites.
- type: dropdown
id: application
attributes:
label: Which application is this bug report for?
options:
- Documentation
- Guide
validations:
required: true
- type: textarea
id: description
attributes:
label: Issue description
description: Describe the issue in as much detail as possible.
validations:
required: true
- type: textarea
id: steps_to_reproduce
attributes:
label: Steps to Reproduce
description: What steps must be taken to reproduce this issue?
placeholder: |
1. Visit a page
2. Click a link
3. ...
validations:
required: true
- type: textarea
id: versions
attributes:
label: Versions
description: List necessary versions here. This includes your browser, operating system etc.
placeholder: |
- Safari 16.4 (18615.1.26.11.23)
- macOS Ventura 13.3.1
validations:
required: true
- type: dropdown
id: priority
attributes:
label: Issue priority
description: Please be realistic. If you need to elaborate on your reasoning, please use the issue description field above.
options:
- Low (slightly annoying)
- Medium (should be fixed soon)
- High (immediate attention needed)
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/03-proxy_container_bug_report.yml
================================================
name: Proxy Container bug report
description: Report an issue with the proxy container.
labels: [bug, need repro, apps:proxy-container]
body:
- type: markdown
attributes:
value: |
Thank you for filing an issue! If you are here to ask a question, use Discord instead: https://discord.gg/djs
This issue form is for the proxy container.
- type: textarea
id: description
attributes:
label: Issue description
description: Describe the issue in as much detail as possible.
validations:
required: true
- type: textarea
id: steps_to_reproduce
attributes:
label: Steps to Reproduce
description: What steps must be taken to reproduce this issue?
placeholder: |
1. Pull the container image
2. Run the container with specific configuration
3. Send a request
4. Observe behavior
validations:
required: true
- type: textarea
id: versions
attributes:
label: Versions
description: List necessary versions here. This includes the container image tag, Docker version, operating system etc.
placeholder: |
- discordjs/proxy 1.0.0
- Docker 27.5.1
- Linux 6.1.0
validations:
required: true
- type: dropdown
id: priority
attributes:
label: Issue priority
description: Please be realistic. If you need to elaborate on your reasoning, please use the issue description field above.
options:
- Low (slightly annoying)
- Medium (should be fixed soon)
- High (immediate attention needed)
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/04-feature_request.yml
================================================
name: Feature request
description: Request a new feature (discord.js accepts documented features of the official Discord developer API only!)
labels: [feature request]
body:
- type: markdown
attributes:
value: |
We can only implement features that Discord publishes, documents, and merges into the Discord API documentation.
We do not implement unreleased features.
Use Discord for questions: https://discord.gg/djs
- type: dropdown
id: application_or_package
attributes:
label: Which application or package is this feature request for?
options:
- discord.js
- Documentation
- Guide
- Proxy Container
- brokers
- builders
- collection
- core
- create-discord-bot
- formatters
- next
- proxy
- rest
- structures
- ui
- util
- voice
- ws
validations:
required: true
- type: textarea
id: description
attributes:
label: Feature
description: A clear and concise description of what the problem is, or what feature you want to be implemented.
placeholder: I'm always frustrated when..., Discord has recently released..., A good addition would be...
validations:
required: true
- type: textarea
id: solution
attributes:
label: Ideal solution or implementation
description: A clear and concise description of what you want to happen.
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternative solutions or implementations
description: A clear and concise description of any alternative solutions or features you have considered.
- type: textarea
id: additional_context
attributes:
label: Other context
description: Any other context, screenshots, or file uploads that help us understand your feature request.
================================================
FILE: .github/ISSUE_TEMPLATE/05-guide.yml
================================================
name: Guide content
description: Request to add to the guide or change existing content
labels: [apps:guide]
type: Task
body:
- type: markdown
attributes:
value: |
Thanks for filing a suggestion! If you are here to ask a question, use Discord instead: https://discord.gg/djs
- type: dropdown
id: issuetype
attributes:
label: What is your suggestion about?
options:
- Requesting new content
- Changing existing content
- Correcting wrong information
validations:
required: true
- type: input
id: section
attributes:
label: Guide section the suggestion is about.
- type: textarea
id: body
attributes:
label: Describe your suggestion in detail.
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: Discord server
url: https://discord.gg/djs
about: Please visit our Discord server for questions and support requests.
================================================
FILE: .github/SUPPORT.md
================================================
# Seeking support?
We only use this issue tracker for bug reports and feature request. We are not able to provide general support or answer questions in the form of GitHub issues.
For general questions about discord.js installation and use please use the dedicated support channels in our Discord server: https://discord.gg/djs
Any issues that don't directly involve a bug or a feature request will likely be closed and redirected.
================================================
FILE: .github/issue-labeler.yml
================================================
apps:guide:
- "### Which (application|package|application or package) is this (bug
report|feature request) for\\?\\n\\nGuide\\n"
apps:proxy-container:
- "### Which (application|package|application or package) is this (bug
report|feature request) for\\?\\n\\nProxy Container\\n"
apps:website:
- "### Which (application|package|application or package) is this (bug
report|feature request) for\\?\\n\\nDocumentation\\n"
packages:brokers:
- "### Which (application|package|application or package) is this (bug
report|feature request) for\\?\\n\\nbrokers\\n"
packages:builders:
- "### Which (application|package|application or package) is this (bug
report|feature request) for\\?\\n\\nbuilders\\n"
packages:collection:
- "### Which (application|package|application or package) is this (bug
report|feature request) for\\?\\n\\ncollection\\n"
packages:core:
- "### Which (application|package|application or package) is this (bug
report|feature request) for\\?\\n\\ncore\\n"
packages:create-discord-bot:
- "### Which (application|package|application or package) is this (bug
report|feature request) for\\?\\n\\ncreate-discord-bot\\n"
packages:discord.js:
- "### Which (application|package|application or package) is this (bug
report|feature request) for\\?\\n\\ndiscord.js\\n"
packages:formatters:
- "### Which (application|package|application or package) is this (bug
report|feature request) for\\?\\n\\nformatters\\n"
packages:next:
- "### Which (application|package|application or package) is this (bug
report|feature request) for\\?\\n\\nnext\\n"
packages:proxy:
- "### Which (application|package|application or package) is this (bug
report|feature request) for\\?\\n\\nproxy\\n"
packages:rest:
- "### Which (application|package|application or package) is this (bug
report|feature request) for\\?\\n\\nrest\\n"
packages:structures:
- "### Which (application|package|application or package) is this (bug
report|feature request) for\\?\\n\\nstructures\\n"
packages:ui:
- "### Which (application|package|application or package) is this (bug
report|feature request) for\\?\\n\\ui\\n"
packages:util:
- "### Which (application|package|application or package) is this (bug
report|feature request) for\\?\\n\\util\\n"
packages:voice:
- "### Which (application|package|application or package) is this (bug
report|feature request) for\\?\\n\\nvoice\\n"
packages:ws:
- "### Which (application|package|application or package) is this (bug
report|feature request) for\\?\\n\\nws\\n"
================================================
FILE: .github/labeler.yml
================================================
apps:guide:
- changed-files:
- any-glob-to-any-file:
- apps/guide/*
- apps/guide/**/*
apps:proxy-container:
- changed-files:
- any-glob-to-any-file:
- apps/proxy-container/*
- apps/proxy-container/**/*
apps:website:
- changed-files:
- any-glob-to-any-file:
- apps/website/*
- apps/website/**/*
packages:api-extractor:
- changed-files:
- any-glob-to-any-file:
- packages/api-extractor/*
- packages/api-extractor/**/*
packages:api-extractor-model:
- changed-files:
- any-glob-to-any-file:
- packages/api-extractor-model/*
- packages/api-extractor-model/**/*
packages:brokers:
- changed-files:
- any-glob-to-any-file:
- packages/brokers/*
- packages/brokers/**/*
packages:builders:
- changed-files:
- any-glob-to-any-file:
- packages/builders/*
- packages/builders/**/*
packages:collection:
- changed-files:
- any-glob-to-any-file:
- packages/collection/*
- packages/collection/**/*
packages:core:
- changed-files:
- any-glob-to-any-file:
- packages/core/*
- packages/core/**/*
packages:create-discord-bot:
- changed-files:
- any-glob-to-any-file:
- packages/create-discord-bot/*
- packages/create-discord-bot/**/*
packages:discord.js:
- changed-files:
- any-glob-to-any-file:
- packages/discord.js/*
- packages/discord.js/**/*
packages:docgen:
- changed-files:
- any-glob-to-any-file:
- packages/docgen/*
- packages/docgen/**/*
packages:formatters:
- changed-files:
- any-glob-to-any-file:
- packages/formatters/*
- packages/formatters/**/*
packages:next:
- changed-files:
- any-glob-to-any-file:
- packages/next/*
- packages/next/**/*
packages:proxy:
- changed-files:
- any-glob-to-any-file:
- packages/proxy/*
- packages/proxy/**/*
packages:rest:
- changed-files:
- any-glob-to-any-file:
- packages/rest/*
- packages/rest/**/*
packages:structures:
- changed-files:
- any-glob-to-any-file:
- packages/structures/*
- packages/structures/**/*
packages:ui:
- changed-files:
- any-glob-to-any-file:
- packages/ui/*
- packages/ui/**/*
packages:util:
- changed-files:
- any-glob-to-any-file:
- packages/util/*
- packages/util/**/*
packages:voice:
- changed-files:
- any-glob-to-any-file:
- packages/voice/*
- packages/voice/**/*
packages:ws:
- changed-files:
- any-glob-to-any-file:
- packages/ws/*
- packages/ws/**/*
================================================
FILE: .github/labels.yml
================================================
- name: api changes
color: '5663e9'
- name: api support
color: '5663e9'
- name: apps:guide
color: fbca04
- name: apps:proxy-container
color: fbca04
- name: apps:website
color: fbca04
- name: backlog
color: 7ef7ef
- name: backport
color: 88aabb
- name: backport-candidate
color: 0075ca
- name: blocked
color: fc1423
- name: bug
color: d73a4a
- name: caching
color: 80c042
- name: chore
color: ffffff
- name: ci
color: 0075ca
- name: dependencies
color: 276bd1
- name: discord
color: '5663e9'
- name: discussion
color: b6b1f9
- name: documentation
color: 0075ca
- name: duplicate
color: cfd3d7
- name: error handling
color: 80c042
- name: feature request
color: fcf95a
- name: gateway
color: 80c042
- name: good first issue
color: 7057ff
- name: help wanted
color: '008672'
- name: in progress
color: ffccd7
- name: in review
color: aed5fc
- name: interactions
color: 80c042
- name: invalid
color: e4e669
- name: need repro
color: c66037
- name: packages:api-extractor
color: fbca04
- name: packages:api-extractor-model
color: fbca04
- name: packages:brokers
color: fbca04
- name: packages:builders
color: fbca04
- name: packages:collection
color: fbca04
- name: packages:core
color: fbca04
- name: packages:create-discord-bot
color: fbca04
- name: packages:discord.js
color: fbca04
- name: packages:docgen
color: fbca04
- name: packages:formatters
color: fbca04
- name: packages:next
color: fbca04
- name: packages:proxy
color: fbca04
- name: packages:rest
color: fbca04
- name: packages:structures
color: fbca04
- name: packages:ui
color: fbca04
- name: packages:util
color: fbca04
- name: packages:voice
color: fbca04
- name: packages:ws
color: fbca04
- name: performance
color: 80c042
- name: permissions
color: 80c042
- name: priority:high
color: fc1423
- name: question (please use Discord instead)
color: d876e3
- name: ratelimits
color: 80c042
- name: refactor
color: 1d637f
- name: regression
color: ea8785
- name: REST
color: 80c042
- name: semver:major
color: c10f47
- name: semver:minor
color: e4f486
- name: semver:patch
color: e8be8b
- name: sharding
color: 80c042
- name: tests
color: f06dff
- name: threads
color: 80c042
- name: typings
color: 80c042
- name: utility
color: 80c042
- name: wontfix
color: ffffff
================================================
FILE: .github/tsc.json
================================================
{
"problemMatcher": [
{
"owner": "tsc",
"pattern": [
{
"regexp": "^(?:\\s+\\d+\\>)?([^\\s].*)\\((\\d+),(\\d+)\\)\\s*:\\s+(error|warning|info)\\s+(\\w{1,2}\\d+)\\s*:\\s*(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"code": 5,
"message": 6
}
]
}
]
}
================================================
FILE: .github/workflows/cleanup-cache.yml
================================================
# https://docs.github.com/actions/using-workflows/caching-dependencies-to-speed-up-workflows#force-deleting-cache-entries
name: Cleanup caches
on:
pull_request:
types:
- closed
workflow_dispatch:
jobs:
cleanup:
name: Cleanup caches
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Cleanup caches
run: |
gh extension install actions/gh-actions-cache
REPO=${{ github.repository }}
BRANCH="refs/pull/${{ github.event.pull_request.number }}/merge"
echo "Fetching list of cache key"
cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH | cut -f 1 )
## Setting this to not fail the workflow while deleting cache keys.
set +e
echo "Deleting caches..."
for cacheKey in $cacheKeysForPR
do
gh actions-cache delete $cacheKey -R $REPO -B $BRANCH --confirm
done
echo "Done"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/deploy-website.yml
================================================
name: Deploy website
on:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
jobs:
deploy-website:
name: Deploy website
runs-on: ubuntu-latest
env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
if: github.repository_owner == 'discordjs'
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Install Node.js v24
uses: actions/setup-node@v6
with:
node-version: 24
package-manager-cache: false
- name: Install dependencies
uses: ./packages/actions/src/pnpmCache
- name: Pull vercel production environment
run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }}
- name: Build website artifacts
run: vercel build --prod --token=${{ secrets.VERCEL_TOKEN }}
- name: Deploy website artifacts to vercel
run: vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }}
================================================
FILE: .github/workflows/deprecate-version.yml
================================================
name: Deprecate version
on:
workflow_dispatch:
inputs:
package:
description: Package
required: true
type: choice
options:
- '@discordjs/brokers'
- '@discordjs/builders'
- '@discordjs/collection'
- '@discordjs/core'
- 'create-discord-app'
- 'create-discord-bot'
- '@discordjs/formatters'
- 'discord.js'
- '@discordjs/next'
- '@discordjs/proxy'
- '@discordjs/rest'
- '@discordjs/structures'
- '@discordjs/util'
- '@discordjs/voice'
- '@discordjs/ws'
version:
description: Version(s)
required: true
type: string
message:
description: Deprecation message
required: false
type: string
jobs:
deprecate:
runs-on: ubuntu-latest
if: github.repository_owner == 'discordjs'
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Install Node.js v24
uses: actions/setup-node@v6
with:
node-version: 24
package-manager-cache: false
- name: Install dependencies
uses: ./packages/actions/src/pnpmCache
- name: Deprecate
uses: ./packages/actions/src/deprecateVersion
with:
package: ${{ inputs.package }}
version: ${{ inputs.version }}
message: ${{ inputs.message }}
node-auth-token: ${{ secrets.NPM_PUBLISH_TOKEN }}
================================================
FILE: .github/workflows/documentation.yml
================================================
name: Documentation
on:
push:
branches:
- 'main'
paths:
- 'packages/*/src/**'
- '!packages/create-discord-bot/**'
- '!packages/ui/**'
tags:
- '**'
- '!create-discord-app@*'
- '!create-discord-bot@*'
workflow_dispatch:
inputs:
ref:
description: 'The branch, tag or SHA to checkout'
required: true
ref_type:
type: choice
description: 'Branch or tag'
options:
- branch
- tag
required: true
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
jobs:
build-docs:
name: Build & upload documentation
runs-on: ubuntu-latest
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
REF_TYPE: ${{ inputs.ref_type || github.ref_type }}
if: github.repository_owner == 'discordjs'
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
ref: ${{ inputs.ref || '' }}
- name: Install Node.js v24
uses: actions/setup-node@v6
with:
node-version: 24
package-manager-cache: false
- name: Install dependencies
uses: ./packages/actions/src/pnpmCache
- name: Build dependencies
run: pnpm run build
- name: Checkout main repository
if: ${{ inputs.ref && inputs.ref != 'main' }}
uses: actions/checkout@v6
with:
path: 'main'
- name: Build main
if: ${{ inputs.ref && inputs.ref != 'main' }}
shell: bash
env:
COREPACK_ENABLE_STRICT: 0
run: |
cd main
pnpm self-update 10
pnpm install --frozen-lockfile --prefer-offline --loglevel error
pnpm run build
cd ..
- name: Extract package and semver from tag
if: ${{ env.REF_TYPE == 'tag' }}
id: extract-tag
uses: ./packages/actions/src/formatTag
with:
tag: ${{ inputs.ref || github.ref_name }}
- name: Apply tag to api-extractor config
if: ${{ env.REF_TYPE == 'tag' && !inputs.ref }}
run: sed -i 's!https://github.com/discordjs/discord.js/tree/main!https://github.com/discordjs/discord.js/tree/${{ github.ref_name }}!' "packages/${{ steps.extract-tag.outputs.package}}/api-extractor.json"
- name: Build docs
run: pnpm run docs
- name: Build docs with main api-extractor
if: ${{ inputs.ref && inputs.ref != 'main' }}
run: |
declare -a PACKAGES=("brokers" "builders" "collection" "core" "discord.js" "formatters" "next" "proxy" "rest" "structures" "util" "voice" "ws")
for PACKAGE in "${PACKAGES[@]}"; do
if [ ! -d "packages/${PACKAGE}" ]; then
echo "::notice::${PACKAGE} does not exist on this ref. Skipping..."
continue
fi
cd "packages/${PACKAGE}"
sed -i 's!https://github.com/discordjs/discord.js/tree/main!https://github.com/discordjs/discord.js/tree/${{ inputs.ref }}!' api-extractor.json
../../main/packages/api-extractor/bin/api-extractor run --local --minify
../../main/packages/scripts/bin/generateSplitDocumentation.js
cd ../..
done
- name: Upload documentation to database
if: ${{ env.REF_TYPE == 'tag' && (!inputs.ref || inputs.ref == 'main') }}
env:
CF_D1_DOCS_API_KEY: ${{ secrets.CF_D1_DOCS_API_KEY }}
CF_D1_DOCS_ID: ${{ secrets.CF_D1_DOCS_ID }}
CF_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
CF_R2_DOCS_URL: ${{ secrets.CF_R2_DOCS_URL }}
CF_R2_DOCS_ACCESS_KEY_ID: ${{ secrets.CF_R2_DOCS_ACCESS_KEY_ID }}
CF_R2_DOCS_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_DOCS_SECRET_ACCESS_KEY }}
CF_R2_DOCS_BUCKET: ${{ secrets.CF_R2_DOCS_BUCKET }}
CF_R2_DOCS_BUCKET_URL: ${{ secrets.CF_R2_DOCS_BUCKET_URL }}
uses: ./packages/actions/src/uploadDocumentation
with:
package: ${{ steps.extract-tag.outputs.package }}
version: ${{ steps.extract-tag.outputs.semver }}
- name: Upload documentation to database
if: ${{ env.REF_TYPE == 'tag' && inputs.ref && inputs.ref != 'main' }}
env:
CF_D1_DOCS_API_KEY: ${{ secrets.CF_D1_DOCS_API_KEY }}
CF_D1_DOCS_ID: ${{ secrets.CF_D1_DOCS_ID }}
CF_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
CF_R2_DOCS_URL: ${{ secrets.CF_R2_DOCS_URL }}
CF_R2_DOCS_ACCESS_KEY_ID: ${{ secrets.CF_R2_DOCS_ACCESS_KEY_ID }}
CF_R2_DOCS_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_DOCS_SECRET_ACCESS_KEY }}
CF_R2_DOCS_BUCKET: ${{ secrets.CF_R2_DOCS_BUCKET }}
CF_R2_DOCS_BUCKET_URL: ${{ secrets.CF_R2_DOCS_BUCKET_URL }}
uses: ./main/packages/actions/src/uploadDocumentation
with:
package: ${{ steps.extract-tag.outputs.package }}
version: ${{ steps.extract-tag.outputs.semver }}
- name: Upload split documentation to blob storage
if: ${{ env.REF_TYPE == 'tag' && (!inputs.ref || inputs.ref == 'main') }}
env:
CF_R2_DOCS_URL: ${{ secrets.CF_R2_DOCS_URL }}
CF_R2_DOCS_ACCESS_KEY_ID: ${{ secrets.CF_R2_DOCS_ACCESS_KEY_ID }}
CF_R2_DOCS_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_DOCS_SECRET_ACCESS_KEY }}
CF_R2_DOCS_BUCKET: ${{ secrets.CF_R2_DOCS_BUCKET }}
uses: ./packages/actions/src/uploadSplitDocumentation
with:
package: ${{ steps.extract-tag.outputs.package }}
version: ${{ steps.extract-tag.outputs.semver }}
- name: Upload split documentation to blob storage
if: ${{ env.REF_TYPE == 'tag' && inputs.ref && inputs.ref != 'main' }}
env:
CF_R2_DOCS_URL: ${{ secrets.CF_R2_DOCS_URL }}
CF_R2_DOCS_ACCESS_KEY_ID: ${{ secrets.CF_R2_DOCS_ACCESS_KEY_ID }}
CF_R2_DOCS_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_DOCS_SECRET_ACCESS_KEY }}
CF_R2_DOCS_BUCKET: ${{ secrets.CF_R2_DOCS_BUCKET }}
uses: ./main/packages/actions/src/uploadSplitDocumentation
with:
package: ${{ steps.extract-tag.outputs.package }}
version: ${{ steps.extract-tag.outputs.semver }}
- name: Upload documentation to database
if: ${{ env.REF_TYPE == 'branch' && (!inputs.ref || inputs.ref == 'main') }}
env:
CF_D1_DOCS_API_KEY: ${{ secrets.CF_D1_DOCS_API_KEY }}
CF_D1_DOCS_ID: ${{ secrets.CF_D1_DOCS_ID }}
CF_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
CF_R2_DOCS_URL: ${{ secrets.CF_R2_DOCS_URL }}
CF_R2_DOCS_ACCESS_KEY_ID: ${{ secrets.CF_R2_DOCS_ACCESS_KEY_ID }}
CF_R2_DOCS_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_DOCS_SECRET_ACCESS_KEY }}
CF_R2_DOCS_BUCKET: ${{ secrets.CF_R2_DOCS_BUCKET }}
CF_R2_DOCS_BUCKET_URL: ${{ secrets.CF_R2_DOCS_BUCKET_URL }}
uses: ./packages/actions/src/uploadDocumentation
- name: Upload documentation to database
if: ${{ env.REF_TYPE == 'branch' && inputs.ref && inputs.ref != 'main' }}
env:
CF_D1_DOCS_API_KEY: ${{ secrets.CF_D1_DOCS_API_KEY }}
CF_D1_DOCS_ID: ${{ secrets.CF_D1_DOCS_ID }}
CF_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
CF_R2_DOCS_URL: ${{ secrets.CF_R2_DOCS_URL }}
CF_R2_DOCS_ACCESS_KEY_ID: ${{ secrets.CF_R2_DOCS_ACCESS_KEY_ID }}
CF_R2_DOCS_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_DOCS_SECRET_ACCESS_KEY }}
CF_R2_DOCS_BUCKET: ${{ secrets.CF_R2_DOCS_BUCKET }}
CF_R2_DOCS_BUCKET_URL: ${{ secrets.CF_R2_DOCS_BUCKET_URL }}
uses: ./main/packages/actions/src/uploadDocumentation
- name: Upload split documentation to blob storage
if: ${{ env.REF_TYPE == 'branch' && (!inputs.ref || inputs.ref == 'main') }}
env:
CF_R2_DOCS_URL: ${{ secrets.CF_R2_DOCS_URL }}
CF_R2_DOCS_ACCESS_KEY_ID: ${{ secrets.CF_R2_DOCS_ACCESS_KEY_ID }}
CF_R2_DOCS_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_DOCS_SECRET_ACCESS_KEY }}
CF_R2_DOCS_BUCKET: ${{ secrets.CF_R2_DOCS_BUCKET }}
uses: ./packages/actions/src/uploadSplitDocumentation
- name: Upload split documentation to blob storage
if: ${{ env.REF_TYPE == 'branch' && inputs.ref && inputs.ref != 'main' }}
env:
CF_R2_DOCS_URL: ${{ secrets.CF_R2_DOCS_URL }}
CF_R2_DOCS_ACCESS_KEY_ID: ${{ secrets.CF_R2_DOCS_ACCESS_KEY_ID }}
CF_R2_DOCS_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_DOCS_SECRET_ACCESS_KEY }}
CF_R2_DOCS_BUCKET: ${{ secrets.CF_R2_DOCS_BUCKET }}
uses: ./main/packages/actions/src/uploadSplitDocumentation
build-indices:
needs: build-docs
name: Build & upload search indices
runs-on: ubuntu-latest
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
if: github.repository_owner == 'discordjs'
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Install Node.js v24
uses: actions/setup-node@v6
with:
node-version: 24
package-manager-cache: false
- name: Install dependencies
uses: ./packages/actions/src/pnpmCache
- name: Build dependencies
run: pnpm run build
- name: Upload search indices to meilisearch
env:
CF_D1_DOCS_API_KEY: ${{ secrets.CF_D1_DOCS_API_KEY }}
CF_D1_DOCS_ID: ${{ secrets.CF_D1_DOCS_ID }}
CF_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
SEARCH_API_URL: ${{ secrets.SEARCH_API_URL }}
SEARCH_API_KEY: ${{ secrets.SEARCH_API_KEY }}
uses: ./packages/actions/src/uploadSearchIndices
================================================
FILE: .github/workflows/issue-triage.yml
================================================
name: 'Issue Labeler'
on:
issues:
types: [opened]
jobs:
issue-triage:
runs-on: ubuntu-latest
steps:
- uses: github/issue-labeler@v3.4
with:
repo-token: '${{ secrets.GITHUB_TOKEN }}'
configuration-path: .github/issue-labeler.yml
not-before: 2023-01-13T10:25:03.847Z
enable-versioned-regex: 0
================================================
FILE: .github/workflows/label-sync.yml
================================================
name: Label sync
on:
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
push:
branches:
- main
paths:
- '.github/labels.yml'
jobs:
label-sync:
name: Label sync
runs-on: ubuntu-latest
if: github.repository_owner == 'discordjs'
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Label sync
uses: crazy-max/ghaction-github-labeler@v5
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/lock.yml
================================================
name: Lock Ancient Issues
on:
schedule:
- cron: '0 16 * * *'
workflow_dispatch:
concurrency:
group: lock
jobs:
action:
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- uses: dessant/lock-threads@v5
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
issue-inactive-days: 365
issue-lock-reason: resolved
process-only: issues
================================================
FILE: .github/workflows/pr-triage.yml
================================================
name: 'PR Triage'
on:
pull_request_target:
types:
- opened
- edited
- reopened
- synchronize
jobs:
label:
name: Label
if: github.event.action != 'edited'
runs-on: ubuntu-latest
steps:
- name: Label pull request
uses: actions/labeler@v5
with:
repo-token: '${{ secrets.GITHUB_TOKEN }}'
sync-labels: true
validate-title:
name: Validate title
runs-on: ubuntu-latest
steps:
- name: Validate pull request title
env:
TITLE: ${{ github.event.pull_request.title }}
run: |
REGEX="^(revert: )?(feat|fix|docs|style|refactor|perf|test|build|ci|chore|types)(\\(.+\\))?!?: .{1,72}$"
echo "Title: \"$TITLE\""
if [[ ! "$TITLE" =~ $REGEX ]]; then
exit 1
fi
================================================
FILE: .github/workflows/publish-dev-docker.yml
================================================
name: Publish dev docker images
on:
schedule:
- cron: '0 */12 * * *'
workflow_dispatch:
env:
IMAGE_NAME: discordjs/proxy
jobs:
build:
name: Build ${{ matrix.platform }}
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- platform: linux/amd64
runner: ubuntu-latest
- platform: linux/arm64
runner: ubuntu-24.04-arm
steps:
- name: Prepare
run: |
platform=${{ matrix.platform }}
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
- name: Checkout repository
uses: actions/checkout@v6
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
- name: Build and push by digest
id: build
uses: docker/build-push-action@v6
with:
context: .
file: apps/proxy-container/Dockerfile
platforms: ${{ matrix.platform }}
outputs: type=image,name=${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true
- name: Export digest
run: |
mkdir -p /tmp/digests
digest="${{ steps.build.outputs.digest }}"
touch "/tmp/digests/${digest#sha256:}"
- name: Upload digest
uses: actions/upload-artifact@v5
with:
name: digests-${{ env.PLATFORM_PAIR }}
path: /tmp/digests/*
if-no-files-found: error
retention-days: 1
merge:
name: Create and push manifest list
runs-on: ubuntu-latest
needs: build
steps:
- name: Download digests
uses: actions/download-artifact@v6
with:
path: /tmp/digests
pattern: digests-*
merge-multiple: true
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
- name: Create manifest list and push
working-directory: /tmp/digests
run: |
docker buildx imagetools create -t ${{ env.IMAGE_NAME }}:latest \
$(printf '${{ env.IMAGE_NAME }}@sha256:%s ' *)
- name: Inspect image
run: |
docker buildx imagetools inspect ${{ env.IMAGE_NAME }}:latest
================================================
FILE: .github/workflows/publish-dev.yml
================================================
name: Publish dev
on:
schedule:
- cron: '0 */12 * * *'
workflow_dispatch:
inputs:
ref:
description: 'The ref to check out. e.g. main, feat/new-feature, refs/pull/1234/head'
required: false
default: 'main'
tag:
description: 'The tag to use, generally a feature name'
required: false
type: string
dry_run:
description: 'Perform a dry run that skips publishing and outputs logs indicating what would have happened'
type: boolean
default: false
jobs:
npm-publish:
name: npm publish
runs-on: ubuntu-latest
permissions:
id-token: write
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
if: github.repository_owner == 'discordjs'
steps:
- uses: actions/create-github-app-token@v2
id: app-token
with:
app-id: ${{ vars.DISCORDJS_APP_ID }}
private-key: ${{ secrets.DISCORDJS_APP_KEY_RELEASE }}
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ steps.app-token.outputs.token }}
ref: ${{ inputs.ref }}
- name: Install Node.js v24
uses: actions/setup-node@v6
with:
node-version: 24
package-manager-cache: false
registry-url: https://registry.npmjs.org/
- name: Install dependencies
uses: ./packages/actions/src/pnpmCache
- name: Build dependencies
run: pnpm run build
- name: Checkout main repository (non-main ref)
if: ${{ inputs.ref != 'main' }}
uses: actions/checkout@v6
with:
path: 'main'
- name: Install action deps (non-main ref)
if: ${{ inputs.ref != 'main' }}
shell: bash
working-directory: ./main
env:
COREPACK_ENABLE_STRICT: 0
run: |
pnpm self-update 10
pnpm install --filter @discordjs/actions --frozen-lockfile --prefer-offline --loglevel error
- name: Publish packages (non-main ref)
if: ${{ inputs.ref != 'main' }}
uses: ./main/packages/actions/src/releasePackages
with:
exclude: '@discordjs/docgen'
dry: ${{ inputs.dry_run }}
dev: true
tag: ${{ inputs.tag || 'dev' }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish packages (main ref)
if: ${{ inputs.ref == 'main' }}
uses: ./packages/actions/src/releasePackages
with:
exclude: '@discordjs/docgen'
dry: ${{ inputs.dry_run }}
dev: true
tag: ${{ inputs.tag || 'dev' }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/publish-docker.yml
================================================
name: Publish docker images
on:
workflow_dispatch:
env:
IMAGE_NAME: discordjs/proxy
jobs:
build:
name: Build ${{ matrix.platform }}
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- platform: linux/amd64
runner: ubuntu-latest
- platform: linux/arm64
runner: ubuntu-24.04-arm
steps:
- name: Prepare
run: |
platform=${{ matrix.platform }}
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
- name: Checkout repository
uses: actions/checkout@v6
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
- name: Build and push by digest
id: build
uses: docker/build-push-action@v6
with:
context: .
file: apps/proxy-container/Dockerfile
platforms: ${{ matrix.platform }}
outputs: type=image,name=${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true
- name: Export digest
run: |
mkdir -p /tmp/digests
digest="${{ steps.build.outputs.digest }}"
touch "/tmp/digests/${digest#sha256:}"
- name: Upload digest
uses: actions/upload-artifact@v5
with:
name: digests-${{ env.PLATFORM_PAIR }}
path: /tmp/digests/*
if-no-files-found: error
retention-days: 1
merge:
name: Create and push manifest list
runs-on: ubuntu-latest
needs: build
steps:
- name: Download digests
uses: actions/download-artifact@v6
with:
path: /tmp/digests
pattern: digests-*
merge-multiple: true
- name: Checkout repository
uses: actions/checkout@v6
- name: Get Major Version
id: version
run: |
FULL_VER=$(jq --raw-output '.version' apps/proxy-container/package.json)
MAJOR=$(echo $FULL_VER | cut -d '.' -f1)
echo "major=$MAJOR" >> $GITHUB_OUTPUT
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
- name: Create manifest list and push
working-directory: /tmp/digests
run: |
docker buildx imagetools create -t ${{ env.IMAGE_NAME }}:${{ steps.version.outputs.major }} \
$(printf '${{ env.IMAGE_NAME }}@sha256:%s ' *)
- name: Inspect image
run: |
docker buildx imagetools inspect ${{ env.IMAGE_NAME }}:${{ steps.version.outputs.major }}
================================================
FILE: .github/workflows/release.yml
================================================
name: Release
on:
workflow_dispatch:
inputs:
ref:
description: 'The branch, tag or SHA to checkout'
required: true
default: 'main'
package:
description: 'The published name of a single package to release'
type: choice
required: false
options:
- all
- discord.js
- '@discordjs/brokers'
- '@discordjs/builders'
- '@discordjs/collection'
- '@discordjs/core'
- 'create-discord-bot'
# - '@discordjs/docgen'
- '@discordjs/formatters'
- '@discordjs/next'
- '@discordjs/proxy'
- '@discordjs/rest'
- '@discordjs/structures'
- '@discordjs/util'
- '@discordjs/voice'
- '@discordjs/ws'
exclude:
description: 'Comma separated list of packages to exclude from release (if not depended upon)'
required: false
type: string
default: '@discordjs/docgen,@discordjs/next'
dry_run:
description: Perform a dry run?
type: boolean
default: false
jobs:
npm-publish:
name: npm publish
runs-on: ubuntu-latest
permissions:
id-token: write
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
if: github.repository_owner == 'discordjs'
steps:
- uses: actions/create-github-app-token@v2
id: app-token
with:
app-id: ${{ vars.DISCORDJS_APP_ID }}
private-key: ${{ secrets.DISCORDJS_APP_KEY_RELEASE }}
permission-contents: write
- name: Checkout repository
uses: actions/checkout@v6
with:
token: ${{ steps.app-token.outputs.token }}
ref: ${{ inputs.ref || '' }}
- name: Install Node.js v24
uses: actions/setup-node@v6
with:
node-version: 24
package-manager-cache: false
registry-url: https://registry.npmjs.org/
- name: Install dependencies
uses: ./packages/actions/src/pnpmCache
- name: Build dependencies
run: pnpm run build
- name: Checkout main repository
if: ${{ inputs.ref && inputs.ref != 'main' }}
uses: actions/checkout@v6
with:
path: 'main'
- name: Install action deps (non-main ref only)
if: ${{ inputs.ref && inputs.ref != 'main' }}
shell: bash
working-directory: ./main
env:
COREPACK_ENABLE_STRICT: 0
run: |
pnpm self-update 10
pnpm install --filter @discordjs/actions --frozen-lockfile --prefer-offline --loglevel error
- name: Release packages (non-main ref)
if: ${{ inputs.ref && inputs.ref != 'main' }}
uses: ./main/packages/actions/src/releasePackages
with:
package: ${{ inputs.package }}
exclude: ${{ inputs.exclude }}
dry: ${{ inputs.dry_run }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }}
GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
- name: Release packages (main ref)
if: ${{ !inputs.ref || inputs.ref == 'main' }}
uses: ./packages/actions/src/releasePackages
with:
package: ${{ inputs.package }}
exclude: ${{ inputs.exclude }}
dry: ${{ inputs.dry_run }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }}
GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
================================================
FILE: .github/workflows/remove-tag.yml
================================================
name: Remove tag
on:
workflow_dispatch:
inputs:
tag:
description: The tag to remove
required: true
type: string
message:
description: Deprecation message
required: false
type: string
jobs:
removal:
runs-on: ubuntu-latest
if: github.repository_owner == 'discordjs'
strategy:
matrix:
package:
- '@discordjs/brokers'
- '@discordjs/builders'
- '@discordjs/collection'
- '@discordjs/core'
- 'create-discord-app'
- 'create-discord-bot'
- '@discordjs/formatters'
- 'discord.js'
- '@discordjs/next'
- '@discordjs/proxy'
- '@discordjs/rest'
- '@discordjs/structures'
- '@discordjs/util'
- '@discordjs/voice'
- '@discordjs/ws'
fail-fast: false
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Install Node.js
uses: actions/setup-node@v6
with:
node-version: 24
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
uses: ./packages/actions/src/pnpmCache
- name: Remove tag
run: pnpm dist-tag rm "${{ matrix.package }}" "${{ inputs.tag }}"
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }}
- name: Deprecate version
uses: ./packages/actions/src/deprecateVersion
with:
package: ${{ matrix.package }}
version: '*-${{ inputs.tag }}.*'
message: ${{ inputs.message }}
node-auth-token: ${{ secrets.NPM_PUBLISH_TOKEN }}
================================================
FILE: .github/workflows/tests.yml
================================================
name: Tests
on:
push:
pull_request:
concurrency:
# Group based on workflow name and PR if it exists, if no PR, let it run so carryforward flags work
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
tests:
name: Tests
runs-on: ubuntu-latest
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install Node.js v24
uses: actions/setup-node@v6
with:
node-version: 24
package-manager-cache: false
- name: Install dependencies
uses: ./packages/actions/src/pnpmCache
- name: Build dependencies (PR)
if: ${{ github.event_name != 'push' }}
run: pnpm exec turbo run build --filter="...[origin/${{ github.event_name == 'pull_request' && github.event.pull_request.base.ref || 'main' }}]" --concurrency=4
- name: Build dependencies (Push)
if: ${{ github.event_name == 'push' }}
run: pnpm exec turbo run build --filter="...[HEAD^1]" --concurrency=4
- name: Tests (PR)
if: ${{ github.event_name != 'push' }}
run: pnpm exec turbo run test --filter="...[origin/${{ github.event_name == 'pull_request' && github.event.pull_request.base.ref || 'main' }}]" --concurrency=4
- name: Tests (Push)
if: ${{ github.event_name == 'push' }}
run: pnpm exec turbo run test --filter="...[HEAD^1]" --concurrency=4
- name: ESLint (PR)
if: ${{ github.event_name != 'push' }}
run: pnpm exec turbo run lint --filter="...[origin/${{ github.event_name == 'pull_request' && github.event.pull_request.base.ref || 'main' }}]" --concurrency=4 -- --format=compact
- name: ESLint (Push)
if: ${{ github.event_name == 'push' }}
run: pnpm exec turbo run lint --filter="...[HEAD^1]" --concurrency=4 -- --format=compact
- name: Docs (PR)
if: ${{ github.event_name != 'push' }}
run: pnpm exec turbo run docs --filter="...[origin/${{ github.event_name == 'pull_request' && github.event.pull_request.base.ref || 'main' }}]" --concurrency=4
- name: Docs (Push)
if: ${{ github.event_name == 'push' }}
run: pnpm exec turbo run docs --filter="...[HEAD^1]" --concurrency=4
- name: Upload Coverage
if: github.repository_owner == 'discordjs'
uses: ./packages/actions/src/uploadCoverage
with:
codecov_token: ${{ secrets.CODECOV_TOKEN }}
================================================
FILE: .github/workflows/upload-readmes.yml
================================================
name: Upload README.md files
on:
push:
branches:
- 'main'
paths:
- 'packages/*/README.md'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
jobs:
upload-readmes:
name: Upload README.md files
runs-on: ubuntu-latest
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
if: github.repository_owner == 'discordjs'
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Install Node.js
uses: actions/setup-node@v6
with:
node-version: 24
package-manager-cache: false
- name: Install dependencies
uses: ./packages/actions/src/pnpmCache
- name: Build dependencies
run: pnpm --filter @discordjs/actions... run build
- name: Upload README.md files
env:
CF_R2_READMES_ACCESS_KEY_ID: ${{ secrets.CF_R2_READMES_ACCESS_KEY_ID }}
CF_R2_READMES_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_READMES_SECRET_ACCESS_KEY }}
CF_R2_READMES_BUCKET: ${{ secrets.CF_R2_READMES_BUCKET }}
CF_R2_READMES_URL: ${{ secrets.CF_R2_READMES_URL }}
uses: ./packages/actions/src/uploadReadmeFiles
================================================
FILE: .gitignore
================================================
# Packages
node_modules
# Log files
logs
*.log
npm-debug.log*
# Runtime data
pids
*.pid
*.seed
# Env
.env
# Dist
dist
dist-docs
packages/discord-api-types
# Miscellaneous
.tmp
.vscode/*
!.vscode/extensions.json
!.vscode/settings.json
.idea
.DS_Store
.turbo
tsconfig.tsbuildinfo
coverage
out
package.tgz
tsup.config.bundled*
vitest.config.ts.timestamp*
# Deno
deno.lock
# Bun
bun.lockb
# yarn
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
# Cache
.prettiercache
.eslintcache
.vercel
================================================
FILE: .husky/commit-msg
================================================
pnpm exec commitlint --edit $1
================================================
FILE: .husky/pre-commit
================================================
pnpm run build:affected && pnpm exec lint-staged
================================================
FILE: .lintstagedrc.json
================================================
{
"$schema": "https://json.schemastore.org/lintstagedrc.schema.json",
"*": "prettier --ignore-unknown --write",
"{src/**,__tests__/**}.{mjs,js,cjs,ts,tsx}": "eslint --fix",
"src/**.ts": "vitest related --run --config ../../vitest.config.ts"
}
================================================
FILE: .prettierignore
================================================
CODEOWNERS
CHANGELOG.md
tsup.config.bundled*
vitest.config.ts.timestamp*
pnpm-lock.yaml
================================================
FILE: .prettierrc.json
================================================
{
"$schema": "https://json.schemastore.org/prettierrc.json",
"printWidth": 120,
"useTabs": true,
"singleQuote": true,
"quoteProps": "as-needed",
"trailingComma": "all",
"endOfLine": "lf"
}
================================================
FILE: .vscode/extensions.json
================================================
{
"recommendations": [
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint",
"tamasfe.even-better-toml",
"github.vscode-pull-request-github",
"codezombiech.gitignore",
"eamodio.gitlens",
"christian-kohler.npm-intellisense",
"christian-kohler.path-intellisense",
"unifiedjs.vscode-mdx"
]
}
================================================
FILE: .vscode/settings.json
================================================
{
"eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact"],
"eslint.useESLintClass": true,
"eslint.useFlatConfig": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "never",
"source.fixAll.eslint": "always",
"source.fixAll": "always"
},
"editor.trimAutoWhitespace": false,
"files.associations": {
"tsconfig.json": "jsonc",
"tsconfig.eslint.json": "jsonc"
},
"files.insertFinalNewline": true,
"files.eol": "\n",
"search.exclude": {
"**/.yarn": true,
"**/.next": true,
"**/dist": true,
"**/coverage": true,
"**/test-results": true
},
"search.followSymlinks": false,
"search.useParentIgnoreFiles": true,
"files.watcherExclude": {
"**/.next/*/**": true,
"**/.yarn/*/**": true,
"**/coverage/*/**": true,
"**/dist/*/**": true,
"**/test-results/*/**": true
},
"unocss.disable": true,
"npm.packageManager": "pnpm",
"typescript.tsdk": "node_modules/typescript/lib",
"typescript.enablePromptUseWorkspaceTsdk": true,
"tailwindCSS.experimental.classRegex": [
["cva\\(((?:[^()]|\\([^()]*\\))*)\\)", "[\"'`]?([^\"'`]+)[\"'`]?"],
["cx\\(((?:[^()]|\\([^()]*\\))*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)"],
["class:\\s*?[\"'`]([^\"'`]*).*?,"]
],
"workbench.editor.customLabels.patterns": {
"**/app/**/page.tsx": "${dirname} (${filename}.${extname}) - Page",
"**/app/**/layout.tsx": "${dirname} (${filename}.${extname}) - Layout",
"**/app/**/template.tsx": "${dirname} (${filename}.${extname}) - Template",
"**/app/**/error.tsx": "${dirname} (${filename}.${extname}) - Error",
"**/app/**/not-found.tsx": "${dirname} (${filename}.${extname}) - Not Found",
"**/components/**/page.tsx": "${dirname} (${filename}.${extname}) - Component"
},
"deno.enable": false,
"deno.enablePaths": ["./packages/create-discord-bot/template/Deno"],
"deno.lint": false,
"deno.unstable": [],
"deno.config": "./packages/create-discord-bot/template/Deno/deno.jsonc"
}
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
Copyright 2021 Noel Buechler
Copyright 2015 Amish Shah
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: README.md
================================================
<div align="center">
<br />
<p>
<a href="https://discord.js.org"><img src="https://discord.js.org/static/logo.svg" width="546" alt="discord.js" /></a>
</p>
<br />
<p>
<a href="https://discord.gg/djs"><img src="https://img.shields.io/badge/join_us-on_discord-5865F2?logo=discord&logoColor=white" alt="Discord server" /></a>
<a href="https://www.npmjs.com/package/discord.js"><img src="https://img.shields.io/npm/v/discord.js.svg?maxAge=3600" alt="npm version" /></a>
<a href="https://www.npmjs.com/package/discord.js"><img src="https://img.shields.io/npm/dt/discord.js.svg?maxAge=3600" alt="npm downloads" /></a>
<a href="https://github.com/discordjs/discord.js/actions"><img src="https://github.com/discordjs/discord.js/actions/workflows/tests.yml/badge.svg" alt="Tests status" /></a>
<a href="https://github.com/discordjs/discord.js/commits/main"><img src="https://img.shields.io/github/last-commit/discordjs/discord.js.svg?logo=github&logoColor=ffffff" alt="Last commit." /></a>
<a href="https://github.com/discordjs/discord.js/graphs/contributors"><img src="https://img.shields.io/github/contributors/discordjs/discord.js.svg?maxAge=3600&logo=github&logoColor=fff&color=00c7be" alt="contributors" /></a>
<a href="https://opencollective.com/discordjs"><img src="https://img.shields.io/opencollective/backers/discordjs?maxAge=3600&logo=opencollective" alt="backers" /></a>
<a href="https://codecov.io/gh/discordjs/discord.js"><img src="https://codecov.io/gh/discordjs/discord.js/branch/main/graph/badge.svg?precision=2" alt="Code coverage" /></a>
</p>
<p>
<a href="https://vercel.com/?utm_source=discordjs&utm_campaign=oss"><img src="https://raw.githubusercontent.com/discordjs/discord.js/main/.github/powered-by-vercel.svg" alt="Vercel" /></a>
<a href="https://www.cloudflare.com"><img src="https://raw.githubusercontent.com/discordjs/discord.js/main/.github/powered-by-workers.png" alt="Cloudflare Workers" height="44" /></a>
</p>
</div>
## About
This repository contains multiple packages with separate [releases][github-releases]. You can find the assembled Discord API wrapper at [`discord.js`][source]. It is a powerful [Node.js](https://nodejs.org/en) module that allows you to easily interact with the [Discord API](https://discord.com/developers/docs/intro).
## Packages
- `discord.js` ([source][source]) - A powerful Node.js module for interacting with the Discord API
- `create-discord-bot` ([source][create-discord-bot-source]) - A CLI tool to quickly scaffold a Discord bot project
- `@discordjs/brokers` ([source][brokers-source]) - A collection of brokers for use with discord.js
- `@discordjs/builders` ([source][builders-source]) - A utility package for easily building Discord API payloads
- `@discordjs/collection` ([source][collection-source]) - A powerful utility data structure
- `@discordjs/core` ([source][core-source]) - A thinly abstracted wrapper around the core components of the Discord API
- `@discordjs/formatters` ([source][formatters-source]) - A collection of functions for formatting strings
- `@discordjs/proxy` ([source][proxy-source]) - A wrapper around `@discordjs/rest` for running an HTTP proxy
- `@discordjs/rest` ([source][rest-source]) - A module for interacting with the Discord REST API
- `@discordjs/structures` ([source][structures-source]) - A wrapper around Discord's structures
- `@discordjs/util` ([source][util-source]) - A collection of utility functions
- `@discordjs/voice` ([source][voice-source]) - A module for interacting with the Discord Voice API
- `@discordjs/ws` ([source][ws-source]) - A wrapper around Discord's gateway
## Containers
- `discordjs/proxy` ([source][proxy-container-source]) - A lightweight HTTP proxy for Discord's API
## Links
- [Website][website] ([source][website-source])
- [Documentation][documentation]
- [Guide][guide] ([source][guide-source])
Also see the v13 to v14 [Update Guide][guide-update], which includes updated and removed items from the library.
- [discord.js Discord server][discord]
- [Discord Developers Discord server][discord-developers]
- [GitHub][source]
- [npm][npm]
- [Related libraries][related-libs]
### Extensions
- [RPC][rpc] ([source][rpc-source])
## Contributing
Please read through our [contribution guidelines][contributing] before starting a pull request. We welcome contributions of all kinds, not just code! If you're stuck for ideas, look for the [good first issue][good-first-issue] label on issues in the repository. If you have any questions about the project, feel free to ask them on [Discord][discord]. Before creating your own issue or pull request, always check to see if one already exists! Don't rush contributions, take your time and ensure you're doing it correctly.
## Help
If you don't understand something in the documentation, you are experiencing problems, or you just need a gentle nudge in the right direction, please join our [Discord server][discord].
[website]: https://discord.js.org
[website-source]: https://github.com/discordjs/discord.js/tree/main/apps/website
[documentation]: https://discord.js.org/docs
[guide]: https://discordjs.guide
[guide-source]: https://github.com/discordjs/discord.js/tree/main/apps/guide
[guide-update]: https://discordjs.guide/legacy/additional-info/changes-in-v14
[discord]: https://discord.gg/djs
[discord-developers]: https://discord.gg/discord-developers
[source]: https://github.com/discordjs/discord.js/tree/main/packages/discord.js
[npm]: https://www.npmjs.com/package/discord.js
[related-libs]: https://discord.com/developers/docs/topics/community-resources#libraries
[rpc]: https://www.npmjs.com/package/discord-rpc
[rpc-source]: https://github.com/discordjs/RPC
[contributing]: https://github.com/discordjs/discord.js/blob/main/.github/CONTRIBUTING.md
[github-releases]: https://github.com/discordjs/discord.js/releases
[create-discord-bot-source]: https://github.com/discordjs/discord.js/tree/main/packages/create-discord-bot
[brokers-source]: https://github.com/discordjs/discord.js/tree/main/packages/brokers
[builders-source]: https://github.com/discordjs/discord.js/tree/main/packages/builders
[collection-source]: https://github.com/discordjs/discord.js/tree/main/packages/collection
[core-source]: https://github.com/discordjs/discord.js/tree/main/packages/core
[formatters-source]: https://github.com/discordjs/discord.js/tree/main/packages/formatters
[proxy-source]: https://github.com/discordjs/discord.js/tree/main/packages/proxy
[rest-source]: https://github.com/discordjs/discord.js/tree/main/packages/rest
[structures-source]: https://github.com/discordjs/discord.js/tree/main/packages/structures
[util-source]: https://github.com/discordjs/discord.js/tree/main/packages/util
[voice-source]: https://github.com/discordjs/discord.js/tree/main/packages/voice
[ws-source]: https://github.com/discordjs/discord.js/tree/main/packages/ws
[proxy-container-source]: https://github.com/discordjs/discord.js/tree/main/apps/proxy-container
[good-first-issue]: https://github.com/discordjs/discord.js/contribute
================================================
FILE: api-extractor.json
================================================
/**
* 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-docs/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": {
"compilerOptions": {
// Type Checking
"allowUnreachableCode": false,
"allowUnusedLabels": false,
"exactOptionalPropertyTypes": true,
"noFallthroughCasesInSwitch": true,
"noImplicitOverride": true,
"noImplicitReturns": true,
"noPropertyAccessFromIndexSignature": false,
"noUncheckedIndexedAccess": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"strict": true,
// Modules
"allowArbitraryExtensions": false,
"allowImportingTsExtensions": false,
"module": "ESNext",
"moduleResolution": "Bundler",
"resolveJsonModule": true,
"resolvePackageJsonExports": false,
"resolvePackageJsonImports": false,
// Emit
"declaration": true,
"declarationMap": true,
"importHelpers": false,
"newLine": "lf",
"noEmitHelpers": true,
"outDir": "dist",
"removeComments": false,
"sourceMap": true,
// Interop Constraints
"esModuleInterop": false,
"forceConsistentCasingInFileNames": true,
"isolatedModules": true,
// Language and Environment
"experimentalDecorators": true,
"lib": ["ESNext"],
"target": "ES2022",
"useDefineForClassFields": true
}
}
/**
* 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-docs/index.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
},
// Disable the following warning:
// (ae-missing-release-tag) "x" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
"ae-missing-release-tag": {
"logLevel": "none"
}
// "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
// },
//
// . . .
}
}
}
================================================
FILE: apps/guide/.gitignore
================================================
# Packages
node_modules
# Log files
logs
*.log
npm-debug.log*
# Runtime data
pids
*.pid
*.seed
# Env
.env
.env*.local
# Dist
.open-next
.next
.wrangler
.source
# Miscellaneous
.tmp
.vscode
.vercel
next-env.d.ts
================================================
FILE: apps/guide/.lintstagedrc.cjs
================================================
/** @type {import('lint-staged').Config} */
module.exports = require('../../.lintstagedrc.json');
================================================
FILE: apps/guide/.prettierignore
================================================
.next
.turbo
.vscode
coverage
src/assets/readme
src/styles/unocss.css
next-env.d.ts
.source
================================================
FILE: apps/guide/.prettierrc.cjs
================================================
/** @type {import('prettier').Config} */
module.exports = {
...require('../../.prettierrc.json'),
plugins: ['prettier-plugin-tailwindcss'],
tailwindFunctions: ['cva', 'cx'],
};
================================================
FILE: apps/guide/CONTRIBUTING.md
================================================
# Contributing
## Local development
Clone the code base into a local folder, `cd` into it, and install the dependencies:
```bash
git clone https://github.com/discordjs/discord.js.git
cd discord.js/apps/guide
pnpm --filter guide install
```
You can and should use `pnpm dev` to check your changes out locally before pushing them for review.
## Adding pages
To add a new page to the guide, create a `filename.mdx` file in the folder of your choice located under `/content`. Fumadocs will pick it up and route appropriately. To list the section in the sidebar, make sure it is listed in the `meta.json` file of the directory you placed it in under the `pages` key. The order in the `pages` array determines the order pages have in the sidebar.
## Framework and components
The guide uses the fumadocs documentation framework for Next.js. You can find examples as well as documentation for the components you can use at <https://fumadocs.dev/docs/ui>.
## General guidelines
Please try your best to follow the guidelines below. They help to make the guide appear as a coherent piece of work rather than a collection of disconnected pieces with different writing styles.
### Spelling, grammar, and wording
Improper grammar, strange wording, and incorrect spelling are all things that may lead to confusion when a user reads a guide page. It's important to attempt to keep the content clear and consistent. Re-read what you've written and place yourself in the shoes of someone else for a moment to see if you can fully understand everything without any confusion.
Don't worry if you aren't super confident with your grammar/spelling/wording skills; all pull requests get thoroughly reviewed, and comments are left in areas that need to be fixed or could be done better/differently.
#### "You"/"your" instead of "we"/"our"
When explaining parts of the guide, we recommend to use "you" instead of "we" when referring to the read or things they can do:
```diff
- To check our Node version, we can run `node -v`.
+ To check your Node version, you can run `node -v`.
- To delete a message, we can do: `message.delete();`
+ To delete a message, you can do: `message.delete();`
- Our final code should look like this: ...
+ Your final code should look like this: ...
- Before we can actually do this, we need to update our configuration file.
+ Before you can actually do this, you need to update your configuration file.
```
#### "We" instead of "I"
When referring to yourself, use "we" (as in "the writers of this guide") instead of "I". For example:
```diff
- If you don't already have this package installed, I would highly recommend doing so.
+ If you don't already have this package installed, we would highly recommend doing so.
# Valid alternative:
+ If you don't already have this package installed, it's highly recommended that you do so.
- In this section, I'll be covering how to do that really cool thing everyone's asking about.
+ In this section, we'll be covering how to do that really cool thing everyone's asking about.
```
#### Inclusive language
Try to avoid using gendered and otherwise non-inclusive language. The following are just examples to give you an idea of what we expect. Don't understand this as a complete list of "banned terms":
- Use they/them/their instead of gendered pronouns (he/him/his, she/her/hers).
- Avoid using "master" and "slave", you can use "primary" and "replica" or "secondary" instead.
- Avoid gendered terms like "guys", "folks" and "people" work just as well.
- Avoid ableist terms "sanity check", use "confidence check" or "coherence check" instead.
- Avoid talking about "dummy" values, call them "placeholder" or "sample value" instead.
### Paragraph structure
Try to keep guide articles formatted nicely and easy to read. If paragraphs get too long, you can usually split them up where they introduce a new concept or facet. Adding a bit of spacing can make the guide easier to digest and follow! Try to avoid run-on sentences with many embedded clauses.
## Semantic components
You can find the full documentation for the guide framework at <https://fumadocs.dev/docs/ui/>. If you are unsure what to use when, consider looking through the existing guide pages and how they approach things.
### Callouts
You can use [Callouts](https://fumadocs.dev/docs/ui/markdown#callouts) to describe additional context that doesn't fully fit into the flow of the paragraph or requires special attention. Prefer to MDX syntax `<Callout />` over Remark `:::` admonitions.
### Code
Fumadocs integrates [Shiki transformers](https://fumadocs.dev/docs/ui/markdown#shiki-transformers) for visual highlighting through the use of [Rhype Code](https://fumadocs.dev/docs/headless/mdx/rehype-code).
When describing changes or additions to code, prefer using the appropriate language (`js` in most cases for this guide) with diff transformers over `diff` highlights:
```js
console.log('Hello'); // [!code --]
console.log('Hello World'); // [!code ++]
```
You can put the transformer syntax above the respective line and declare ranges instead of repeating formatting intsructions. You can also combine different transformers on the same line. Note that word highlights highlight the word across the code block by default, but do respect ranges.
```js
console.log('Hello'); // [!code --:2]
console.log('World');
// [!code ++]
console.log('Hello World');
```
```js
// ...
// [!code focus:2] [!code word:log:1]
console.log('Hello World!'); // this instance of "log" is highlighted
console.log('Foobar'); // this one is not
// ...
```
When introducing new functions in a paragraph, consider highlighting them in the following code snippet to draw additional attention to their use. For example, if you just described the `log` function:
```js
console.log('Hello World'); // [!code word:log]
```
Make sure to denote the file names or paths if you describe progress in a specific code sample. When descrbing multiple files, use [tab groups](https://fumadocs.dev/docs/ui/markdown#tab-groups).
````md
```json title="package.json" tab="Configuration"
{ ... }
```
```js tab="Usage"
// code showing how to use what is being configured
```
````
### Directory Structure
You can use the [Files](https://fumadocs.dev/docs/ui/components/files) component to visualize the expected directory structure, if it is relevant to the approach you describe.
================================================
FILE: apps/guide/LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
Copyright 2022 Noel Buechler
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: apps/guide/README.md
================================================
<div align="center">
<br />
<p>
<a href="https://discord.js.org"><img src="https://discord.js.org/static/logo.svg" width="546" alt="discord.js" /></a>
</p>
<br />
<p>
<a href="https://discord.gg/djs"><img src="https://img.shields.io/badge/join_us-on_discord-5865F2?logo=discord&logoColor=white" alt="Discord server" /></a>
<a href="https://github.com/discordjs/discord.js/actions"><img src="https://github.com/discordjs/discord.js/actions/workflows/tests.yml/badge.svg" alt="Build status" /></a>
<a href="https://opencollective.com/discordjs"><img src="https://img.shields.io/opencollective/backers/discordjs?maxAge=3600&logo=opencollective" alt="backers" /></a>
</p>
<p>
<a href="https://vercel.com/?utm_source=discordjs&utm_campaign=oss"><img src="https://raw.githubusercontent.com/discordjs/discord.js/main/.github/powered-by-vercel.svg" alt="Vercel" /></a>
<a href="https://www.cloudflare.com"><img src="https://raw.githubusercontent.com/discordjs/discord.js/main/.github/powered-by-workers.png" alt="Cloudflare Workers" height="44" /></a>
</p>
</div>
## Links
- [Website][website] ([source][website-source])
- [Documentation][documentation]
- [Guide][guide] ([source][guide-source])
- [discord.js Discord server][discord]
- [GitHub][source]
## Contributing
Before creating an issue, please ensure that it hasn't already been reported/suggested, and double-check the existing guide. See [the contributing guide][contributing] if you'd like to submit a pull request.
## Local Development
To install and run just the guide portion of the repository for development, you can install dependencies with `pnpm --filter guide install` and serve a development version of the guide on localhost with `pnpm dev`.
## Help
If you don't understand something in the documentation, you are experiencing problems, or you just need a gentle nudge in the right direction, please don't hesitate to join our official [discord.js Server][discord].
[website]: https://discord.js.org
[website-source]: https://github.com/discordjs/discord.js/tree/main/apps/website
[documentation]: https://discord.js.org/docs
[guide]: https://discordjs.guide
[guide-source]: https://github.com/discordjs/discord.js/tree/main/apps/guide
[guide-update]: https://discordjs.guide/legacy/additional-info/changes-in-v14
[discord]: https://discord.gg/djs
[source]: https://github.com/discordjs/discord.js/tree/main/apps/guide
[contributing]: https://github.com/discordjs/discord.js/blob/main/.github/CONTRIBUTING.md
================================================
FILE: apps/guide/content/docs/legacy/additional-features/cooldowns.mdx
================================================
---
title: Cooldowns
---
Spam is something you generally want to avoid, especially if one of your commands require calls to other APIs or takes a bit of time to build/send.
<Callout>
This section assumes you followed the [Command Handling](../app-creation/handling-commands) part of the guide.
</Callout>
First, add a cooldown property to your command. This will determine how long the user would have to wait (in seconds) before using the command again.
```js title="commands/utility/ping.js"
const { SlashCommandBuilder } = require('discord.js');
module.exports = {
cooldown: 5, // [!code ++]
data: new SlashCommandBuilder().setName('ping').setDescription('Replies with Pong!'),
async execute(interaction) {
// ...
},
};
```
In your main file, initialize a [Collection](../additional-info/collections) to store cooldowns of commands:
```js
client.cooldowns = new Collection();
```
The key will be the command names, and the values will be Collections associating the user's id (key) to the last time (value) this user used this command. Overall the logical path to get a user's last usage of a command will be `cooldowns > command > user > timestamp`.
In your `InteractionCreate` event handler, add the following code:
```js title="index.js / interactionCreate.js (if you followed the event handler section)"
// ...
// [!code ++:14]
const { cooldowns } = interaction.client;
if (!cooldowns.has(command.data.name)) {
cooldowns.set(command.data.name, new Collection());
}
const now = Date.now();
const timestamps = cooldowns.get(command.data.name);
const defaultCooldownDuration = 3;
const cooldownAmount = (command.cooldown ?? defaultCooldownDuration) * 1_000;
if (timestamps.has(interaction.user.id)) {
// ...
}
```
You check if the `cooldowns` Collection already has an entry for the command being used. If this is not the case, you can add a new entry, where the value is initialized as an empty Collection. Next, create the following variables:
1. `now`: The current timestamp.
2. `timestamps`: A reference to the Collection of user ids and timestamp key/value pairs for the triggered command.
3. `cooldownAmount`: The specified cooldown for the command, converted to milliseconds for straightforward calculation. If none is specified, this defaults to three seconds.
If the user has already used this command in this session, get the timestamp, calculate the expiration time, and inform the user of the amount of time they need to wait before using this command again. Note the use of the `return` statement here, causing the code below this snippet to execute only if the user has not used this command in this session or the wait has already expired.
Continuing with your current setup, this is the complete `if` statement:
```js title="index.js / interactionCreate.js (if you followed the event handler section)"
const defaultCooldownDuration = 3;
const cooldownAmount = (command.cooldown ?? defaultCooldownDuration) * 1_000;
// [!code focus:13]
if (timestamps.has(interaction.user.id)) {
// ... // [!code --]
// [!code ++:9]
const expirationTime = timestamps.get(interaction.user.id) + cooldownAmount;
if (now < expirationTime) {
const expiredTimestamp = Math.round(expirationTime / 1_000);
return interaction.reply({
content: `Please wait, you are on a cooldown for \`${command.data.name}\`. You can use it again <t:${expiredTimestamp}:R>.`,
flags: MessageFlags.Ephemeral,
});
}
}
```
Since the `timestamps` Collection has the user's id as the key, you can use the `get()` method on it to get the value and sum it up with the `cooldownAmount` variable to get the correct expiration timestamp and further check to see if it's expired or not.
The previous user check serves as a precaution in case the user leaves the guild. You can now use the `setTimeout` method, which will allow you to execute a function after a specified amount of time and remove the timeout.
```js
// [!code focus]
if (timestamps.has(interaction.user.id)) {
const expiredTimestamp = Math.round(expirationTime / 1_000);
return interaction.reply({
content: `Please wait, you are on a cooldown for \`${command.data.name}\`. You can use it again <t:${expiredTimestamp}:R>.`,
flags: MessageFlags.Ephemeral,
});
} // [!code focus]
// [!code ++:2] [!code focus:2]
timestamps.set(interaction.user.id, now);
setTimeout(() => timestamps.delete(interaction.user.id), cooldownAmount);
```
This line causes the entry for the user under the specified command to be deleted after the command's cooldown time has expired for them.
================================================
FILE: apps/guide/content/docs/legacy/additional-features/meta.json
================================================
{
"title": "Additional Features"
}
================================================
FILE: apps/guide/content/docs/legacy/additional-features/reloading-commands.mdx
================================================
---
title: Reloading Commands
---
When writing your commands, you may find it tedious to restart your bot every time for testing the smallest changes. With a command handler, you can eliminate this issue and reload your commands while your bot is running.
<Callout>
ESM does not support require and clearing import cache. You can use [hot-esm](https://www.npmjs.com/package/hot-esm)
to import files without cache. Windows support is experimental per [this
issue](https://github.com/vinsonchuong/hot-esm/issues/33).
</Callout>
<Callout>
This section assumes you followed the [Command Handling](../app-creation/handling-commands) part of the guide.
</Callout>
```js title="commands/utility/reload.js"
const { SlashCommandBuilder } = require('discord.js');
module.exports = {
data: new SlashCommandBuilder()
.setName('reload')
.setDescription('Reloads a command.')
.addStringOption((option) => option.setName('command').setDescription('The command to reload.').setRequired(true)),
async execute(interaction) {
// ...
},
};
```
First off, you need to check if the command you want to reload exists. You can do this check similarly to getting a command.
```js
module.exports = {
// ...
// [!code focus:10]
async execute(interaction) {
// ... // [!code --]
// [!code ++:6]
const commandName = interaction.options.getString('command', true).toLowerCase();
const command = interaction.client.commands.get(commandName);
if (!command) {
return interaction.reply(`There is no command with name \`${commandName}\`!`);
}
},
};
```
<Callout type="warn">
The reload command ideally should not be used by every user. You should deploy it as a guild command in a private
guild.
</Callout>
To build the correct file path, you will need the file name. You can use `command.data.name` for doing that.
In theory, all there is to do is delete the previous command from `client.commands` and require the file again. In practice, you cannot do this easily as `require()` caches the file. If you were to require it again, you would load the previously cached file without any changes. You first need to delete the file from `require.cache`, and only then should you require and set the command file to `client.commands`:
```js
delete require.cache[require.resolve(`./${command.data.name}.js`)];
try {
const newCommand = require(`./${command.data.name}.js`);
interaction.client.commands.set(newCommand.data.name, newCommand);
await interaction.reply(`Command \`${newCommand.data.name}\` was reloaded!`);
} catch (error) {
console.error(error);
await interaction.reply(
`There was an error while reloading a command \`${command.data.name}\`:\n\`${error.message}\``,
);
}
```
The snippet above uses a `try...catch` block to load the command file and add it to `client.commands`. In case of an error, it will log the full error to the console and notify the user about it with the error's message component `error.message`. Note that you never actually delete the command from the commands Collection and instead overwrite it. This behavior prevents you from deleting a command and ending up with no command at all after a failed `require()` call, as each use of the reload command checks that Collection again.
================================================
FILE: apps/guide/content/docs/legacy/additional-info/async-await.mdx
================================================
---
title: Understanding async/await
---
If you aren't very familiar with ECMAScript 2017, you may not know about async/await. It's a useful way to handle Promises in a hoisted manner. It's also slightly faster and increases overall readability.
## How do Promises work?
Before we can get into async/await, you should know what Promises are and how they work because async/await is just a way to handle Promises. If you know what Promises are and how to deal with them, you can skip this part.
Promises are a way to handle asynchronous tasks in JavaScript; they are the newer alternative to callbacks. A Promise has many similarities to a progress bar; they represent an unfinished and ongoing process. An excellent example of this is a request to a server (e.g., discord.js sends requests to Discord's API).
A Promise can have three states; pending, resolved, and rejected.
- The **pending** state means that the Promise still is ongoing and neither resolved nor rejected.
- The **resolved** state means that the Promise is done and executed without any errors.
- The **rejected** state means that the Promise encountered an error and could not execute correctly.
One important thing to know is that a Promise can only have one state simultaneously; it can never be pending and resolved, rejected and resolved, or pending and rejected. You may be asking, "How would that look in code?". Here is a small example:
<Callout>
This example uses ES6 code. If you do not know what that is, you should read up on that [here](./es6-syntax).
</Callout>
```js
function deleteMessages(amount) {
// [!code word:Promise]
return new Promise((resolve, reject) => {
if (amount > 10) return reject(new Error("You can't delete more than 10 Messages at a time."));
setTimeout(() => resolve('Deleted 10 messages.'), 2_000);
});
}
deleteMessages(5)
// [!code word:then]
.then((value) => {
// `deleteMessages` is complete and has not encountered any errors
// the resolved value will be the string "Deleted 10 messages"
})
// [!code word:catch]
.catch((error) => {
// `deleteMessages` encountered an error
// the error will be an Error Object
});
```
In this scenario, the `deleteMessages` function returns a Promise. The `.then()` method will trigger if the Promise resolves, and the `.catch()` method if the Promise rejects. In the `deleteMessages` function, the Promise is resolved after 2 seconds with the string "Deleted 10 messages.", so the `.catch()` method will never be executed. You can also pass the `.catch()` function as the second parameter of `.then()`.
## How to implement async/await
### Theory
The following information is essential to know before working with async/await. You can only use the `await` keyword inside a function declared as `async` (you put the `async` keyword before the `function` keyword or before the parameters when using a callback function).
A simple example would be:
```js
// [!code word:async]
async function declaredAsAsync() {
// ...
}
```
or
```js
// [!code word:async]
const declaredAsAsync = async () => {
// ...
};
```
You can use that as well if you use the arrow function as an event listener.
```js
client.on('event', async (first, last) => {
// ...
});
```
An important thing to know is that a function declared as `async` will always return a Promise. In addition to this, if you return something, the Promise will resolve with that value, and if you throw an error, it will reject the Promise with that error.
### Execution with discord.js code
Now that you know how Promises work and what they are used for, let's look at an example that handles multiple Promises. Let's say you want to react with letters (regional indicators) in a specific order. For this example, here's a basic template for a discord.js bot with some ES6 adjustments.
```js title="promise-example.js" lineNumbers
const { Client, Events, GatewayIntentBits } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once(Events.ClientReady, () => {
console.log('I am ready!');
});
client.on(Events.InteractionCreate, (interaction) => {
if (!interaction.isChatInputCommand()) return;
if (interaction.commandName === 'react') {
// ...
}
});
client.login('your-token-goes-here');
```
If you don't know how Node.js asynchronous execution works, you would probably try something like this:
```js title="promise-example.js" lineNumbers=9
client.on(Events.InteractionCreate, (interaction) => {
// ...
// [!code focus:7]
if (commandName === 'react') {
const response = interaction.reply({ content: 'Reacting!', withResponse: true }); // [!code ++:5]
const { message } = response.resource;
message.react('🇦');
message.react('🇧');
message.react('🇨');
}
});
```
But since all of these methods are started at the same time, it would just be a race to which server request finished first, so there would be no guarantee that it would react at all (if the message isn't fetched) or in the order you wanted it to. In order to make sure it reacts after the message is sent and in order (a, b, c), you'd need to use the `.then()` callback from the Promises that these methods return. The code would look like this:
```js title="promise-example.js" lineNumbers=9
client.on(Events.InteractionCreate, (interaction) => {
// ...
if (commandName === 'react') {
interaction.reply({ content: 'Reacting!', withResponse: true }).then((response) => {
const { message } = response.resource;
message.react('🇦'); // [!code --:3]
message.react('🇧');
message.react('🇨');
message // [!code ++:7]
.react('🇦')
.then(() => message.react('🇧'))
.then(() => message.react('🇨'))
.catch((error) => {
// handle failure of any Promise rejection inside here
});
});
}
});
```
In this piece of code, the Promises are [chain resolved](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise/then#Chaining) with each other, and if one of the Promises gets rejected, the function passed to `.catch()` gets called. Here's the same code but with async/await:
```js title="promise-example.js" lineNumbers=9
client.on(Events.InteractionCreate, async (interaction) => {
// ...
if (commandName === 'react') {
const response = await interaction.reply({ content: 'Reacting!', withResponse: true });
const { message } = response.resource;
message.react('🇦'); // [!code --:3]
message.react('🇧');
message.react('🇨');
await message.react('🇦'); // [!code ++:3]
await message.react('🇧');
await message.react('🇨');
}
});
```
It's mostly the same code, but how would you catch Promise rejections now since `.catch()` isn't there anymore? That is also a useful feature with async/await; the error will be thrown if you await it so that you can wrap the awaited Promises inside a try/catch, and you're good to go.
```js title="promise-example.js" lineNumbers=9
client.on(Events.InteractionCreate, async (interaction) => {
if (commandName === 'react') {
// [!code ++]
try {
const response = await interaction.reply({ content: 'Reacting!', withResponse: true });
const { message } = response.resource;
await message.react('🇦');
await message.react('🇧');
await message.react('🇨');
// [!code ++:3]
} catch (error) {
// handle failure of any Promise rejection inside here
}
}
});
```
This code looks clean and is also easy to read.
So you may be asking, "How would I get the value the Promise resolved with?".
Let's look at an example where you want to delete a sent reply.
```js title="promise-example.js"
client.on(Events.InteractionCreate, (interaction) => {
// ...
if (commandName === 'delete') {
interaction
.reply({ content: 'This message will be deleted.', withResponse: true })
.then((response) => setTimeout(() => response.resource.message.delete(), 10_000)) // [!code word:response]
.catch((error) => {
// handle error
});
}
});
```
The return value of a `.reply()` with the `withResponse` option set to `true` is a promise which resolves with `InteractionCallbackResponse`, but how would the same code with async/await look?
```js title="promise-example.js"
client.on(Events.InteractionCreate, async (interaction) => {
if (commandName === 'delete') {
try {
const response = await interaction.reply({ content: 'This message will be deleted.', withResponse: true }); // [!code word:response]
setTimeout(() => response.resource.message.delete(), 10_000);
} catch (error) {
// handle error
}
}
});
```
With async/await, you can assign the awaited function to a variable representing the returned value. Now you know how you use async/await.
================================================
FILE: apps/guide/content/docs/legacy/additional-info/changes-in-v14.mdx
================================================
---
title: Updating to v14
---
## Before you start
Make sure you're using the latest LTS version of Node. To check your Node version, use `node -v` in your terminal or command prompt, and if it's not high enough, update it! There are many resources online to help you with this step based on your host system.
### Various packages are now included in v14
If you previously had `@discordjs/builders`, `@discordjs/formatters`, `@discordjs/rest`, or `discord-api-types` manually installed, it's _highly_ recommended that you uninstall the packages to avoid package version conflicts.
```sh tab="npm"
npm uninstall @discordjs/builders @discordjs/formatters @discordjs/rest discord-api-types
```
```sh tab="yarn"
yarn remove @discordjs/builders @discordjs/formatters @discordjs/rest discord-api-types
```
```sh tab="pnpm"
pnpm remove @discordjs/builders @discordjs/formatters @discordjs/rest discord-api-types
```
## Breaking Changes
### API version
discord.js v14 makes the switch to Discord API v10!
### Common Breakages
### Enum Values
Any areas that used to accept a `string` or `number` type for an enum parameter will now only accept exclusively `number`s.
In addition, the old enums exported by discord.js v13 and lower are replaced with new enums from [discord-api-types](https://discord-api-types.dev/api/discord-api-types-v10).
#### New enum differences
Most of the difference between enums from discord.js and discord-api-types can be summarized as so:
1. Enums are singular, i.e., `ApplicationCommandOptionTypes` -> `ApplicationCommandOptionType`
2. Enums that are prefixed with `Message` no longer have the `Message` prefix, i.e., `MessageButtonStyles` -> `ButtonStyle`
3. Enum values are `PascalCase` rather than `SCREAMING_SNAKE_CASE`, i.e., `.CHAT_INPUT` -> `.ChatInput`
<Callout>
You might be inclined to use raw `number`s (most commonly referred to as [magic numbers](<https://en.wikipedia.org/wiki/Magic_number_(programming)>)) instead of enum values. This is highly discouraged. Enums provide more readability and are more resistant to changes in the API. Magic numbers can obscure the meaning of your code in many ways, check out this [blog post](https://blog.webdevsimplified.com/2020-02/magic-numbers/) if you want more context on as to why they shouldn't be used.
</Callout>
#### Common enum breakages
Areas like `Client` initialization, JSON slash commands and JSON message components will likely need to be modified to accommodate these changes:
##### Common Client Initialization Changes
```js
const { Client, Intents } = require('discord.js'); // [!code --]
const { Client, GatewayIntentBits, Partials } = require('discord.js'); // [!code ++]
const client = new Client({ intents: [Intents.FLAGS.GUILDS], partials: ['CHANNEL'] }); // [!code --]
const client = new Client({ intents: [GatewayIntentBits.Guilds], partials: [Partials.Channel] }); // [!code ++]
```
##### Common Application Command Data changes
```js
const { ApplicationCommandType, ApplicationCommandOptionType } = require('discord.js'); // [!code ++]
const command = {
name: 'ping',
type: 'CHAT_INPUT', // [!code --]
type: ApplicationCommandType.ChatInput, // [!code ++]
options: [
{
name: 'option',
description: 'A sample option',
type: 'STRING', // [!code --]
type: ApplicationCommandOptionType.String, // [!code ++]
},
],
};
```
##### Common Button Data changes
```js
const { ButtonStyle } = require('discord.js'); // [!code ++]
const button = {
label: 'test',
style: 'PRIMARY', // [!code --]
style: ButtonStyle.Primary, // [!code ++]
customId: '1234',
};
```
### Removal of method-based type guards
#### Channels
Some channel type guard methods that narrowed to one channel type have been removed. Instead compare the `type` property against a [ChannelType](https://discord-api-types.dev/api/discord-api-types-v10/enum/ChannelType) enum member to narrow channels.
```js
const { ChannelType } = require('discord.js'); // [!code ++]
channel.isText(); // [!code --]
channel.type === ChannelType.GuildText; // [!code ++]
channel.isVoice(); // [!code --]
channel.type === ChannelType.GuildVoice; // [!code ++]
channel.isDM(); // [!code --]
channel.type === ChannelType.DM; // [!code ++]
```
### Builders
Builders are no longer returned by the API like they were previously. For example you send the API an `EmbedBuilder` but you receive an `Embed` of the same data from the API. This may affect how your code handles received structures such as components. Refer to [message component changes section](#messagecomponent) for more details.
Added `disableValidators()` and `enableValidators()` as top-level exports which disable or enable validation (enabled by default).
### Consolidation of `create()` & `edit()` parameters
Various `create()` and `edit()` methods on managers and objects have had their parameters consolidated. The changes are below:
- `Guild#edit()` now takes `reason` in the `data` parameter
- `GuildChannel#edit()` now takes `reason` in the `data` parameter
- `GuildEmoji#edit()` now takes `reason` in the `data` parameter
- `Role#edit()` now takes `reason` in the `data` parameter
- `Sticker#edit()` now takes `reason` in the `data` parameter
- `ThreadChannel#edit()` now takes `reason` in the `data` parameter
- `GuildChannelManager#create()` now takes `name` in the `options` parameter
- `GuildChannelManager#createWebhook()` (and other text-based channels) now takes `channel` and `name` in the `options` parameter
- `GuildChannelManager#edit()` now takes `reason` as a part of `data`
- `GuildEmojiManager#edit()` now takes `reason` as a part of `data`
- `GuildManager#create()` now takes `name` as a part of `options`
- `GuildMemberManager#edit()` now takes `reason` as a part of `data`
- `GuildMember#edit()` now takes `reason` as a part of `data`
- `GuildStickerManager#edit()` now takes `reason` as a part of `data`
- `RoleManager#edit()` now takes `reason` as a part of `options`
- `Webhook#edit()` now takes `reason` as a part of `options`
- `GuildEmojiManager#create()` now takes `attachment` and `name` as a part of `options`
- `GuildStickerManager#create()` now takes `file`, `name`, and `tags` as a part of `options`
### Activity
The following properties have been removed as they are not documented by Discord:
- `Activity#id`
- `Activity#platform`
- `Activity#sessionId`
- `Activity#syncId`
### Application
`Application#fetchAssets()` has been removed as it is no longer supported by the API.
### BitField
- BitField constituents now have a `BitField` suffix to avoid naming conflicts with the enum names:
```js
new Permissions(); // [!code --]
new PermissionsBitField(); // [!code ++]
new MessageFlags(); // [!code --]
new MessageFlagsBitField(); // [!code ++]
new ThreadMemberFlags(); // [!code --]
new ThreadMemberFlagsBitField(); // [!code ++]
new UserFlags(); // [!code --]
new UserFlagsBitField(); // [!code ++]
new SystemChannelFlags(); // [!code --]
new SystemChannelFlagsBitField(); // [!code ++]
new ApplicationFlags(); // [!code --]
new ApplicationFlagsBitField(); // [!code ++]
new Intents(); // [!code --]
new IntentsBitField(); // [!code ++]
new ActivityFlags(); // [!code --]
new ActivityFlagsBitField(); // [!code ++]
```
- `#FLAGS` has been renamed to `#Flags`
### CDN
The methods that return CDN URLs have changed. Here is an example on a User:
```js
const url = user.displayAvatarURL({ dynamic: true, format: 'png', size: 1_024 }); // [!code --]
const url = user.displayAvatarURL({ extension: 'png', size: 1_024 }); // [!code ++]
```
Dynamic URLs use `ImageURLOptions` and static URLs use `BaseImageURLOptions`. Since dynamic URLs are returned by default, this option has been renamed to `forceStatic` which forces the return of a static URL. Additionally, `format` has been renamed to `extension`.
### CategoryChannel
`CategoryChannel#children` is no longer a `Collection` of channels the category contains. It is now a manager (`CategoryChannelChildManager`). This also means `CategoryChannel#createChannel()` has been moved to the `CategoryChannelChildManager`.
### Channel
The following type guards have been removed:
- `Channel#isText()`
- `Channel#isVoice()`
- `Channel#isDirectory()`
- `Channel#isDM()`
- `Channel#isGroupDM()`
- `Channel#isCategory()`
- `Channel#isNews()`
Refer to [this section](#channels) for more context.
The base channel class is now `BaseChannel`.
### Client
The `restWsBridgeTimeout` client option has been removed.
### CommandInteractionOptionResolver
`CommandInteractionOptionResolver#getMember()` no longer has a parameter for `required`. See [this pull request](https://github.com/discordjs/discord.js/pull/7188) for more information.
### Constants
- Many constant objects and key arrays are now top-level exports for example:
```js
const { Constants } = require('discord.js'); // [!code --]
const { Colors } = Constants; // [!code --]
const { Colors } = require('discord.js'); // [!code ++]
```
- The refactored constants structures have `PascalCase` member names as opposed to `SCREAMING_SNAKE_CASE` member names.
- Many of the exported constants structures have been replaced and renamed:
```js
Opcodes; // [!code --]
GatewayOpcodes; // [!code ++]
WSEvents; // [!code --]
GatewayDispatchEvents; // [!code ++]
WSCodes; // [!code --]
GatewayCloseCodes; // [!code ++]
InviteScopes; // [!code --]
OAuth2Scopes; // [!code ++]
```
### Events
The `message` and `interaction` events are now removed. Use `messageCreate` and `interactionCreate` instead.
`applicationCommandCreate`, `applicationCommandDelete` and `applicationCommandUpdate` have all been removed. See [this pull request](https://github.com/discordjs/discord.js/pull/6492) for more information.
The `threadMembersUpdate` event now emits the users who were added, the users who were removed, and the thread respectively.
### GuildBanManager
Developers should utilise `deleteMessageSeconds` instead of `days` and `deleteMessageDays`:
```js
<GuildBanManager>.create('123456789', {
days: 3 // [!code --]
deleteMessageDays: 3 // [!code --]
deleteMessageSeconds: 3 * 24 * 60 * 60 // [!code ++]
});
```
`deleteMessageDays` (introduced with version 14) and `days` are both deprecated and will be removed in the future.
### Guild
`Guild#setRolePositions()` and `Guild#setChannelPositions()` have been removed. Use `RoleManager#setPositions()` and `GuildChannelManager#setPositions()` instead respectively.
`Guild#maximumPresences` no longer has a default value of 25,000.
`Guild#me` has been moved to `GuildMemberManager#me`. See [this pull request](https://github.com/discordjs/discord.js/pull/7669) for more information.
### GuildAuditLogs & GuildAuditLogsEntry
`GuildAuditLogs.build()` has been removed as it has been deemed defunct. There is no alternative.
The following properties & methods have been moved to the `GuildAuditLogsEntry` class:
- `GuildAuditLogs.Targets`
- `GuildAuditLogs.actionType()`
- `GuildAuditLogs.targetType()`
### GuildMember
`GuildMember#pending` is now nullable to account for partial guild members. See [this issue](https://github.com/discordjs/discord.js/issues/6546) for more information.
### IntegrationApplication
`IntegrationApplication#summary` has been removed as it is no longer supported by the API.
### Interaction
Whenever an interaction is replied to and one fetches the reply, it could possibly give an `APIMessage` if the guild was not cached. However, interaction replies now always return an `InteractionCallbackResponse` with `withResponse` set to `true`.
The base interaction class is now `BaseInteraction`.
### Invite
`Invite#inviter` is now a getter and resolves structures from the cache.
### MessageAttachment
`MessageAttachment` has now been renamed to `AttachmentBuilder`. // [!code --]
```js
new MessageAttachment(buffer, 'image.png'); // [!code --]
new AttachmentBuilder(buffer, { name: 'image.png' }); // [!code ++]
```
### MessageComponent
- MessageComponents have been renamed as well. They no longer have the `Message` prefix, and now have a `Builder` suffix:
```js
const button = new MessageButton(); // [!code --]
const button = new ButtonBuilder(); // [!code ++]
const selectMenu = new MessageSelectMenu(); // [!code --]
const selectMenu = new StringSelectMenuBuilder(); // [!code ++]
const actionRow = new MessageActionRow(); // [!code --]
const actionRow = new ActionRowBuilder(); // [!code ++]
const textInput = new TextInputComponent(); // [!code --]
const textInput = new TextInputBuilder(); // [!code ++]
```
- Components received from the API are no longer directly mutable. If you wish to mutate a component from the API, use `ComponentBuilder#from`. For example, if you want to make a button mutable:
```js
const editedButton = receivedButton // [!code --]
.setDisabled(true); // [!code --]
const { ButtonBuilder } = require('discord.js'); // [!code ++]
const editedButton = ButtonBuilder.from(receivedButton) // [!code ++]
.setDisabled(true); // [!code ++]
```
### MessageManager
`MessageManager#fetch()`'s second parameter has been removed. The `BaseFetchOptions` the second parameter once was is now merged into the first parameter.
```js
messageManager.fetch('1234567890', { cache: false, force: true }); // [!code --]
messageManager.fetch({ message: '1234567890', cache: false, force: true }); // [!code ++]
```
### MessageSelectMenu
- `MessageSelectMenu` has been renamed to `StringSelectMenuBuilder`
- `StringSelectMenuBuilder#addOption()` has been removed. Use `StringSelectMenuBuilder#addOptions()` instead.
### MessageEmbed
- `MessageEmbed` has now been renamed to `EmbedBuilder`.
- `EmbedBuilder#setAuthor()` now accepts a sole `EmbedAuthorOptions` object.
- `EmbedBuilder#setFooter()` now accepts a sole `EmbedFooterOptions` object.
- `EmbedBuilder#addField()` has been removed. Use `EmbedBuilder#addFields()` instead.
```js
new MessageEmbed().addField('Inline field title', 'Some value here', true); // [!code --]
new EmbedBuilder().addFields([ // [!code ++]
{ name: 'one', value: 'one', inline: true }, // [!code ++]
{ name: 'two', value: 'two', inline: true }, // [!code ++]
+]);
```
### Modal
- `Modal` has been renamed as well and now has a `Builder` suffix:
```js
const modal = new Modal(); // [!code --]
const modal = new ModalBuilder(); // [!code ++]
```
### PartialTypes
The `PartialTypes` string array has been removed. Use the `Partials` enum instead.
In addition to this, there is now a new partial: `Partials.ThreadMember`.
### Permissions
Thread permissions `USE_PUBLIC_THREADS` and `USE_PRIVATE_THREADS` have been removed as they are deprecated in the API. Use `CREATE_PUBLIC_THREADS` and `CREATE_PRIVATE_THREADS` respectively.
`ManageEmojisAndStickers` has been deprecated due to API changes. Its replacement is `ManageGuildExpressions`. See [this pull request](https://github.com/discord/discord-api-docs/pull/6017) for more information.
### PermissionOverwritesManager
Overwrites are now keyed by the `PascalCase` permission key rather than the `SCREAMING_SNAKE_CASE` permission key.
### REST Events
#### apiRequest
This REST event has been removed as discord.js now uses [Undici](https://github.com/nodejs/undici) as the underlying request handler. You must now use a [Diagnostics Channel](https://undici.nodejs.org/#/docs/api/DiagnosticsChannel). Here is a simple example:
```js
import diagnosticsChannel from 'node:diagnostics_channel';
diagnosticsChannel.channel('undici:request:create').subscribe((data) => {
// If you use TypeScript, `data` may be casted as
// `DiagnosticsChannel.RequestCreateMessage`
// from Undici to receive type definitions.
const { request } = data;
console.log(request.method); // Log the method
console.log(request.path); // Log the path
console.log(request.headers); // Log the headers
console.log(request); // Or just log everything!
});
```
You can find further examples at the [Undici Diagnostics Channel documentation](https://undici.nodejs.org/#/docs/api/DiagnosticsChannel).
#### apiResponse
This REST event has been renamed to `response` and moved to `Client#rest`:
```js
client.on('apiResponse', ...); // [!code --]
client.rest.on('response', ...); // [!code ++]
```
#### invalidRequestWarning
This REST event has been moved to `Client#rest`:
```js
client.on('invalidRequestWarning', ...); // [!code --]
client.rest.on('invalidRequestWarning', ...); // [!code ++]
```
#### rateLimit
This REST event has been renamed to `rateLimited` and moved to `Client#rest`:
```js
client.on('rateLimit', ...); // [!code --]
client.rest.on('rateLimited', ...); // [!code ++]
```
### RoleManager
`Role.comparePositions()` has been removed. Use `RoleManager#comparePositions()` instead.
### Sticker
`Sticker#tags` is now a nullable string (`string | null`). Previously, it was a nullable array of strings (`string[] | null`). See [this pull request](https://github.com/discordjs/discord.js/pull/8010) for more information.
### ThreadChannel
The `MAX` helper used in `ThreadAutoArchiveDuration` has been removed. Discord has since allowed any guild to use any auto archive time which makes this helper redundant.
### ThreadMemberManager
`ThreadMemberManager#fetch()`'s second parameter has been removed. The `BaseFetchOptions` the second parameter once was is now merged into the first parameter. In addition, the boolean helper to specify `cache` has been removed.
Usage is now as follows:
```js
// The second parameter is merged into the first parameter.
threadMemberManager.fetch('1234567890', { cache: false, force: true }); // [!code --]
threadMemberManager.fetch({ member: '1234567890', cache: false, force: true }); // [!code ++]
// The lone boolean has been removed. One must be explicit here.
threadMemberManager.fetch(false); // [!code --]
threadMemberManager.fetch({ cache: false }); // [!code ++]
```
### Util
`Util.removeMentions()` has been removed. To control mentions, you should use `allowedMentions` on `BaseMessageOptions` instead.
`Util.splitMessage()` has been removed. This utility method is something the developer themselves should do.
`Util.resolveAutoArchiveMaxLimit()` has been removed. Discord has since allowed any guild to use any auto archive time which makes this method redundant.
Other functions in `Util` have been moved to top-level exports so you can directly import them from `discord.js`.
```js
import { Util } from 'discord.js'; // [!code --]
Util.escapeMarkdown(message); // [!code --]
import { escapeMarkdown } from 'discord.js'; // [!code ++]
escapeMarkdown(message); // [!code ++]
```
### `.deleted` Field(s) have been removed
You can no longer use the `deleted` property to check if a structure was deleted. See [this issue](https://github.com/discordjs/discord.js/issues/7091) for more information.
### VoiceChannel
`VoiceChannel#editable` has been removed. You should use `GuildChannel#manageable` instead.
### VoiceRegion
`VoiceRegion#vip` has been removed as it is no longer part of the API.
### Webhook
`Webhook#fetchMessage()`'s second parameter no longer allows a boolean to be passed. The `cache` option in `WebhookFetchMessageOptions` should be used instead.
## Features
### ApplicationCommand
NSFW commands are supported.
### Attachment
Added support for voice message metadata fields.
### AutocompleteInteraction
`AutocompleteInteraction#commandGuildId` has been added which is the id of the guild the invoked application command is registered to.
### BaseChannel
Added support for `BaseChannel#flags`.
Store channels have been removed as they are no longer part of the API.
`BaseChannel#url` has been added which is a link to a channel, just like in the client.
Additionally, new typeguards have been added:
- `BaseChannel#isDMBased()`
- `BaseChannel#isTextBased()`
- `BaseChannel#isVoiceBased()`
### BaseInteraction
Added `BaseInteraction#isRepliable()` to check whether a given interaction can be replied to.
### ClientApplication
Added support for role connection metadata.
### Collection
- Added `Collection#merge()` and `Collection#combineEntries()`.
- New type: `ReadonlyCollection` which indicates an immutable `Collection`.
### Collector
A new `ignore` event has been added which is emitted whenever an element is not collected by the collector.
Component collector options now use the `ComponentType` enum values:
```js
const { ComponentType } = require('discord.js'); // [!code ++]
const collector = interaction.channel.createMessageComponentCollector({
filter: collectorFilter,
componentType: 'BUTTON', // [!code --]
componentType: ComponentType.Button, // [!code ++]
time: 20_000,
});
```
### CommandInteraction
`CommandInteraction#commandGuildId` has been added which is the id of the guild the invoked application command is registered to.
### CommandInteractionOptionResolver
`CommandInteractionOptionResolver#getChannel()` now has a third parameter which narrows the channel type.
### Events
Added support for `guildAuditLogEntryCreate` event.
### ForumChannel
Added support for forum channels.
Added support for `ForumChannel#defaultForumLayout`.
### Guild
Added `Guild#setMFALevel()` which sets the guild's MFA level.
Added `Guild#maxVideoChannelUsers` which indicates the maximum number of video channel users.
Added `Guild#maxStageVideoChannelUsers` which indicates the maximum number of video channel users for stage channels.
Added `Guild#disableInvites()` which disables the guild's invites.
Added support for the `after` parameter in `Guild#fetchAuditLogs()`.
### GuildChannelManager
`videoQualityMode` may be used whilst creating a channel to initially set the camera video quality mode.
### GuildEmojiManager
Added `GuildEmojiManager#delete()` and `GuildEmojiManager#edit()` for managing existing guild emojis.
### GuildForumThreadManager
Added `GuildForumThreadManager` as manager for threads in forum channels.
### GuildMember
Added support for `GuildMember#flags`.
### GuildMembersChunk
This object now supports the `GuildMembersChunk#notFound` property.
### GuildMemberManager
Added `GuildMemberManager#fetchMe()` to fetch the client user in the guild.
Added `GuildMemberManager#addRole()` and `GuildMemberManager#removeRole()`. These methods allow a single addition or removal of a role respectively to a guild member, even if uncached.
### GuildTextThreadManager
Added `GuildTextThreadManager` as manager for threads in text channels and announcement channels.
### Message
`Message#position` has been added as an approximate position in a thread.
Added support for role subscription data.
### MessageReaction
Added `MessageReaction#react()` to make the client user react with the reaction the class belongs to.
### Role
Added support for role subscriptions.
Added support for `Role#tags#guildConnections`.
### StageChannel
Stage channels now allow messages to be sent in them, much like voice channels.
### Sticker
Added support for GIF stickers.
### ThreadMemberManager
The new `withMember` options returns the associated guild member with the thread member.
When fetching multiple thread members alongside `withMember`, paginated results will be returned. The `after` and `limit` option are supported in this scenario.
### Webhook
Added `Webhook#applicationId`.
Added the `threadName` property in `Webhook#send()` options which allows a webhook to create a post in a forum channel.
### WebSocketManager
discord.js uses `@discordjs/ws` internally
================================================
FILE: apps/guide/content/docs/legacy/additional-info/collections.mdx
================================================
---
title: Collections
---
discord.js comes with a utility class known as `Collection`.
It extends JavaScript's native `Map` class, so it has all the `Map` features and more!
<Callout type="warn">
If you're not familiar with `Map`, read [MDN's page on
it](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Map) before continuing. You should be
familiar with `Array` [methods](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array) as
well. We will also use some ES6 features, so read up [here](./es6-syntax) if you do not know what they are.
</Callout>
A `Map` allows for an association between unique keys and their values.
For example, how can you transform every value or filter the entries in a `Map` easily?
This is the point of the `Collection` class!
## Array-like Methods
Many of the methods on `Collection` correspond to their namesake in `Array`. One of them is `find`:
```js
// Assume we have an array of users and a collection of the same users.
array.find((u) => u.discriminator === '1000'); // [!code word:find]
collection.find((u) => u.discriminator === '1000');
```
The interface of the callback function is very similar between the two.
For arrays, callbacks usually pass the parameters `(value, index, array)`, where `value` is the value iterated to,
`index` is the current index, and `array` is the array. For collections, you would have `(value, key, collection)`.
Here, `value` is the same, but `key` is the key of the value, and `collection` is the collection itself instead.
Methods that follow this philosophy of staying close to the `Array` interface are as follows:
- `find`
- `filter` - Note that this returns a `Collection` rather than an `Array`.
- `map` - Yet this returns an `Array` of values instead of a `Collection`!
- `every`
- `some`
- `reduce`
- `concat`
- `sort`
## Converting to Array
Since `Collection` extends `Map`, it is an [iterable](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Iteration_protocols), and can be converted to an `Array` through either `Array.from()` or spread syntax (`...collection`).
```js
// For values.
Array.from(collection.values());
[...collection.values()];
// For keys.
Array.from(collection.keys());
[...collection.keys()];
// For [key, value] pairs.
Array.from(collection);
[...collection];
```
<Callout>
Many people convert Collections to Arrays way too much!
This can lead to unnecessary and confusing code. Before you use `Array.from()` or similar, ask yourself if whatever you are trying to do can't be done with the given `Map` or `Collection` methods or with a for-of loop. Not being familiar with a new data structure should not mean you default to transforming it into the other.
There is usually a reason, why a `Map` or `Collection` is used. Most structures in Discord can be identified with an `id`, which lends itself well to `key -> value` associations like in `Map`s.
</Callout>
## Extra Utilities
Some methods are not from `Array` and are instead entirely new to standard JavaScript.
```js
// A random value.
collection.random();
// The first value.
collection.first();
// The first 5 values.
collection.first(5);
// Similar to `first`, but from the end.
collection.last();
collection.last(2);
// Removes anything that meets the condition from the collection.
// Sort of like `filter`, but in-place.
collection.sweep((user) => user.username === 'Bob');
```
A more complicated method is `partition`, which splits a single Collection into two new Collections based on the provided function.
You can think of it as two `filter`s, but done at the same time (and because of that much more performant):
```js
// `bots` is a Collection of users where their `bot` property was true.
// `humans` is a Collection where the property was false instead!
const [bots, humans] = collection.partition((u) => u.bot); // [!code word:partition]
// Both return true.
bots.every((b) => b.bot);
humans.every((h) => !h.bot); // note the "not" ! operator
```
================================================
FILE: apps/guide/content/docs/legacy/additional-info/es6-syntax.mdx
================================================
---
title: ES6 Syntax
---
If you've used JavaScript for only a (relatively) small amount of time or don't have much experience with it, you might not be aware of what ES6 is and what beneficial features it includes. Since this is a guide primarily for Discord bots, we'll be using some discord.js code as an example of what you might have versus what you could do to benefit from ES6.
Here's the startup code we'll be using:
```js title="index.js" lineNumbers
const { Client, Events, GatewayIntentBits } = require('discord.js'); // [!code word:const]
const config = require('./config.json');
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
// [!code word:=>]
client.once(Events.ClientReady, () => {
console.log('Ready!');
});
client.on(Events.InteractionCreate, (interaction) => {
if (!interaction.isChatInputCommand()) return;
const { commandName } = interaction;
if (commandName === 'ping') {
interaction.reply('Pong.');
} else if (commandName === 'beep') {
interaction.reply('Boop.');
} else if (commandName === 'server') {
interaction.reply('Guild name: ' + interaction.guild.name + '\nTotal members: ' + interaction.guild.memberCount);
} else if (commandName === 'user-info') {
interaction.reply('Your username: ' + interaction.user.username + '\nYour ID: ' + interaction.user.id);
}
});
client.login(config.token);
```
If you haven't noticed, this piece of code is already using a bit of ES6 here! The `const` keyword and arrow function declaration (`() => ...`) is ES6 syntax, and we recommend using it whenever possible.
As for the code above, there are a few places where things can be done better. Let's look at them.
## Template literals
If you check the code above, it's currently doing things like `'Guild name: ' + interaction.guild.name` and `'Your username: ' + interaction.user.username`, which is perfectly valid. It is a bit hard to read, though, and it's not too fun to constantly type out. Fortunately, there's a better alternative.
```js title="index.js" lineNumbers=19
} else if (commandName === 'server') {
interaction.reply('Guild name: ' + interaction.guild.name + '\nTotal members: ' + interaction.guild.memberCount); // [!code --]
interaction.reply(`Guild name: ${interaction.guild.name}\nTotal members: ${interaction.guild.memberCount}`); // [!code ++]
}
else if (commandName === 'user-info') {
interaction.reply('Your username: ' + interaction.user.username + '\nYour ID: ' + interaction.user.id); // [!code --]
interaction.reply(`Your username: ${interaction.user.username}\nYour ID: ${interaction.user.id}`); // [!code ++]
}
```
Easier to read and write! The best of both worlds.
### Template literals vs string concatenation
If you've used other programming languages, you might be familiar with the term "string interpolation". Template literals would be JavaScript's implementation of string interpolation. If you're familiar with the heredoc syntax, it's very much like that; it allows for string interpolation, as well as multiline strings.
The example below won't go too much into detail about it, but if you're interested in reading more, you can [read about them on MDN](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals).
```js
const username = 'Sanctuary';
const password = 'pleasedonthackme';
function letsPretendThisDoesSomething() {
return 'Yay for sample data.';
}
console.log('Your username is: **' + username + '**.'); // [!code --:2]
console.log('Your password is: **' + password + '**.');
console.log(`Your username is: **${username}**.`); // [!code ++:2]
console.log(`Your password is: **${password}**.`);
console.log('1 + 1 = ' + (1 + 1)); // [!code --]
console.log(`1 + 1 = ${1 + 1}`); // [!code ++]
console.log("And here's a function call: " + letsPretendThisDoesSomething()); // [!code --]
console.log(`And here's a function call: ${letsPretendThisDoesSomething()}`); // [!code ++]
console.log('Putting strings on new lines\n' + 'can be a bit painful\n' + 'with string concatenation.'); // [!code --]
// [!code ++:5]
console.log(`
Putting strings on new lines
is a breeze
with template literals!
`);
```
<Callout>
As you will notice, template literals will also render the white space inside them, including the indentation! There
are ways around this, which we will discuss in another section.
</Callout>
You can see how it makes things easier and more readable. In some cases, it can even make your code shorter! This one is something you'll want to take advantage of as much as possible.
## Arrow functions
Arrow functions are shorthand for regular functions, with the addition that they use a lexical `this` context inside of their own. If you don't know what the `this` keyword is referring to, don't worry about it; you'll learn more about it as you advance.
Here are some examples of ways you can benefit from arrow functions over regular functions:
```js
// [!code --:3]
client.once(Events.ClientReady, function () {
console.log('Ready!');
});
client.once(Events.ClientReady, () => console.log('Ready!')); // [!code ++]
// [!code --:3]
client.on(Events.TypingStart, function (typing) {
console.log(typing.user.tag + ' started typing in #' + typing.channel.name);
});
client.on(Events.TypingStart, (typing) => console.log(`${typing.user.tag} started typing in #${typing.channel.name}`)); // [!code ++]
// [!code --:3]
client.on(Events.MessageCreate, function (message) {
console.log(message.author.tag + ' sent: ' + message.content);
});
client.on(Events.MessageCreate, (message) => console.log(`${message.author.tag} sent: ${message.content}`)); // [!code ++]
// [!code --:3]
var doubleAge = function (age) {
return 'Your age doubled is: ' + age * 2;
};
const doubleAge = (age) => `Your age doubled is: ${age * 2}`; // [!code ++]
// [!code --:4]
var collectorFilter = function (m) {
return m.content === 'I agree' && !m.author.bot;
};
var collector = message.createMessageCollector({ filter: collectorFilter, time: 15_000 });
const collectorFilter = (m) => m.content === 'I agree' && !m.author.bot; // [!code ++:2]
const collector = message.createMessageCollector({ filter: collectorFilter, time: 15_000 });
```
There are a few important things you should note here:
- The parentheses around function parameters are optional when you have only one parameter but are required otherwise. If you feel like this will confuse you, it may be a good idea to use parentheses.
- You can cleanly put what you need on a single line without curly braces.
- Omitting curly braces will make arrow functions use **implicit return**, but only if you have a single-line expression. The `doubleAge` and `filter` variables are a good example of this.
- Unlike the `function someFunc() { ... }` declaration, arrow functions cannot be used to create functions with such syntax. You can create a variable and give it an anonymous arrow function as the value, though (as seen with the `doubleAge` and `filter` variables).
We won't be covering the lexical `this` scope with arrow functions in here, but you can Google around if you're still curious. Again, if you aren't sure what `this` is or when you need it, reading about lexical `this` first may only confuse you.
## Destructuring
Destructuring is an easy way to extract items from an object or array. If you've never seen the syntax for it before, it can be a bit confusing, but it's straightforward to understand once explained!
### Object destructuring
Here's a common example where object destructuring would come in handy:
```js
const config = require('./config.json');
const prefix = config.prefix;
const token = config.token;
```
This code is a bit verbose and not the most fun to write out each time. Object destructuring simplifies this, making it easier to both read and write. Take a look:
```js
const config = require('./config.json'); // [!code --:3]
const prefix = config.prefix;
const token = config.token;
const { prefix, token } = require('./config.json'); // [!code ++]
```
Object destructuring takes those properties from the object and stores them in variables. If the property doesn't exist, it'll still create a variable but with the value of `undefined`. So instead of using `config.token` in your `client.login()` method, you'd simply use `token`. And since destructuring creates a variable for each item, you don't even need that `const prefix = config.prefix` line. Pretty cool!
Additionally, you could do this for your commands:
```js
client.on(Events.InteractionCreate, (interaction) => {
const { commandName } = interaction;
if (commandName === 'ping') {
// ping command here...
} else if (commandName === 'beep') {
// beep command here...
}
// other commands here...
});
```
The code is shorter and looks cleaner, but it shouldn't be necessary if you follow along with the [command handler](../app-creation/handling-commands) part of the guide.
You can also rename variables when destructuring, if necessary. A good example is when you're extracting a property with a name already being used or conflicts with a reserved keyword. The syntax is as follows:
```js
// `default` is a reserved keyword
const { default: defaultValue } = someObject;
console.log(defaultValue);
// 'Some default value here'
```
### Array destructuring
Array destructuring syntax is very similar to object destructuring, except that you use brackets instead of curly braces. In addition, since you're using it on an array, you destructure the items in the same order the array is. Without array destructuring, this is how you'd extract items from an array:
```js
// assuming we're in a `profile` command and have an `args` variable
const name = args[0];
const age = args[1];
const location = args[2];
```
Like the first example with object destructuring, this is a bit verbose and not fun to write out. Array destructuring eases this pain.
```js
const name = args[0]; // [!code --:3]
const age = args[1];
const location = args[2];
const [name, age, location] = args; // [!code ++]
```
A single line of code that makes things much cleaner! In some cases, you may not even need all the array's items (e.g., when using `string.match(regex)`). Array destructuring still allows you to operate in the same sense.
```js
const [, username, id] = message.content.match(someRegex);
```
In this snippet, we use a comma without providing a name for the item in the array we don't need. You can also give it a placeholder name (`_match` or similar) if you prefer, of course; it's entirely preference at that point.
<Callout>
The underscore `_` prefix is a convention for unused variables. Some lint rules will error or warn if you define
identifiers without using them in your code but ignore identifiers starting with `_`.
</Callout>
## var, let, and const
Since there are many, many articles out there that can explain this part more in-depth, we'll only be giving you a TL;DR and an article link if you choose to read more about it.
1. The `var` keyword is what was (and can still be) used in JavaScript before `let` and `const` came to surface. There are many issues with `var`, though, such as it being function-scoped, hoisting related issues, and allowing redeclaration.
2. The `let` keyword is essentially the new `var`; it addresses many of the issues `var` has, but its most significant factor would be that it's block-scoped and disallows redeclaration (_not_ reassignment).
3. The `const` keyword is for giving variables a constant value that is unable to be reassigned. `const`, like `let`, is also block-scoped.
The general rule of thumb recommended by this guide is to use `const` wherever possible, `let` otherwise, and avoid using `var`. Here's a [helpful article](https://madhatted.com/2016/1/25/let-it-be) if you want to read more about this subject.
================================================
FILE: apps/guide/content/docs/legacy/additional-info/meta.json
================================================
{
"title": "Additional Info",
"pages": ["async-await", "collections", "es6-syntax", "notation", "rest-api", "proxy"]
}
================================================
FILE: apps/guide/content/docs/legacy/additional-info/notation.mdx
================================================
---
title: Understanding Notation
---
Throughout the discord.js docs and when asking for help on the official server, you will run into many different kinds of notations. To help you understand the texts that you read, we will be going over some standard notations.
<Callout>
Always keep in mind that notation is not always rigorous. There will be typos, misunderstandings, or contexts that
will cause notation to differ from the usual meanings.
</Callout>
## Classes
Some common notations refer to a class or the properties, methods, or events of a class. There are many variations on these notations, and they are very flexible depending on the person, so use your best judgment when reading them.
The notation `<Class>` means an instance of the `Class` class. For example, a snippet like `<BaseInteraction>.reply('Hello')` is asking you to replace `<BaseInteraction>` with some value that is an instance of `BaseInteraction`, e.g. `interaction.reply('Hello')`. It could also just be a placeholder, e.g., `<id>` would mean a placeholder for some ID.
The notation `Class#foo` can refer to the `foo` property, method, or event of the `Class` class. Which one the writer meant needs to be determined from context. For example:
- `BaseInteraction#user` means that you should refer to the `user` property on a `BaseInteraction`.
- `TextChannel#send` means that you should refer to the `send` method on a `TextChannel`.
- `Client#interactionCreate` means that you should refer to the `interactionCreate` event on a `Client`.
<Callout>
Remember that this notation is not valid JavaScript; it is a shorthand to refer to a specific piece of code.
</Callout>
Sometimes, the notation is extended, which can help you determine which one the writer meant. For example, `TextChannel#send(options)` is definitely a method of `TextChannel`, since it uses function notation. `Client#event:messageCreate` is an event since it says it is an event.
The vital thing to take away from this notation is that the `#` symbol signifies that the property, method, or event can only be accessed through an instance of the class. Unfortunately, many abuse this notation, e.g., `<Message>#send` or `Util#resolveColor`. `<Message>` is already an instance, so this makes no sense, and `resolveColor` is a static method–you should write it as `Util.resolveColor`. Always refer back to the docs if you are confused.
As an example, the documentation's search feature uses this notation.

Notice the use of the `.` operator for the static method, `Role.comparePositions` and the `#` notation for the method, `Role#comparePositionsTo`.
## Types
In the discord.js docs, there are type signatures everywhere, such as in properties, parameters, or return values. If you do not come from a statically typed language, you may not know what specific notations mean.
The symbol `*` means any type. For example, methods that return `*` mean that they can return anything, and a parameter of type `*` can be anything.
The symbol `?` means that the type is nullable. You can see it before or after the type (e.g. `?T` or `T?`). This symbol means that the value can be of the type `T` or `null`. An example is `GuildMember#nickname`; its type is `?string` since a member may or may not have a nickname.
The expression `T[]` means an array of `T`. You can sometimes see multiple brackets `[]`, indicating that the array is multi-dimensional, e.g., `string[][]`.
The expression `...T` signifies a rest parameter of type `T`. This means that the function can take any amount of arguments, and all those arguments must be of the type `T`.
The operator `|`, which can read as "or", creates a union type, e.g. `A|B|C`. Simply, it means the value can be of any one of the types given.
The angle brackets `<>` are used for generic types or parameterized types, signifying a type that uses another type(s). The notation looks like `A<B>` where `A` is the type and `B` is a type parameter. If this is hard to follow, it is enough to keep in mind that whenever you see `A<B>`, you can think of an `A` containing `B`. Examples:
- `Array<String>` means an array of strings.
- `Promise<User>` means a `Promise` that contains a `User`.
- `Array<Promise<User|GuildMember>>` would be an array of `Promise`s, each containing a `User` or a `GuildMember`.
- `Collection<Snowflake, User>` would be a `Collection`, containing key-value pairs where the keys are `Snowflake`s, and the values are `User`s.

In this piece of the docs, you can see two type signatures, `string`, `MessagePayload`, or `MessageOptions`, and `Promise<(Message|Array<Message>)>`. The meaning of the word "or" here is the same as `|`.
================================================
FILE: apps/guide/content/docs/legacy/additional-info/proxy.mdx
================================================
---
title: Using a Proxy
---
This guide will show you how to set up a proxy with discord.js. This may be necessary if you are deploying your bot to a server with a firewall only allowing outside traffic through the proxy.
Proxying discord.js requires two components: a REST proxy and a WebSocket proxy.
## Prerequisites
To achieve these two components you can utilize the `undici` and `global-agent` packages:
```sh tab="npm"
npm install undici global-agent
```
```sh tab="yarn"
yarn add undici global-agent
```
```sh tab="pnpm"
pnpm add undici global-agent
```
```sh tab="bun"
bun add undici global-agent
```
## Setting up the proxy for REST calls
The `@discordjs/rest` package handling HTTP requests in discord.js uses the `undici` package. Accordingly, you can provide a custom `ProxyAgent` configuration to the client constructor:
```js title="index.js" lineNumbers
const { ProxyAgent } = require('undici'); // [!code word:ProxyAgent]
const { Client } = require('discord.js');
const client = new Client({
// ...other client options
rest: {
agent: new ProxyAgent('http://my-proxy-server:port'),
},
});
client.login('your-token-goes-here');
```
<Callout>
For further information on the `undici` `ProxyAgent`, please refer to the [undici
documentation](https://undici.nodejs.org/#/docs/api/ProxyAgent.md).
</Callout>
## Setting up the proxy for the WebSocket connection
To set up a proxy for WebSocket, you can use the `global-agent` package. You will need to import and call the `bootstrap()` function and set the required `GLOBAL_AGENT` globals as shown below:
```js title="index.js" lineNumbers
const { ProxyAgent } = require('undici');
const { Client } = require('discord.js');
const { bootstrap } = require('global-agent'); // [!code ++:5]
bootstrap(); // [!code word:bootstrap]
global.GLOBAL_AGENT.HTTP_PROXY = 'http://my-proxy-server:port';
global.GLOBAL_AGENT.HTTPS_PROXY = 'https://my-proxy-server:port';
const client = new Client({
// ...other client options
rest: {
agent: new ProxyAgent('http://my-proxy-server:port'),
},
});
client.login('your-token-goes-here');
```
================================================
FILE: apps/guide/content/docs/legacy/additional-info/rest-api.mdx
================================================
---
title: REST APIs
---
REST APIs are extremely popular on the web and allow you to freely grab a site's data if it has an available API over an HTTP connection.
## Making HTTP requests with Node
In these examples, we will be using [undici](https://www.npmjs.com/package/undici), an excellent library for making HTTP requests.
To install undici, run the following command:
```sh tab="npm"
npm i install undici
```
```sh tab="yarn"
yarn add undici
```
```sh tab="pnpm"
pnpm add undici
```
## Skeleton code
To start off, you will be using the following skeleton code. Since both the commands you will be adding in this section require an interaction with external APIs, you will defer the reply, so your application responds with a "thinking..." state. You can then edit the reply once you got the data you need:
```js title="rest-examples.js" lineNumbers
const { Client, EmbedBuilder, Events, GatewayIntentBits } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once(Events.ClientReady, (readyClient) => {
console.log(`Ready! Logged in as ${readyClient.user.tag}`);
});
client.on(Events.InteractionCreate, async (interaction) => {
if (!interaction.isChatInputCommand()) return;
const { commandName } = interaction;
await interaction.deferReply();
// ...
});
client.login('your-token-goes-here');
```
<Callout>
We're taking advantage of [destructuring](./es6-syntax#destructuring) in this tutorial to maintain readability.
</Callout>
## Using undici
Undici is a Promise-based HTTP/1.1 client, written from scratch for Node.js. If you aren't already familiar with Promises, you should read up on them [here](./async-await).
In this tutorial, you will be making a bot with two API-based commands using the [random.cat](https://aws.random.cat) and [Urban Dictionary](https://www.urbandictionary.com) APIs.
On top of your file, import the library function you will be using:
```js
const { request } = require('undici');
```
### Random Cat
<Callout title="No more cats :(" type="error">
Unfortunately, the `aws.random.cat` API doesn't work anymore. We will keep the example as-is until we find a better
showcase!
</Callout>
Random cat's API is available at [https://aws.random.cat/meow](https://aws.random.cat/meow) and returns a [JSON](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/JSON) response. To actually fetch data from the API, you're going to do the following:
```js
const catResult = await request('https://aws.random.cat/meow');
const { file } = await catResult.body.json();
```
If you just add this code, it will seem like nothing happens. What you do not see, is that you are launching a request to the random.cat server, which responds some JSON data. The helper function parses the response data to a JavaScript object you can work with. The object will have a `file` property with the value of a link to a random cat image.
Next, you will implement this approach into an application command:
```js
client.on(Events.InteractionCreate, async (interaction) => {
// ...
if (commandName === 'cat') {
const catResult = await request('https://aws.random.cat/meow');
const { file } = await catResult.body.json();
interaction.editReply({ files: [file] });
}
});
```
So, here's what's happening in this code:
1. Your application sends a `GET` request to random.cat.
2. random.cat sees the request and gets a random file url from their database.
3. random.cat then sends that file's URL as a JSON object in a stringified form that contains a link to the image.
4. undici receives the response and you parse the body to a JSON object.
5. Your application then attaches the image and sends it in Discord.
### Urban Dictionary
Urban Dictionary's API is available at [https://api.urbandictionary.com/v0/define](https://api.urbandictionary.com/v0/define), accepts a `term` parameter, and returns a JSON response.
The following code will fetch data from this api:
```js
// ...
client.on(Events.InteractionCreate, async (interaction) => {
// ...
if (commandName === 'urban') {
const term = interaction.options.getString('term');
const query = new URLSearchParams({ term }); // [!code word:URLSearchParams]
const dictResult = await request(`https://api.urbandictionary.com/v0/define?${query}`);
const { list } = await dictResult.body.json();
}
});
```
Here, you are using JavaScript's native [URLSearchParams class](https://developer.mozilla.org/docs/Web/API/URLSearchParams) to create a [query string](https://en.wikipedia.org/wiki/Query_string) for the URL so that the Urban Dictionary server can parse it and know what you want to look up.
If you were to do `/urban hello world`, then the URL would become https://api.urbandictionary.com/v0/define?term=hello%20world since the string `"hello world"` is encoded.
You can get the respective properties from the returned JSON. If you were to view it in your browser, it usually looks like a bunch of mumbo jumbo. If it doesn't, great! If it does, then you should get a JSON formatter/viewer. If you're using Chrome, [JSON Formatter](https://chrome.google.com/webstore/detail/json-formatter/bcjindcccaagfpapjjmafapmmgkkhgoa) is one of the more popular extensions. If you're not using Chrome, search for "JSON formatter/viewer <your browser>" and get one.
Now, if you look at the JSON, you can see that it has a `list` property, which is an array of objects containing various definitions for the term (maximum 10). Something you always want to do when making API-based commands is to handle the case when no results are available. So, if you throw a random term in there (e.g. `njaksdcas`) and then look at the response the `list` array should be empty. Now you are ready to start writing!
As explained above, you'll want to check if the API returned any answers for your query, and send back the definition if that's the case:
```js
if (commandName === 'urban') {
// ...
if (!list.length) {
return interaction.editReply(`No results found for **${term}**.`);
}
interaction.editReply(`**${term}**: ${list[0].definition}`);
}
```
Here, you are only getting the first object from the array of objects called `list` and grabbing its `definition` property.
If you've followed the tutorial, you should have something like this:
Now, you can make it an [embed](../popular-topics/embeds) for easier formatting.
You can define the following helper function at the top of your file. In the code below, you can use this function to truncate the returned data and make sure the embed doesn't error, because field values exceed 1024 characters.
```js
const trim = (str, max) => (str.length > max ? `${str.slice(0, max - 3)}...` : str);
```
And here is how you can build the embed from the API data:
```js
const [answer] = list;
const embed = new EmbedBuilder()
.setColor(0xef
gitextract_it4iz3cx/ ├── .commitlintrc.json ├── .dockerignore ├── .git-blame-ignore-revs ├── .gitattributes ├── .github/ │ ├── .kodiak.toml │ ├── CODEOWNERS │ ├── CODE_OF_CONDUCT.md │ ├── COMMIT_CONVENTION.md │ ├── CONTRIBUTING.md │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── 01-package_bug_report.yml │ │ ├── 02-application_bug_report.yml │ │ ├── 03-proxy_container_bug_report.yml │ │ ├── 04-feature_request.yml │ │ ├── 05-guide.yml │ │ └── config.yml │ ├── SUPPORT.md │ ├── issue-labeler.yml │ ├── labeler.yml │ ├── labels.yml │ ├── tsc.json │ └── workflows/ │ ├── cleanup-cache.yml │ ├── deploy-website.yml │ ├── deprecate-version.yml │ ├── documentation.yml │ ├── issue-triage.yml │ ├── label-sync.yml │ ├── lock.yml │ ├── pr-triage.yml │ ├── publish-dev-docker.yml │ ├── publish-dev.yml │ ├── publish-docker.yml │ ├── release.yml │ ├── remove-tag.yml │ ├── tests.yml │ └── upload-readmes.yml ├── .gitignore ├── .husky/ │ ├── commit-msg │ └── pre-commit ├── .lintstagedrc.json ├── .prettierignore ├── .prettierrc.json ├── .vscode/ │ ├── extensions.json │ └── settings.json ├── LICENSE ├── README.md ├── api-extractor.json ├── apps/ │ ├── guide/ │ │ ├── .gitignore │ │ ├── .lintstagedrc.cjs │ │ ├── .prettierignore │ │ ├── .prettierrc.cjs │ │ ├── CONTRIBUTING.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── content/ │ │ │ └── docs/ │ │ │ ├── legacy/ │ │ │ │ ├── additional-features/ │ │ │ │ │ ├── cooldowns.mdx │ │ │ │ │ ├── meta.json │ │ │ │ │ └── reloading-commands.mdx │ │ │ │ ├── additional-info/ │ │ │ │ │ ├── async-await.mdx │ │ │ │ │ ├── changes-in-v14.mdx │ │ │ │ │ ├── collections.mdx │ │ │ │ │ ├── es6-syntax.mdx │ │ │ │ │ ├── meta.json │ │ │ │ │ ├── notation.mdx │ │ │ │ │ ├── proxy.mdx │ │ │ │ │ └── rest-api.mdx │ │ │ │ ├── app-creation/ │ │ │ │ │ ├── creating-commands.mdx │ │ │ │ │ ├── deploying-commands.mdx │ │ │ │ │ ├── handling-commands.mdx │ │ │ │ │ ├── handling-events.mdx │ │ │ │ │ ├── main-file.mdx │ │ │ │ │ ├── meta.json │ │ │ │ │ └── project-setup.mdx │ │ │ │ ├── improving-dev-environment/ │ │ │ │ │ ├── meta.json │ │ │ │ │ ├── package-json-scripts.mdx │ │ │ │ │ └── pm2.mdx │ │ │ │ ├── index.mdx │ │ │ │ ├── interactions/ │ │ │ │ │ ├── context-menus.mdx │ │ │ │ │ ├── meta.json │ │ │ │ │ └── modals.mdx │ │ │ │ ├── interactive-components/ │ │ │ │ │ ├── action-rows.mdx │ │ │ │ │ ├── buttons.mdx │ │ │ │ │ ├── interactions.mdx │ │ │ │ │ ├── meta.json │ │ │ │ │ └── select-menus.mdx │ │ │ │ ├── keyv/ │ │ │ │ │ └── keyv.mdx │ │ │ │ ├── meta.json │ │ │ │ ├── miscellaneous/ │ │ │ │ │ ├── cache-customization.mdx │ │ │ │ │ └── useful-packages.mdx │ │ │ │ ├── oauth2/ │ │ │ │ │ └── oauth2.mdx │ │ │ │ ├── popular-topics/ │ │ │ │ │ ├── audit-logs.mdx │ │ │ │ │ ├── canvas.mdx │ │ │ │ │ ├── collectors.mdx │ │ │ │ │ ├── display-components.mdx │ │ │ │ │ ├── embeds.mdx │ │ │ │ │ ├── errors.mdx │ │ │ │ │ ├── faq.mdx │ │ │ │ │ ├── formatters.mdx │ │ │ │ │ ├── intents.mdx │ │ │ │ │ ├── meta.json │ │ │ │ │ ├── partials.mdx │ │ │ │ │ ├── permissions-extended.mdx │ │ │ │ │ ├── permissions.mdx │ │ │ │ │ ├── reactions.mdx │ │ │ │ │ ├── threads.mdx │ │ │ │ │ └── webhooks.mdx │ │ │ │ ├── preparations/ │ │ │ │ │ ├── adding-your-app.mdx │ │ │ │ │ ├── app-setup.mdx │ │ │ │ │ ├── installation.mdx │ │ │ │ │ ├── linter.mdx │ │ │ │ │ └── meta.json │ │ │ │ ├── sequelize/ │ │ │ │ │ ├── currency.mdx │ │ │ │ │ └── index.mdx │ │ │ │ ├── sharding/ │ │ │ │ │ ├── additional-information.mdx │ │ │ │ │ ├── extended.mdx │ │ │ │ │ └── index.mdx │ │ │ │ └── slash-commands/ │ │ │ │ ├── advanced-creation.mdx │ │ │ │ ├── autocomplete.mdx │ │ │ │ ├── deleting-commands.mdx │ │ │ │ ├── meta.json │ │ │ │ ├── parsing-options.mdx │ │ │ │ ├── permissions.mdx │ │ │ │ └── response-methods.mdx │ │ │ ├── meta.json │ │ │ ├── v15/ │ │ │ │ ├── index.mdx │ │ │ │ └── meta.json │ │ │ └── voice/ │ │ │ ├── audio-player.mdx │ │ │ ├── audio-resources.mdx │ │ │ ├── index.mdx │ │ │ ├── life-cycles.mdx │ │ │ ├── meta.json │ │ │ ├── seeking.mdx │ │ │ └── voice-connections.mdx │ │ ├── next.config.ts │ │ ├── open-next.config.ts │ │ ├── package.json │ │ ├── postcss.config.js │ │ ├── public/ │ │ │ ├── _headers │ │ │ └── site.webmanifest │ │ ├── source.config.ts │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── [[...slug]]/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── api/ │ │ │ │ │ └── search/ │ │ │ │ │ └── route.ts │ │ │ │ ├── layout.client.tsx │ │ │ │ ├── layout.config.tsx │ │ │ │ ├── layout.tsx │ │ │ │ └── og/ │ │ │ │ └── [...slug]/ │ │ │ │ └── route.tsx │ │ │ ├── components/ │ │ │ │ ├── GitHubInfo.tsx │ │ │ │ └── mdx/ │ │ │ │ └── mermaid.tsx │ │ │ ├── lib/ │ │ │ │ └── source.ts │ │ │ ├── mdx-components.tsx │ │ │ ├── middleware.ts │ │ │ ├── styles/ │ │ │ │ └── base.css │ │ │ └── util/ │ │ │ └── env.ts │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ └── wrangler.jsonc │ ├── proxy-container/ │ │ ├── .gitignore │ │ ├── .lintstagedrc.cjs │ │ ├── .prettierignore │ │ ├── .prettierrc.cjs │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ └── website/ │ ├── .gitignore │ ├── .lintstagedrc.cjs │ ├── .prettierignore │ ├── .prettierrc.cjs │ ├── LICENSE │ ├── README.md │ ├── next.config.ts │ ├── open-next.config.ts │ ├── package.json │ ├── postcss.config.js │ ├── public/ │ │ ├── _headers │ │ └── site.webmanifest │ ├── scripts/ │ │ └── generateAllIndices.js │ ├── src/ │ │ ├── app/ │ │ │ ├── api/ │ │ │ │ └── docs/ │ │ │ │ ├── entrypoints/ │ │ │ │ │ └── route.ts │ │ │ │ ├── sitemap/ │ │ │ │ │ └── route.ts │ │ │ │ └── versions/ │ │ │ │ └── route.ts │ │ │ ├── docs/ │ │ │ │ └── packages/ │ │ │ │ ├── [packageName]/ │ │ │ │ │ └── [version]/ │ │ │ │ │ └── [[...item]]/ │ │ │ │ │ ├── CmdK.tsx │ │ │ │ │ ├── layout.tsx │ │ │ │ │ ├── opengraph-image.tsx.bak │ │ │ │ │ └── page.tsx │ │ │ │ └── layout.tsx │ │ │ ├── layout.tsx │ │ │ ├── not-found.tsx │ │ │ ├── opengraph-image.tsx │ │ │ ├── page.tsx │ │ │ └── providers.tsx │ │ ├── components/ │ │ │ ├── Badges.tsx │ │ │ ├── CmdK.tsx │ │ │ ├── ConstructorNode.tsx │ │ │ ├── DeprecatedNode.tsx │ │ │ ├── DocItem.tsx │ │ │ ├── DocKind.tsx │ │ │ ├── DocNode.tsx │ │ │ ├── EntrypointSelect.tsx │ │ │ ├── EnumMemberNode.tsx │ │ │ ├── EventNode.tsx │ │ │ ├── ExampleNode.tsx │ │ │ ├── ExcerptNode.tsx │ │ │ ├── Footer.tsx │ │ │ ├── InformationNode.tsx │ │ │ ├── InheritanceNode.tsx │ │ │ ├── InheritedFromNode.tsx │ │ │ ├── InstallButton.tsx │ │ │ ├── MethodNode.tsx │ │ │ ├── Navigation.tsx │ │ │ ├── NavigationItem.tsx │ │ │ ├── Outline.tsx │ │ │ ├── OverlayScrollbars.tsx │ │ │ ├── PackageSelect.tsx │ │ │ ├── ParameterNode.tsx │ │ │ ├── PropertyNode.tsx │ │ │ ├── ReturnNode.tsx │ │ │ ├── SearchButton.tsx │ │ │ ├── SeeNode.tsx │ │ │ ├── Sidebar.tsx │ │ │ ├── SummaryNode.tsx │ │ │ ├── SyntaxHighlighter.tsx │ │ │ ├── ThemeSwitch.tsx │ │ │ ├── TypeParameterNode.tsx │ │ │ ├── UnionMember.tsx │ │ │ ├── UnstableNode.tsx │ │ │ ├── VersionSelect.tsx │ │ │ └── ui/ │ │ │ ├── Alert.tsx │ │ │ ├── Button.tsx │ │ │ ├── Collapsible.tsx │ │ │ ├── Dialog.tsx │ │ │ ├── Dropdown.tsx │ │ │ ├── Field.tsx │ │ │ ├── Keyboard.tsx │ │ │ ├── ListBox.tsx │ │ │ ├── Popover.tsx │ │ │ ├── Select.tsx │ │ │ ├── Sheet.tsx │ │ │ ├── Sidebar.tsx │ │ │ └── Tabs.tsx │ │ ├── hooks/ │ │ │ ├── useSystemThemeFallback.ts │ │ │ └── useUnregisterServiceWorker.ts │ │ ├── middleware.ts │ │ ├── stores/ │ │ │ ├── cmdk.ts │ │ │ └── drawer.ts │ │ ├── styles/ │ │ │ ├── base.css │ │ │ ├── cva.ts │ │ │ ├── ui/ │ │ │ │ ├── button.ts │ │ │ │ └── focusRing.ts │ │ │ └── util.ts │ │ └── util/ │ │ ├── builtinDocumentationLinks.ts │ │ ├── constants.ts │ │ ├── env.ts │ │ ├── fetchDependencies.ts │ │ ├── fetchEntryPoints.ts │ │ ├── fetchLatestVersion.ts │ │ ├── fetchNode.ts │ │ ├── fetchSitemap.ts │ │ ├── fetchVersions.ts │ │ ├── parseDocsPathParams.ts │ │ ├── resolveNodeKind.tsx │ │ └── shiki.bundle.ts │ ├── tsconfig.eslint.json │ ├── tsconfig.json │ └── wrangler.jsonc ├── biome.json ├── codecov.yml ├── eslint.config.js ├── package.json ├── packages/ │ ├── actions/ │ │ ├── .gitignore │ │ ├── .lintstagedrc.cjs │ │ ├── .prettierignore │ │ ├── .prettierrc.cjs │ │ ├── LICENSE │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── formatTag.test.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── deprecateVersion/ │ │ │ │ └── action.yml │ │ │ ├── formatTag/ │ │ │ │ ├── action.yml │ │ │ │ ├── formatTag.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── pnpmCache/ │ │ │ │ └── action.yml │ │ │ ├── releasePackages/ │ │ │ │ ├── action.yml │ │ │ │ ├── generateReleaseTree.ts │ │ │ │ ├── index.ts │ │ │ │ └── releasePackage.ts │ │ │ ├── uploadCoverage/ │ │ │ │ └── action.yml │ │ │ ├── uploadDocumentation/ │ │ │ │ ├── action.yml │ │ │ │ └── index.ts │ │ │ ├── uploadReadmeFiles/ │ │ │ │ ├── action.yml │ │ │ │ └── index.ts │ │ │ ├── uploadSearchIndices/ │ │ │ │ ├── action.yml │ │ │ │ └── index.ts │ │ │ ├── uploadSplitDocumentation/ │ │ │ │ ├── action.yml │ │ │ │ └── index.ts │ │ │ └── yarnCache/ │ │ │ └── action.yml │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ ├── tsconfig.test.json │ │ └── tsup.config.ts │ ├── api-extractor/ │ │ ├── .gitignore │ │ ├── .lintstagedrc.js │ │ ├── .npmignore │ │ ├── .prettierignore │ │ ├── .prettierrc.js │ │ ├── CHANGELOG.json │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bin/ │ │ │ └── api-extractor │ │ ├── config/ │ │ │ ├── api-extractor.json │ │ │ └── jest.config.json │ │ ├── extends/ │ │ │ └── tsdoc-base.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── aedoc/ │ │ │ │ └── PackageDocComment.ts │ │ │ ├── analyzer/ │ │ │ │ ├── AstDeclaration.ts │ │ │ │ ├── AstEntity.ts │ │ │ │ ├── AstImport.ts │ │ │ │ ├── AstModule.ts │ │ │ │ ├── AstNamespaceExport.ts │ │ │ │ ├── AstNamespaceImport.ts │ │ │ │ ├── AstReferenceResolver.ts │ │ │ │ ├── AstSymbol.ts │ │ │ │ ├── AstSymbolTable.ts │ │ │ │ ├── ExportAnalyzer.ts │ │ │ │ ├── PackageMetadataManager.ts │ │ │ │ ├── SourceFileLocationFormatter.ts │ │ │ │ ├── Span.ts │ │ │ │ ├── SyntaxHelpers.ts │ │ │ │ ├── TypeScriptHelpers.ts │ │ │ │ └── TypeScriptInternals.ts │ │ │ ├── api/ │ │ │ │ ├── CompilerState.ts │ │ │ │ ├── ConsoleMessageId.ts │ │ │ │ ├── Extractor.ts │ │ │ │ ├── ExtractorConfig.ts │ │ │ │ ├── ExtractorLogLevel.ts │ │ │ │ ├── ExtractorMessage.ts │ │ │ │ ├── ExtractorMessageId.ts │ │ │ │ └── IConfigFile.ts │ │ │ ├── cli/ │ │ │ │ ├── ApiExtractorCommandLine.ts │ │ │ │ ├── InitAction.ts │ │ │ │ └── RunAction.ts │ │ │ ├── collector/ │ │ │ │ ├── ApiItemMetadata.ts │ │ │ │ ├── Collector.ts │ │ │ │ ├── CollectorEntity.ts │ │ │ │ ├── DeclarationMetadata.ts │ │ │ │ ├── MessageRouter.ts │ │ │ │ ├── SourceMapper.ts │ │ │ │ ├── SymbolMetadata.ts │ │ │ │ ├── VisitorState.ts │ │ │ │ └── WorkingPackage.ts │ │ │ ├── enhancers/ │ │ │ │ ├── DocCommentEnhancer.ts │ │ │ │ └── ValidationEnhancer.ts │ │ │ ├── generators/ │ │ │ │ ├── ApiModelGenerator.ts │ │ │ │ ├── ApiReportGenerator.ts │ │ │ │ ├── DeclarationReferenceGenerator.ts │ │ │ │ ├── DtsEmitHelpers.ts │ │ │ │ ├── DtsRollupGenerator.ts │ │ │ │ ├── ExcerptBuilder.ts │ │ │ │ └── IndentedWriter.ts │ │ │ ├── index.ts │ │ │ ├── schemas/ │ │ │ │ ├── api-extractor-defaults.json │ │ │ │ ├── api-extractor-template.json │ │ │ │ └── api-extractor.schema.json │ │ │ └── start.ts │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── api-extractor-model/ │ │ ├── .gitignore │ │ ├── .lintstagedrc.js │ │ ├── .npmignore │ │ ├── .prettierignore │ │ ├── .prettierrc.js │ │ ├── CHANGELOG.json │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── config/ │ │ │ └── api-extractor.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── aedoc/ │ │ │ │ ├── AedocDefinitions.ts │ │ │ │ └── ReleaseTag.ts │ │ │ ├── index.ts │ │ │ ├── items/ │ │ │ │ ├── ApiDeclaredItem.ts │ │ │ │ ├── ApiDocumentedItem.ts │ │ │ │ ├── ApiItem.ts │ │ │ │ └── ApiPropertyItem.ts │ │ │ ├── mixins/ │ │ │ │ ├── ApiAbstractMixin.ts │ │ │ │ ├── ApiExportedMixin.ts │ │ │ │ ├── ApiInitializerMixin.ts │ │ │ │ ├── ApiItemContainerMixin.ts │ │ │ │ ├── ApiNameMixin.ts │ │ │ │ ├── ApiOptionalMixin.ts │ │ │ │ ├── ApiParameterListMixin.ts │ │ │ │ ├── ApiProtectedMixin.ts │ │ │ │ ├── ApiReadonlyMixin.ts │ │ │ │ ├── ApiReleaseTagMixin.ts │ │ │ │ ├── ApiReturnTypeMixin.ts │ │ │ │ ├── ApiStaticMixin.ts │ │ │ │ ├── ApiTypeParameterListMixin.ts │ │ │ │ ├── Excerpt.ts │ │ │ │ ├── IFindApiItemsResult.ts │ │ │ │ └── Mixin.ts │ │ │ └── model/ │ │ │ ├── ApiCallSignature.ts │ │ │ ├── ApiClass.ts │ │ │ ├── ApiConstructSignature.ts │ │ │ ├── ApiConstructor.ts │ │ │ ├── ApiEntryPoint.ts │ │ │ ├── ApiEnum.ts │ │ │ ├── ApiEnumMember.ts │ │ │ ├── ApiEvent.ts │ │ │ ├── ApiFunction.ts │ │ │ ├── ApiIndexSignature.ts │ │ │ ├── ApiInterface.ts │ │ │ ├── ApiMethod.ts │ │ │ ├── ApiMethodSignature.ts │ │ │ ├── ApiModel.ts │ │ │ ├── ApiNamespace.ts │ │ │ ├── ApiPackage.ts │ │ │ ├── ApiProperty.ts │ │ │ ├── ApiPropertySignature.ts │ │ │ ├── ApiTypeAlias.ts │ │ │ ├── ApiVariable.ts │ │ │ ├── Deserializer.ts │ │ │ ├── DeserializerContext.ts │ │ │ ├── HeritageType.ts │ │ │ ├── ModelReferenceResolver.ts │ │ │ ├── Parameter.ts │ │ │ ├── SourceLocation.ts │ │ │ └── TypeParameter.ts │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── api-extractor-utils/ │ │ ├── .gitignore │ │ ├── .lintstagedrc.js │ │ ├── .prettierignore │ │ ├── .prettierrc.js │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── ApiNodeJSONEncoder.ts │ │ │ ├── TypeParameterJSONEncoder.ts │ │ │ ├── index.ts │ │ │ ├── parse.ts │ │ │ └── tsdoc/ │ │ │ ├── CommentBlock.ts │ │ │ ├── CommentBlockTag.ts │ │ │ ├── CommentCodeSpan.ts │ │ │ ├── CommentNode.ts │ │ │ ├── CommentNodeContainer.ts │ │ │ ├── FencedCodeCommentNode.ts │ │ │ ├── LinkTagCommentNode.ts │ │ │ ├── ParamBlock.ts │ │ │ ├── PlainTextCommentNode.ts │ │ │ ├── RootComment.ts │ │ │ └── index.ts │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── brokers/ │ │ ├── .cliff-jumperrc.json │ │ ├── .gitignore │ │ ├── .lintstagedrc.js │ │ ├── .prettierignore │ │ ├── .prettierrc.js │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── index.test.ts │ │ ├── api-extractor.json │ │ ├── cliff.toml │ │ ├── docs/ │ │ │ └── README.md │ │ ├── package.json │ │ ├── scripts/ │ │ │ └── xcleangroup.lua │ │ ├── src/ │ │ │ ├── brokers/ │ │ │ │ ├── Broker.ts │ │ │ │ └── redis/ │ │ │ │ ├── BaseRedis.ts │ │ │ │ ├── PubSubRedis.ts │ │ │ │ ├── RPCRedis.ts │ │ │ │ └── RedisGateway.ts │ │ │ └── index.ts │ │ ├── tsconfig.docs.json │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ ├── tsconfig.test.json │ │ └── tsup.config.ts │ ├── builders/ │ │ ├── .cliff-jumperrc.json │ │ ├── .gitignore │ │ ├── .lintstagedrc.js │ │ ├── .prettierignore │ │ ├── .prettierrc.js │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── components/ │ │ │ │ ├── actionRow.test.ts │ │ │ │ ├── button.test.ts │ │ │ │ ├── components.test.ts │ │ │ │ ├── fileUpload.test.ts │ │ │ │ ├── label.test.ts │ │ │ │ ├── selectMenu.test.ts │ │ │ │ ├── textInput.test.ts │ │ │ │ └── v2/ │ │ │ │ ├── container.test.ts │ │ │ │ ├── file.test.ts │ │ │ │ ├── mediaGallery.test.ts │ │ │ │ ├── mediaGalleryItem.test.ts │ │ │ │ ├── section.test.ts │ │ │ │ ├── separator.test.ts │ │ │ │ ├── textDisplay.test.ts │ │ │ │ └── thumbnail.test.ts │ │ │ ├── interactions/ │ │ │ │ ├── ChatInputCommands/ │ │ │ │ │ ├── ChatInputCommands.test.ts │ │ │ │ │ └── Options.test.ts │ │ │ │ ├── ContextMenuCommands.test.ts │ │ │ │ └── modal.test.ts │ │ │ ├── messages/ │ │ │ │ ├── embed.test.ts │ │ │ │ ├── fileBody.test.ts │ │ │ │ ├── message.test.ts │ │ │ │ └── poll.test.ts │ │ │ ├── types.test-d.ts │ │ │ └── util.test.ts │ │ ├── api-extractor.json │ │ ├── cliff.toml │ │ ├── docs/ │ │ │ ├── README.md │ │ │ └── examples/ │ │ │ └── Slash Command Builders.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── Assertions.ts │ │ │ ├── components/ │ │ │ │ ├── ActionRow.ts │ │ │ │ ├── Assertions.ts │ │ │ │ ├── Component.ts │ │ │ │ ├── Components.ts │ │ │ │ ├── button/ │ │ │ │ │ ├── Button.ts │ │ │ │ │ ├── CustomIdButton.ts │ │ │ │ │ ├── LinkButton.ts │ │ │ │ │ ├── PremiumButton.ts │ │ │ │ │ └── mixins/ │ │ │ │ │ └── EmojiOrLabelButtonMixin.ts │ │ │ │ ├── fileUpload/ │ │ │ │ │ ├── Assertions.ts │ │ │ │ │ └── FileUpload.ts │ │ │ │ ├── label/ │ │ │ │ │ ├── Assertions.ts │ │ │ │ │ └── Label.ts │ │ │ │ ├── selectMenu/ │ │ │ │ │ ├── BaseSelectMenu.ts │ │ │ │ │ ├── ChannelSelectMenu.ts │ │ │ │ │ ├── MentionableSelectMenu.ts │ │ │ │ │ ├── RoleSelectMenu.ts │ │ │ │ │ ├── StringSelectMenu.ts │ │ │ │ │ ├── StringSelectMenuOption.ts │ │ │ │ │ └── UserSelectMenu.ts │ │ │ │ ├── textInput/ │ │ │ │ │ ├── Assertions.ts │ │ │ │ │ └── TextInput.ts │ │ │ │ └── v2/ │ │ │ │ ├── Assertions.ts │ │ │ │ ├── Container.ts │ │ │ │ ├── File.ts │ │ │ │ ├── MediaGallery.ts │ │ │ │ ├── MediaGalleryItem.ts │ │ │ │ ├── Section.ts │ │ │ │ ├── Separator.ts │ │ │ │ ├── TextDisplay.ts │ │ │ │ └── Thumbnail.ts │ │ │ ├── index.ts │ │ │ ├── interactions/ │ │ │ │ ├── commands/ │ │ │ │ │ ├── Command.ts │ │ │ │ │ ├── SharedName.ts │ │ │ │ │ ├── SharedNameAndDescription.ts │ │ │ │ │ ├── chatInput/ │ │ │ │ │ │ ├── Assertions.ts │ │ │ │ │ │ ├── ChatInputCommand.ts │ │ │ │ │ │ ├── ChatInputCommandSubcommands.ts │ │ │ │ │ │ ├── mixins/ │ │ │ │ │ │ │ ├── ApplicationCommandNumericOptionMinMaxValueMixin.ts │ │ │ │ │ │ │ ├── ApplicationCommandOptionChannelTypesMixin.ts │ │ │ │ │ │ │ ├── ApplicationCommandOptionWithAutocompleteMixin.ts │ │ │ │ │ │ │ ├── ApplicationCommandOptionWithChoicesMixin.ts │ │ │ │ │ │ │ ├── SharedChatInputCommandOptions.ts │ │ │ │ │ │ │ └── SharedSubcommands.ts │ │ │ │ │ │ └── options/ │ │ │ │ │ │ ├── ApplicationCommandOptionBase.ts │ │ │ │ │ │ ├── attachment.ts │ │ │ │ │ │ ├── boolean.ts │ │ │ │ │ │ ├── channel.ts │ │ │ │ │ │ ├── integer.ts │ │ │ │ │ │ ├── mentionable.ts │ │ │ │ │ │ ├── number.ts │ │ │ │ │ │ ├── role.ts │ │ │ │ │ │ ├── string.ts │ │ │ │ │ │ └── user.ts │ │ │ │ │ └── contextMenu/ │ │ │ │ │ ├── Assertions.ts │ │ │ │ │ ├── ContextMenuCommand.ts │ │ │ │ │ ├── MessageCommand.ts │ │ │ │ │ └── UserCommand.ts │ │ │ │ └── modals/ │ │ │ │ ├── Assertions.ts │ │ │ │ └── Modal.ts │ │ │ ├── messages/ │ │ │ │ ├── AllowedMentions.ts │ │ │ │ ├── Assertions.ts │ │ │ │ ├── Attachment.ts │ │ │ │ ├── Message.ts │ │ │ │ ├── MessageReference.ts │ │ │ │ ├── embed/ │ │ │ │ │ ├── Assertions.ts │ │ │ │ │ ├── Embed.ts │ │ │ │ │ ├── EmbedAuthor.ts │ │ │ │ │ ├── EmbedField.ts │ │ │ │ │ └── EmbedFooter.ts │ │ │ │ └── poll/ │ │ │ │ ├── Assertions.ts │ │ │ │ ├── Poll.ts │ │ │ │ ├── PollAnswer.ts │ │ │ │ ├── PollAnswerMedia.ts │ │ │ │ ├── PollMedia.ts │ │ │ │ └── PollQuestion.ts │ │ │ └── util/ │ │ │ ├── ValidationError.ts │ │ │ ├── normalizeArray.ts │ │ │ ├── resolveBuilder.ts │ │ │ └── validation.ts │ │ ├── tsconfig.docs.json │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ ├── tsconfig.test.json │ │ ├── tsdoc.json │ │ └── tsup.config.ts │ ├── collection/ │ │ ├── .cliff-jumperrc.json │ │ ├── .gitignore │ │ ├── .lintstagedrc.js │ │ ├── .prettierignore │ │ ├── .prettierrc.js │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── collection.test.ts │ │ ├── api-extractor.json │ │ ├── cliff.toml │ │ ├── docs/ │ │ │ └── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── collection.ts │ │ │ └── index.ts │ │ ├── tsconfig.docs.json │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ ├── tsconfig.test.json │ │ └── tsup.config.ts │ ├── core/ │ │ ├── .cliff-jumperrc.json │ │ ├── .gitignore │ │ ├── .lintstagedrc.js │ │ ├── .prettierignore │ │ ├── .prettierrc.js │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── types.test-d.ts │ │ ├── api-extractor.json │ │ ├── cliff.toml │ │ ├── docs/ │ │ │ └── README.md │ │ ├── package.json │ │ ├── scripts/ │ │ │ ├── check-routes.mts │ │ │ └── find-returns-not-return-type.mts │ │ ├── src/ │ │ │ ├── Gateway.ts │ │ │ ├── api/ │ │ │ │ ├── applicationCommands.ts │ │ │ │ ├── applications.ts │ │ │ │ ├── channel.ts │ │ │ │ ├── gateway.ts │ │ │ │ ├── guild.ts │ │ │ │ ├── index.ts │ │ │ │ ├── interactions.ts │ │ │ │ ├── invite.ts │ │ │ │ ├── monetization.ts │ │ │ │ ├── oauth2.ts │ │ │ │ ├── poll.ts │ │ │ │ ├── roleConnections.ts │ │ │ │ ├── soundboardSounds.ts │ │ │ │ ├── stageInstances.ts │ │ │ │ ├── sticker.ts │ │ │ │ ├── thread.ts │ │ │ │ ├── user.ts │ │ │ │ ├── voice.ts │ │ │ │ └── webhook.ts │ │ │ ├── client.ts │ │ │ ├── http-only/ │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ └── util/ │ │ │ ├── files.ts │ │ │ └── index.ts │ │ ├── tsconfig.docs.json │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ ├── tsconfig.test.json │ │ └── tsup.config.ts │ ├── create-discord-bot/ │ │ ├── .cliff-jumperrc.json │ │ ├── .gitignore │ │ ├── .lintstagedrc.cjs │ │ ├── .prettierignore │ │ ├── .prettierrc.cjs │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── api-extractor.json │ │ ├── bin/ │ │ │ └── index.ts │ │ ├── cliff.toml │ │ ├── package.json │ │ ├── scripts/ │ │ │ └── rename-to-app.mjs │ │ ├── src/ │ │ │ ├── create-discord-bot.ts │ │ │ ├── helpers/ │ │ │ │ └── packageManager.ts │ │ │ └── util/ │ │ │ ├── constants.ts │ │ │ └── isFolderEmpty.ts │ │ ├── template/ │ │ │ ├── Bun/ │ │ │ │ ├── JavaScript/ │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── .prettierrc.json │ │ │ │ │ ├── .vscode/ │ │ │ │ │ │ ├── extensions.json │ │ │ │ │ │ └── settings.json │ │ │ │ │ ├── eslint.config.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── src/ │ │ │ │ │ ├── commands/ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── ping.js │ │ │ │ │ │ └── utility/ │ │ │ │ │ │ └── user.js │ │ │ │ │ ├── events/ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── interactionCreate.js │ │ │ │ │ │ └── ready.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── util/ │ │ │ │ │ ├── deploy.js │ │ │ │ │ └── loaders.js │ │ │ │ └── TypeScript/ │ │ │ │ ├── .gitignore │ │ │ │ ├── .prettierrc.json │ │ │ │ ├── .vscode/ │ │ │ │ │ ├── extensions.json │ │ │ │ │ └── settings.json │ │ │ │ ├── eslint.config.js │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── commands/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── ping.ts │ │ │ │ │ │ └── utility/ │ │ │ │ │ │ └── user.ts │ │ │ │ │ ├── events/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── interactionCreate.ts │ │ │ │ │ │ └── ready.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── util/ │ │ │ │ │ ├── deploy.ts │ │ │ │ │ └── loaders.ts │ │ │ │ ├── tsconfig.eslint.json │ │ │ │ └── tsconfig.json │ │ │ ├── Deno/ │ │ │ │ ├── .gitignore │ │ │ │ ├── .vscode/ │ │ │ │ │ ├── extensions.json │ │ │ │ │ └── settings.json │ │ │ │ ├── deno.jsonc │ │ │ │ └── src/ │ │ │ │ ├── commands/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── ping.ts │ │ │ │ │ └── utility/ │ │ │ │ │ └── user.ts │ │ │ │ ├── events/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── interactionCreate.ts │ │ │ │ │ └── ready.ts │ │ │ │ ├── index.ts │ │ │ │ └── util/ │ │ │ │ ├── deploy.ts │ │ │ │ └── loaders.ts │ │ │ ├── JavaScript/ │ │ │ │ ├── .gitignore │ │ │ │ ├── .prettierignore │ │ │ │ ├── .prettierrc.json │ │ │ │ ├── .vscode/ │ │ │ │ │ ├── extensions.json │ │ │ │ │ └── settings.json │ │ │ │ ├── eslint.config.js │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ ├── commands/ │ │ │ │ │ ├── index.js │ │ │ │ │ ├── ping.js │ │ │ │ │ └── utility/ │ │ │ │ │ └── user.js │ │ │ │ ├── events/ │ │ │ │ │ ├── index.js │ │ │ │ │ ├── interactionCreate.js │ │ │ │ │ └── ready.js │ │ │ │ ├── index.js │ │ │ │ └── util/ │ │ │ │ ├── deploy.js │ │ │ │ └── loaders.js │ │ │ └── TypeScript/ │ │ │ ├── .gitignore │ │ │ ├── .prettierignore │ │ │ ├── .prettierrc.json │ │ │ ├── .vscode/ │ │ │ │ ├── extensions.json │ │ │ │ └── settings.json │ │ │ ├── eslint.config.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── commands/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── ping.ts │ │ │ │ │ └── utility/ │ │ │ │ │ └── user.ts │ │ │ │ ├── events/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── interactionCreate.ts │ │ │ │ │ └── ready.ts │ │ │ │ ├── index.ts │ │ │ │ └── util/ │ │ │ │ ├── deploy.ts │ │ │ │ └── loaders.ts │ │ │ ├── tsconfig.eslint.json │ │ │ └── tsconfig.json │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── discord.js/ │ │ ├── .cliff-jumperrc.json │ │ ├── .gitignore │ │ ├── .lintstagedrc.json │ │ ├── .prettierignore │ │ ├── .prettierrc.json │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── api-extractor.json │ │ ├── cliff.toml │ │ ├── docs/ │ │ │ ├── README.md │ │ │ └── index.json │ │ ├── package.json │ │ ├── scripts/ │ │ │ ├── esmDts.mjs │ │ │ └── generateRequires.mjs │ │ ├── src/ │ │ │ ├── client/ │ │ │ │ ├── Client.js │ │ │ │ ├── actions/ │ │ │ │ │ ├── Action.js │ │ │ │ │ ├── ActionsManager.js │ │ │ │ │ ├── ChannelCreate.js │ │ │ │ │ ├── ChannelDelete.js │ │ │ │ │ ├── ChannelUpdate.js │ │ │ │ │ ├── GuildChannelsPositionUpdate.js │ │ │ │ │ ├── GuildEmojiCreate.js │ │ │ │ │ ├── GuildEmojiDelete.js │ │ │ │ │ ├── GuildEmojiUpdate.js │ │ │ │ │ ├── GuildEmojisUpdate.js │ │ │ │ │ ├── GuildMemberRemove.js │ │ │ │ │ ├── GuildMemberUpdate.js │ │ │ │ │ ├── GuildRoleCreate.js │ │ │ │ │ ├── GuildRoleDelete.js │ │ │ │ │ ├── GuildRolesPositionUpdate.js │ │ │ │ │ ├── GuildScheduledEventDelete.js │ │ │ │ │ ├── GuildScheduledEventUserAdd.js │ │ │ │ │ ├── GuildScheduledEventUserRemove.js │ │ │ │ │ ├── GuildSoundboardSoundDelete.js │ │ │ │ │ ├── GuildStickerCreate.js │ │ │ │ │ ├── GuildStickerDelete.js │ │ │ │ │ ├── GuildStickerUpdate.js │ │ │ │ │ ├── GuildStickersUpdate.js │ │ │ │ │ ├── GuildUpdate.js │ │ │ │ │ ├── InteractionCreate.js │ │ │ │ │ ├── MessageCreate.js │ │ │ │ │ ├── MessageDelete.js │ │ │ │ │ ├── MessageDeleteBulk.js │ │ │ │ │ ├── MessagePollVoteAdd.js │ │ │ │ │ ├── MessagePollVoteRemove.js │ │ │ │ │ ├── MessageReactionAdd.js │ │ │ │ │ ├── MessageReactionRemove.js │ │ │ │ │ ├── MessageReactionRemoveAll.js │ │ │ │ │ ├── MessageReactionRemoveEmoji.js │ │ │ │ │ ├── MessageUpdate.js │ │ │ │ │ ├── StageInstanceCreate.js │ │ │ │ │ ├── StageInstanceDelete.js │ │ │ │ │ ├── StageInstanceUpdate.js │ │ │ │ │ ├── ThreadCreate.js │ │ │ │ │ ├── ThreadMembersUpdate.js │ │ │ │ │ ├── TypingStart.js │ │ │ │ │ └── UserUpdate.js │ │ │ │ ├── voice/ │ │ │ │ │ └── ClientVoiceManager.js │ │ │ │ └── websocket/ │ │ │ │ └── handlers/ │ │ │ │ ├── APPLICATION_COMMAND_PERMISSIONS_UPDATE.js │ │ │ │ ├── AUTO_MODERATION_ACTION_EXECUTION.js │ │ │ │ ├── AUTO_MODERATION_RULE_CREATE.js │ │ │ │ ├── AUTO_MODERATION_RULE_DELETE.js │ │ │ │ ├── AUTO_MODERATION_RULE_UPDATE.js │ │ │ │ ├── CHANNEL_CREATE.js │ │ │ │ ├── CHANNEL_DELETE.js │ │ │ │ ├── CHANNEL_PINS_UPDATE.js │ │ │ │ ├── CHANNEL_UPDATE.js │ │ │ │ ├── ENTITLEMENT_CREATE.js │ │ │ │ ├── ENTITLEMENT_DELETE.js │ │ │ │ ├── ENTITLEMENT_UPDATE.js │ │ │ │ ├── GUILD_AUDIT_LOG_ENTRY_CREATE.js │ │ │ │ ├── GUILD_BAN_ADD.js │ │ │ │ ├── GUILD_BAN_REMOVE.js │ │ │ │ ├── GUILD_CREATE.js │ │ │ │ ├── GUILD_DELETE.js │ │ │ │ ├── GUILD_EMOJIS_UPDATE.js │ │ │ │ ├── GUILD_INTEGRATIONS_UPDATE.js │ │ │ │ ├── GUILD_MEMBERS_CHUNK.js │ │ │ │ ├── GUILD_MEMBER_ADD.js │ │ │ │ ├── GUILD_MEMBER_REMOVE.js │ │ │ │ ├── GUILD_MEMBER_UPDATE.js │ │ │ │ ├── GUILD_ROLE_CREATE.js │ │ │ │ ├── GUILD_ROLE_DELETE.js │ │ │ │ ├── GUILD_ROLE_UPDATE.js │ │ │ │ ├── GUILD_SCHEDULED_EVENT_CREATE.js │ │ │ │ ├── GUILD_SCHEDULED_EVENT_DELETE.js │ │ │ │ ├── GUILD_SCHEDULED_EVENT_UPDATE.js │ │ │ │ ├── GUILD_SCHEDULED_EVENT_USER_ADD.js │ │ │ │ ├── GUILD_SCHEDULED_EVENT_USER_REMOVE.js │ │ │ │ ├── GUILD_SOUNDBOARD_SOUNDS_UPDATE.js │ │ │ │ ├── GUILD_SOUNDBOARD_SOUND_CREATE.js │ │ │ │ ├── GUILD_SOUNDBOARD_SOUND_DELETE.js │ │ │ │ ├── GUILD_SOUNDBOARD_SOUND_UPDATE.js │ │ │ │ ├── GUILD_STICKERS_UPDATE.js │ │ │ │ ├── GUILD_UPDATE.js │ │ │ │ ├── INTERACTION_CREATE.js │ │ │ │ ├── INVITE_CREATE.js │ │ │ │ ├── INVITE_DELETE.js │ │ │ │ ├── MESSAGE_CREATE.js │ │ │ │ ├── MESSAGE_DELETE.js │ │ │ │ ├── MESSAGE_DELETE_BULK.js │ │ │ │ ├── MESSAGE_POLL_VOTE_ADD.js │ │ │ │ ├── MESSAGE_POLL_VOTE_REMOVE.js │ │ │ │ ├── MESSAGE_REACTION_ADD.js │ │ │ │ ├── MESSAGE_REACTION_REMOVE.js │ │ │ │ ├── MESSAGE_REACTION_REMOVE_ALL.js │ │ │ │ ├── MESSAGE_REACTION_REMOVE_EMOJI.js │ │ │ │ ├── MESSAGE_UPDATE.js │ │ │ │ ├── PRESENCE_UPDATE.js │ │ │ │ ├── RATE_LIMITED.js │ │ │ │ ├── READY.js │ │ │ │ ├── SOUNDBOARD_SOUNDS.js │ │ │ │ ├── STAGE_INSTANCE_CREATE.js │ │ │ │ ├── STAGE_INSTANCE_DELETE.js │ │ │ │ ├── STAGE_INSTANCE_UPDATE.js │ │ │ │ ├── SUBSCRIPTION_CREATE.js │ │ │ │ ├── SUBSCRIPTION_DELETE.js │ │ │ │ ├── SUBSCRIPTION_UPDATE.js │ │ │ │ ├── THREAD_CREATE.js │ │ │ │ ├── THREAD_DELETE.js │ │ │ │ ├── THREAD_LIST_SYNC.js │ │ │ │ ├── THREAD_MEMBERS_UPDATE.js │ │ │ │ ├── THREAD_MEMBER_UPDATE.js │ │ │ │ ├── THREAD_UPDATE.js │ │ │ │ ├── TYPING_START.js │ │ │ │ ├── USER_UPDATE.js │ │ │ │ ├── VOICE_CHANNEL_EFFECT_SEND.js │ │ │ │ ├── VOICE_SERVER_UPDATE.js │ │ │ │ ├── VOICE_STATE_UPDATE.js │ │ │ │ ├── WEBHOOKS_UPDATE.js │ │ │ │ └── index.js │ │ │ ├── errors/ │ │ │ │ ├── DJSError.js │ │ │ │ ├── ErrorCodes.js │ │ │ │ ├── Messages.js │ │ │ │ └── index.js │ │ │ ├── index.js │ │ │ ├── managers/ │ │ │ │ ├── ApplicationCommandManager.js │ │ │ │ ├── ApplicationCommandPermissionsManager.js │ │ │ │ ├── ApplicationEmojiManager.js │ │ │ │ ├── AutoModerationRuleManager.js │ │ │ │ ├── BaseManager.js │ │ │ │ ├── CachedManager.js │ │ │ │ ├── CategoryChannelChildManager.js │ │ │ │ ├── ChannelManager.js │ │ │ │ ├── DMMessageManager.js │ │ │ │ ├── DataManager.js │ │ │ │ ├── EntitlementManager.js │ │ │ │ ├── GuildApplicationCommandManager.js │ │ │ │ ├── GuildBanManager.js │ │ │ │ ├── GuildChannelManager.js │ │ │ │ ├── GuildEmojiManager.js │ │ │ │ ├── GuildEmojiRoleManager.js │ │ │ │ ├── GuildForumThreadManager.js │ │ │ │ ├── GuildInviteManager.js │ │ │ │ ├── GuildManager.js │ │ │ │ ├── GuildMemberManager.js │ │ │ │ ├── GuildMemberRoleManager.js │ │ │ │ ├── GuildMessageManager.js │ │ │ │ ├── GuildScheduledEventManager.js │ │ │ │ ├── GuildSoundboardSoundManager.js │ │ │ │ ├── GuildStickerManager.js │ │ │ │ ├── GuildTextThreadManager.js │ │ │ │ ├── MessageManager.js │ │ │ │ ├── PartialGroupDMMessageManager.js │ │ │ │ ├── PermissionOverwriteManager.js │ │ │ │ ├── PollAnswerVoterManager.js │ │ │ │ ├── PresenceManager.js │ │ │ │ ├── ReactionManager.js │ │ │ │ ├── ReactionUserManager.js │ │ │ │ ├── RoleManager.js │ │ │ │ ├── StageInstanceManager.js │ │ │ │ ├── SubscriptionManager.js │ │ │ │ ├── ThreadManager.js │ │ │ │ ├── ThreadMemberManager.js │ │ │ │ ├── UserManager.js │ │ │ │ └── VoiceStateManager.js │ │ │ ├── sharding/ │ │ │ │ ├── Shard.js │ │ │ │ ├── ShardClientUtil.js │ │ │ │ └── ShardingManager.js │ │ │ ├── structures/ │ │ │ │ ├── ActionRow.js │ │ │ │ ├── AnnouncementChannel.js │ │ │ │ ├── AnonymousGuild.js │ │ │ │ ├── ApplicationCommand.js │ │ │ │ ├── ApplicationEmoji.js │ │ │ │ ├── ApplicationRoleConnectionMetadata.js │ │ │ │ ├── Attachment.js │ │ │ │ ├── AuthorizingIntegrationOwners.js │ │ │ │ ├── AutoModerationActionExecution.js │ │ │ │ ├── AutoModerationRule.js │ │ │ │ ├── AutocompleteInteraction.js │ │ │ │ ├── Base.js │ │ │ │ ├── BaseChannel.js │ │ │ │ ├── BaseGuild.js │ │ │ │ ├── BaseGuildEmoji.js │ │ │ │ ├── BaseGuildTextChannel.js │ │ │ │ ├── BaseGuildVoiceChannel.js │ │ │ │ ├── BaseInteraction.js │ │ │ │ ├── BaseInvite.js │ │ │ │ ├── BaseSelectMenuComponent.js │ │ │ │ ├── ButtonComponent.js │ │ │ │ ├── ButtonInteraction.js │ │ │ │ ├── CategoryChannel.js │ │ │ │ ├── ChannelSelectMenuComponent.js │ │ │ │ ├── ChannelSelectMenuInteraction.js │ │ │ │ ├── ChatInputCommandInteraction.js │ │ │ │ ├── ClientApplication.js │ │ │ │ ├── ClientPresence.js │ │ │ │ ├── ClientUser.js │ │ │ │ ├── CommandInteraction.js │ │ │ │ ├── CommandInteractionOptionResolver.js │ │ │ │ ├── Component.js │ │ │ │ ├── ContainerComponent.js │ │ │ │ ├── ContextMenuCommandInteraction.js │ │ │ │ ├── DMChannel.js │ │ │ │ ├── DirectoryChannel.js │ │ │ │ ├── Embed.js │ │ │ │ ├── Emoji.js │ │ │ │ ├── Entitlement.js │ │ │ │ ├── FileComponent.js │ │ │ │ ├── ForumChannel.js │ │ │ │ ├── GroupDMInvite.js │ │ │ │ ├── Guild.js │ │ │ │ ├── GuildAuditLogs.js │ │ │ │ ├── GuildAuditLogsEntry.js │ │ │ │ ├── GuildBan.js │ │ │ │ ├── GuildChannel.js │ │ │ │ ├── GuildEmoji.js │ │ │ │ ├── GuildInvite.js │ │ │ │ ├── GuildMember.js │ │ │ │ ├── GuildOnboarding.js │ │ │ │ ├── GuildOnboardingPrompt.js │ │ │ │ ├── GuildOnboardingPromptOption.js │ │ │ │ ├── GuildPreview.js │ │ │ │ ├── GuildPreviewEmoji.js │ │ │ │ ├── GuildScheduledEvent.js │ │ │ │ ├── GuildTemplate.js │ │ │ │ ├── Integration.js │ │ │ │ ├── IntegrationApplication.js │ │ │ │ ├── InteractionCallback.js │ │ │ │ ├── InteractionCallbackResource.js │ │ │ │ ├── InteractionCallbackResponse.js │ │ │ │ ├── InteractionCollector.js │ │ │ │ ├── InteractionWebhook.js │ │ │ │ ├── InviteGuild.js │ │ │ │ ├── LabelComponent.js │ │ │ │ ├── MediaChannel.js │ │ │ │ ├── MediaGalleryComponent.js │ │ │ │ ├── MediaGalleryItem.js │ │ │ │ ├── MentionableSelectMenuComponent.js │ │ │ │ ├── MentionableSelectMenuInteraction.js │ │ │ │ ├── Message.js │ │ │ │ ├── MessageCollector.js │ │ │ │ ├── MessageComponentInteraction.js │ │ │ │ ├── MessageContextMenuCommandInteraction.js │ │ │ │ ├── MessageMentions.js │ │ │ │ ├── MessagePayload.js │ │ │ │ ├── MessageReaction.js │ │ │ │ ├── ModalComponentResolver.js │ │ │ │ ├── ModalSubmitInteraction.js │ │ │ │ ├── OAuth2Guild.js │ │ │ │ ├── PartialGroupDMChannel.js │ │ │ │ ├── PermissionOverwrites.js │ │ │ │ ├── Poll.js │ │ │ │ ├── PollAnswer.js │ │ │ │ ├── Presence.js │ │ │ │ ├── PrimaryEntryPointCommandInteraction.js │ │ │ │ ├── ReactionCollector.js │ │ │ │ ├── ReactionEmoji.js │ │ │ │ ├── Role.js │ │ │ │ ├── RoleSelectMenuComponent.js │ │ │ │ ├── RoleSelectMenuInteraction.js │ │ │ │ ├── SKU.js │ │ │ │ ├── SectionComponent.js │ │ │ │ ├── SeparatorComponent.js │ │ │ │ ├── SoundboardSound.js │ │ │ │ ├── StageChannel.js │ │ │ │ ├── StageInstance.js │ │ │ │ ├── Sticker.js │ │ │ │ ├── StickerPack.js │ │ │ │ ├── StringSelectMenuComponent.js │ │ │ │ ├── StringSelectMenuInteraction.js │ │ │ │ ├── Subscription.js │ │ │ │ ├── Team.js │ │ │ │ ├── TeamMember.js │ │ │ │ ├── TextChannel.js │ │ │ │ ├── TextDisplayComponent.js │ │ │ │ ├── TextInputComponent.js │ │ │ │ ├── ThreadChannel.js │ │ │ │ ├── ThreadMember.js │ │ │ │ ├── ThreadOnlyChannel.js │ │ │ │ ├── ThumbnailComponent.js │ │ │ │ ├── Typing.js │ │ │ │ ├── UnfurledMediaItem.js │ │ │ │ ├── User.js │ │ │ │ ├── UserContextMenuCommandInteraction.js │ │ │ │ ├── UserSelectMenuComponent.js │ │ │ │ ├── UserSelectMenuInteraction.js │ │ │ │ ├── VoiceChannel.js │ │ │ │ ├── VoiceChannelEffect.js │ │ │ │ ├── VoiceRegion.js │ │ │ │ ├── VoiceState.js │ │ │ │ ├── Webhook.js │ │ │ │ ├── WelcomeChannel.js │ │ │ │ ├── WelcomeScreen.js │ │ │ │ ├── Widget.js │ │ │ │ ├── WidgetMember.js │ │ │ │ └── interfaces/ │ │ │ │ ├── Application.js │ │ │ │ ├── Collector.js │ │ │ │ ├── InteractionResponses.js │ │ │ │ └── TextBasedChannel.js │ │ │ └── util/ │ │ │ ├── APITypes.js │ │ │ ├── ActivityFlagsBitField.js │ │ │ ├── ApplicationFlagsBitField.js │ │ │ ├── AttachmentFlagsBitField.js │ │ │ ├── BitField.js │ │ │ ├── ChannelFlagsBitField.js │ │ │ ├── Channels.js │ │ │ ├── Colors.js │ │ │ ├── Components.js │ │ │ ├── Constants.js │ │ │ ├── DataResolver.js │ │ │ ├── Enums.js │ │ │ ├── Events.js │ │ │ ├── GuildMemberFlagsBitField.js │ │ │ ├── IntentsBitField.js │ │ │ ├── InviteFlagsBitField.js │ │ │ ├── Invites.js │ │ │ ├── LimitedCollection.js │ │ │ ├── MessageFlagsBitField.js │ │ │ ├── Options.js │ │ │ ├── Partials.js │ │ │ ├── PermissionsBitField.js │ │ │ ├── RoleFlagsBitField.js │ │ │ ├── SKUFlagsBitField.js │ │ │ ├── ShardEvents.js │ │ │ ├── Status.js │ │ │ ├── Sweepers.js │ │ │ ├── Symbols.js │ │ │ ├── SystemChannelFlagsBitField.js │ │ │ ├── ThreadMemberFlagsBitField.js │ │ │ ├── Transformers.js │ │ │ ├── UserFlagsBitField.js │ │ │ └── Util.js │ │ ├── test/ │ │ │ ├── createGuild.js │ │ │ ├── messages.js │ │ │ ├── monetization.js │ │ │ ├── polls.js │ │ │ ├── random.js │ │ │ ├── reactionCollectorCreated.test.js │ │ │ ├── resolveGuildTemplateCode.test.js │ │ │ ├── sendtest.js │ │ │ ├── shard.js │ │ │ ├── sharder.js │ │ │ ├── templateCreateGuild.js │ │ │ ├── tester1000.js │ │ │ ├── tester2000.js │ │ │ └── webhooktest.js │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ ├── tsdoc.json │ │ └── typings/ │ │ ├── index.d.ts │ │ ├── index.test-d.ts │ │ └── tsdoc-metadata.json │ ├── docgen/ │ │ ├── .gitignore │ │ ├── .lintstagedrc.js │ │ ├── .prettierignore │ │ ├── .prettierrc.js │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bin/ │ │ │ ├── index.js │ │ │ └── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── documentation.ts │ │ │ ├── index.ts │ │ │ ├── interfaces/ │ │ │ │ ├── access.type.ts │ │ │ │ ├── childTypes.type.ts │ │ │ │ ├── class.interface.ts │ │ │ │ ├── config.interface.ts │ │ │ │ ├── constructor.interface.ts │ │ │ │ ├── customDocs.interface.ts │ │ │ │ ├── event.interface.ts │ │ │ │ ├── exception.interface.ts │ │ │ │ ├── external.interface.ts │ │ │ │ ├── index.ts │ │ │ │ ├── interface.interface.ts │ │ │ │ ├── item.interface.ts │ │ │ │ ├── member.interface.ts │ │ │ │ ├── meta.interface.ts │ │ │ │ ├── method.interface.ts │ │ │ │ ├── param.interface.ts │ │ │ │ ├── return.interface.ts │ │ │ │ ├── rootTypes.type.ts │ │ │ │ ├── scope.type.ts │ │ │ │ ├── type.interface.ts │ │ │ │ ├── typedef.interface.ts │ │ │ │ └── var-type.interface.ts │ │ │ ├── types/ │ │ │ │ ├── class.ts │ │ │ │ ├── constructor.ts │ │ │ │ ├── event.ts │ │ │ │ ├── external.ts │ │ │ │ ├── interface.ts │ │ │ │ ├── item-meta.ts │ │ │ │ ├── item.ts │ │ │ │ ├── member.ts │ │ │ │ ├── method.ts │ │ │ │ ├── param.ts │ │ │ │ ├── typedef.ts │ │ │ │ └── var-type.ts │ │ │ └── util/ │ │ │ ├── parseType.ts │ │ │ ├── splitVarName.ts │ │ │ └── types.ts │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── formatters/ │ │ ├── .cliff-jumperrc.json │ │ ├── .gitignore │ │ ├── .lintstagedrc.js │ │ ├── .prettierignore │ │ ├── .prettierrc.js │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── escapers.test.ts │ │ │ └── formatters.test.ts │ │ ├── api-extractor.json │ │ ├── cliff.toml │ │ ├── docs/ │ │ │ └── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── escapers.ts │ │ │ ├── formatters.ts │ │ │ └── index.ts │ │ ├── tsconfig.docs.json │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ ├── tsconfig.test.json │ │ └── tsup.config.ts │ ├── next/ │ │ ├── .cliff-jumperrc.json │ │ ├── .gitignore │ │ ├── .lintstagedrc.js │ │ ├── .prettierignore │ │ ├── .prettierrc.js │ │ ├── LICENSE │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── fake.test.ts │ │ ├── api-extractor.json │ │ ├── cliff.toml │ │ ├── docs/ │ │ │ └── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── exports/ │ │ │ │ ├── builders.ts │ │ │ │ ├── collection.ts │ │ │ │ ├── core.ts │ │ │ │ ├── discord-api-types.ts │ │ │ │ ├── formatters.ts │ │ │ │ ├── rest.ts │ │ │ │ ├── util.ts │ │ │ │ └── ws.ts │ │ │ └── index.ts │ │ ├── tsconfig.docs.json │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ ├── tsconfig.test.json │ │ └── tsup.config.ts │ ├── proxy/ │ │ ├── .cliff-jumperrc.json │ │ ├── .gitignore │ │ ├── .lintstagedrc.js │ │ ├── .prettierignore │ │ ├── .prettierrc.js │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── proxyRequests.test.ts │ │ ├── api-extractor.json │ │ ├── cliff.toml │ │ ├── docs/ │ │ │ └── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── handlers/ │ │ │ │ └── proxyRequests.ts │ │ │ ├── index.ts │ │ │ └── util/ │ │ │ ├── responseHelpers.ts │ │ │ └── util.ts │ │ ├── tsconfig.docs.json │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ ├── tsconfig.test.json │ │ └── tsup.config.ts │ ├── rest/ │ │ ├── .cliff-jumperrc.json │ │ ├── .gitignore │ │ ├── .lintstagedrc.js │ │ ├── .prettierignore │ │ ├── .prettierrc.js │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── BurstHandler.test.ts │ │ │ ├── CDN.test.ts │ │ │ ├── DiscordAPIError.test.ts │ │ │ ├── REST.test.ts │ │ │ ├── RequestHandler.test.ts │ │ │ ├── RequestManager.test.ts │ │ │ ├── UndiciRequest.test.ts │ │ │ ├── setup.ts │ │ │ ├── util.ts │ │ │ └── utils.test.ts │ │ ├── api-extractor.json │ │ ├── cliff.toml │ │ ├── docs/ │ │ │ └── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── environment.ts │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ ├── CDN.ts │ │ │ │ ├── REST.ts │ │ │ │ ├── errors/ │ │ │ │ │ ├── DiscordAPIError.ts │ │ │ │ │ ├── HTTPError.ts │ │ │ │ │ └── RateLimitError.ts │ │ │ │ ├── handlers/ │ │ │ │ │ ├── BurstHandler.ts │ │ │ │ │ ├── SequentialHandler.ts │ │ │ │ │ └── Shared.ts │ │ │ │ ├── interfaces/ │ │ │ │ │ └── Handler.ts │ │ │ │ └── utils/ │ │ │ │ ├── constants.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ ├── shared.ts │ │ │ ├── strategies/ │ │ │ │ └── undiciRequest.ts │ │ │ └── web.ts │ │ ├── tsconfig.docs.json │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ ├── tsconfig.test.json │ │ ├── tsup.config.ts │ │ └── vitest.config.ts │ ├── scripts/ │ │ ├── .gitignore │ │ ├── .lintstagedrc.js │ │ ├── .prettierignore │ │ ├── .prettierrc.js │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bin/ │ │ │ ├── generateSplitDocumentation.js │ │ │ ├── generateSplitDocumentation.ts │ │ │ ├── sortLabels.js │ │ │ └── sortLabels.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── builtinDocumentationLinks.ts │ │ │ ├── generateIndex.ts │ │ │ ├── generateSplitDocumentation.ts │ │ │ ├── index.ts │ │ │ ├── populateDevDatabaseBranch.ts │ │ │ └── shared.ts │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ ├── tsup.config.ts │ │ └── turbo/ │ │ └── generators/ │ │ ├── config.ts │ │ └── templates/ │ │ └── default/ │ │ ├── .cliff-jumperrc.json.hbs │ │ ├── .gitignore │ │ ├── .lintstagedrc.js.hbs │ │ ├── .prettierignore │ │ ├── .prettierrc.js.hbs │ │ ├── LICENSE │ │ ├── api-extractor.json.hbs │ │ ├── cliff.toml │ │ ├── package.json.hbs │ │ ├── tsconfig.docs.json │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ ├── tsconfig.test.json │ │ └── tsup.config.ts │ ├── structures/ │ │ ├── .cliff-jumperrc.json │ │ ├── .gitignore │ │ ├── .lintstagedrc.js │ │ ├── .prettierignore │ │ ├── .prettierrc.js │ │ ├── LICENSE │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── Mixin.test.ts │ │ │ ├── Structure.test.ts │ │ │ ├── channels.test.ts │ │ │ ├── invite.test.ts │ │ │ ├── message.test.ts │ │ │ ├── mixinClasses.ts │ │ │ └── types/ │ │ │ ├── Mixin.test-d.ts │ │ │ └── channels.test-d.ts │ │ ├── api-extractor.json │ │ ├── cliff.toml │ │ ├── docs/ │ │ │ └── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── Mixin.ts │ │ │ ├── MixinTypes.d.ts │ │ │ ├── Structure.ts │ │ │ ├── automoderation/ │ │ │ │ ├── AutoModerationRule.ts │ │ │ │ ├── AutoModerationRuleTriggerMetadata.ts │ │ │ │ ├── actions/ │ │ │ │ │ ├── AutoModerationAction.ts │ │ │ │ │ ├── AutoModerationActionMetadata.ts │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── bitfields/ │ │ │ │ ├── AttachmentFlagsBitField.ts │ │ │ │ ├── BitField.ts │ │ │ │ ├── ChannelFlagsBitField.ts │ │ │ │ ├── MessageFlagsBitField.ts │ │ │ │ ├── PermissionsBitField.ts │ │ │ │ ├── SKUFlagsBitField.ts │ │ │ │ └── index.ts │ │ │ ├── channels/ │ │ │ │ ├── AnnouncementChannel.ts │ │ │ │ ├── AnnouncementThreadChannel.ts │ │ │ │ ├── CategoryChannel.ts │ │ │ │ ├── Channel.ts │ │ │ │ ├── DMChannel.ts │ │ │ │ ├── ForumChannel.ts │ │ │ │ ├── ForumTag.ts │ │ │ │ ├── GroupDMChannel.ts │ │ │ │ ├── MediaChannel.ts │ │ │ │ ├── PermissionOverwrite.ts │ │ │ │ ├── PrivateThreadChannel.ts │ │ │ │ ├── PublicThreadChannel.ts │ │ │ │ ├── StageChannel.ts │ │ │ │ ├── TextChannel.ts │ │ │ │ ├── ThreadMetadata.ts │ │ │ │ ├── VoiceChannel.ts │ │ │ │ ├── index.ts │ │ │ │ └── mixins/ │ │ │ │ ├── AppliedTagsMixin.ts │ │ │ │ ├── ChannelOwnerMixin.ts │ │ │ │ ├── ChannelParentMixin.ts │ │ │ │ ├── ChannelPermissionMixin.ts │ │ │ │ ├── ChannelPinMixin.ts │ │ │ │ ├── ChannelSlowmodeMixin.ts │ │ │ │ ├── ChannelTopicMixin.ts │ │ │ │ ├── ChannelWebhookMixin.ts │ │ │ │ ├── DMChannelMixin.ts │ │ │ │ ├── GroupDMMixin.ts │ │ │ │ ├── GuildChannelMixin.ts │ │ │ │ ├── TextChannelMixin.ts │ │ │ │ ├── ThreadChannelMixin.ts │ │ │ │ ├── ThreadOnlyChannelMixin.ts │ │ │ │ ├── VoiceChannelMixin.ts │ │ │ │ └── index.ts │ │ │ ├── emojis/ │ │ │ │ ├── Emoji.ts │ │ │ │ └── index.ts │ │ │ ├── entitlements/ │ │ │ │ ├── Entitlement.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── interactions/ │ │ │ │ ├── ResolvedInteractionData.ts │ │ │ │ └── index.ts │ │ │ ├── invites/ │ │ │ │ ├── Invite.ts │ │ │ │ └── index.ts │ │ │ ├── messages/ │ │ │ │ ├── ApplicationCommandInteractionMetadata.ts │ │ │ │ ├── Attachment.ts │ │ │ │ ├── ChannelMention.ts │ │ │ │ ├── InteractionMetadata.ts │ │ │ │ ├── Message.ts │ │ │ │ ├── MessageActivity.ts │ │ │ │ ├── MessageCall.ts │ │ │ │ ├── MessageComponentInteractionMetadata.ts │ │ │ │ ├── MessageReference.ts │ │ │ │ ├── ModalSubmitInteractionMetadata.ts │ │ │ │ ├── Reaction.ts │ │ │ │ ├── ReactionCountDetails.ts │ │ │ │ ├── RoleSubscriptionData.ts │ │ │ │ ├── components/ │ │ │ │ │ ├── ActionRowComponent.ts │ │ │ │ │ ├── ButtonComponent.ts │ │ │ │ │ ├── ChannelSelectMenuComponent.ts │ │ │ │ │ ├── Component.ts │ │ │ │ │ ├── ComponentEmoji.ts │ │ │ │ │ ├── ContainerComponent.ts │ │ │ │ │ ├── FileComponent.ts │ │ │ │ │ ├── FileUploadComponent.ts │ │ │ │ │ ├── InteractiveButtonComponent.ts │ │ │ │ │ ├── LabelComponent.ts │ │ │ │ │ ├── LabeledButtonComponent.ts │ │ │ │ │ ├── LinkButtonComponent.ts │ │ │ │ │ ├── MediaGalleryComponent.ts │ │ │ │ │ ├── MediaGalleryItem.ts │ │ │ │ │ ├── MentionableSelectMenuComponent.ts │ │ │ │ │ ├── PremiumButtonComponent.ts │ │ │ │ │ ├── RoleSelectMenuComponent.ts │ │ │ │ │ ├── SectionComponent.ts │ │ │ │ │ ├── SelectMenuComponent.ts │ │ │ │ │ ├── SelectMenuDefaultValue.ts │ │ │ │ │ ├── SeparatorComponent.ts │ │ │ │ │ ├── StringSelectMenuComponent.ts │ │ │ │ │ ├── StringSelectMenuOption.ts │ │ │ │ │ ├── TextDisplayComponent.ts │ │ │ │ │ ├── TextInputComponent.ts │ │ │ │ │ ├── ThumbnailComponent.ts │ │ │ │ │ ├── UnfurledMediaItem.ts │ │ │ │ │ ├── UserSelectMenuComponent.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── embeds/ │ │ │ │ │ ├── Embed.ts │ │ │ │ │ ├── EmbedAuthor.ts │ │ │ │ │ ├── EmbedField.ts │ │ │ │ │ ├── EmbedFooter.ts │ │ │ │ │ ├── EmbedImage.ts │ │ │ │ │ ├── EmbedProvider.ts │ │ │ │ │ ├── EmbedThumbnail.ts │ │ │ │ │ ├── EmbedVideo.ts │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── polls/ │ │ │ │ ├── Poll.ts │ │ │ │ ├── PollAnswer.ts │ │ │ │ ├── PollAnswerCount.ts │ │ │ │ ├── PollMedia.ts │ │ │ │ ├── PollResults.ts │ │ │ │ └── index.ts │ │ │ ├── skus/ │ │ │ │ ├── SKU.ts │ │ │ │ └── index.ts │ │ │ ├── soundboards/ │ │ │ │ ├── SoundboardSound.ts │ │ │ │ └── index.ts │ │ │ ├── stageInstances/ │ │ │ │ ├── StageInstance.ts │ │ │ │ └── index.ts │ │ │ ├── stickers/ │ │ │ │ ├── Sticker.ts │ │ │ │ ├── StickerPack.ts │ │ │ │ └── index.ts │ │ │ ├── subscriptions/ │ │ │ │ ├── Subscription.ts │ │ │ │ └── index.ts │ │ │ ├── teams/ │ │ │ │ ├── Team.ts │ │ │ │ ├── TeamMember.ts │ │ │ │ └── index.ts │ │ │ ├── users/ │ │ │ │ ├── AvatarDecorationData.ts │ │ │ │ ├── Connection.ts │ │ │ │ ├── User.ts │ │ │ │ └── index.ts │ │ │ ├── utils/ │ │ │ │ ├── optimization.ts │ │ │ │ ├── symbols.ts │ │ │ │ ├── type-guards.ts │ │ │ │ └── types.ts │ │ │ ├── voice/ │ │ │ │ ├── VoiceRegion.ts │ │ │ │ ├── VoiceState.ts │ │ │ │ └── index.ts │ │ │ └── webhooks/ │ │ │ ├── Webhook.ts │ │ │ └── index.ts │ │ ├── tsconfig.docs.json │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ ├── tsconfig.test.json │ │ └── tsup.config.ts │ ├── ui/ │ │ ├── .cliff-jumperrc.json │ │ ├── .gitignore │ │ ├── .lintstagedrc.cjs │ │ ├── .prettierignore │ │ ├── .prettierrc.cjs │ │ ├── .storybook/ │ │ │ ├── main.ts │ │ │ ├── preview.css │ │ │ └── preview.ts │ │ ├── LICENSE │ │ ├── README.md │ │ ├── cliff.toml │ │ ├── package.json │ │ ├── src/ │ │ │ └── lib/ │ │ │ ├── components/ │ │ │ │ ├── Alert.stories.tsx │ │ │ │ ├── Alert.tsx │ │ │ │ ├── Section.stories.tsx │ │ │ │ ├── Section.tsx │ │ │ │ └── discord/ │ │ │ │ ├── DiscordMessages.stories.tsx │ │ │ │ ├── Message.tsx │ │ │ │ ├── MessageAuthor.tsx │ │ │ │ ├── MessageAuthorReply.tsx │ │ │ │ ├── MessageBaseReply.tsx │ │ │ │ ├── MessageEmbed.tsx │ │ │ │ ├── MessageEmbedAuthor.tsx │ │ │ │ ├── MessageEmbedField.tsx │ │ │ │ ├── MessageEmbedFields.tsx │ │ │ │ ├── MessageEmbedFooter.tsx │ │ │ │ ├── MessageEmbedImage.tsx │ │ │ │ ├── MessageEmbedThumbnail.tsx │ │ │ │ ├── MessageEmbedTitle.tsx │ │ │ │ ├── MessageInteraction.tsx │ │ │ │ ├── MessageReply.tsx │ │ │ │ └── Messages.tsx │ │ │ └── index.ts │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── util/ │ │ ├── .cliff-jumperrc.json │ │ ├── .gitignore │ │ ├── .lintstagedrc.js │ │ ├── .prettierignore │ │ ├── .prettierrc.js │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── Equatable.test.ts │ │ │ ├── JSONEncodable.test.ts │ │ │ ├── embedLength.test.ts │ │ │ ├── lazy.test.ts │ │ │ ├── range.test.ts │ │ │ └── types/ │ │ │ ├── Equatable.test-d.ts │ │ │ └── JSONEncodable.test-d.ts │ │ ├── api-extractor.json │ │ ├── cliff.toml │ │ ├── docs/ │ │ │ └── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── Equatable.ts │ │ │ ├── RawFile.ts │ │ │ ├── encodables.ts │ │ │ ├── functions/ │ │ │ │ ├── calculateShardId.ts │ │ │ │ ├── embedLength.ts │ │ │ │ ├── index.ts │ │ │ │ ├── lazy.ts │ │ │ │ ├── range.ts │ │ │ │ ├── runtime.ts │ │ │ │ └── userAgentAppendix.ts │ │ │ ├── gatewayRateLimitError.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── tsconfig.docs.json │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ ├── tsconfig.test.json │ │ └── tsup.config.ts │ ├── voice/ │ │ ├── .cliff-jumperrc.json │ │ ├── .gitignore │ │ ├── .lintstagedrc.js │ │ ├── .prettierignore │ │ ├── .prettierrc.js │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── __mocks__/ │ │ │ └── rtp.ts │ │ ├── __tests__/ │ │ │ ├── AudioPlayer.test.ts │ │ │ ├── AudioReceiveStream.test.ts │ │ │ ├── AudioResource.test.ts │ │ │ ├── DataStore.test.ts │ │ │ ├── SSRCMap.test.ts │ │ │ ├── Secretbox.test.ts │ │ │ ├── SpeakingMap.test.ts │ │ │ ├── TransformerGraph.test.ts │ │ │ ├── VoiceConnection.test.ts │ │ │ ├── VoiceReceiver.test.ts │ │ │ ├── VoiceUDPSocket.test.ts │ │ │ ├── VoiceWebSocket.test.ts │ │ │ ├── abortAfter.test.ts │ │ │ ├── demuxProbe.test.ts │ │ │ ├── entersState.test.ts │ │ │ └── joinVoiceChannel.test.ts │ │ ├── api-extractor.json │ │ ├── cliff.toml │ │ ├── docs/ │ │ │ └── README.md │ │ ├── package.json │ │ ├── scripts/ │ │ │ └── postbuild.mjs │ │ ├── src/ │ │ │ ├── DataStore.ts │ │ │ ├── VoiceConnection.ts │ │ │ ├── audio/ │ │ │ │ ├── AudioPlayer.ts │ │ │ │ ├── AudioPlayerError.ts │ │ │ │ ├── AudioResource.ts │ │ │ │ ├── PlayerSubscription.ts │ │ │ │ ├── TransformerGraph.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── joinVoiceChannel.ts │ │ │ ├── networking/ │ │ │ │ ├── DAVESession.ts │ │ │ │ ├── Networking.ts │ │ │ │ ├── VoiceUDPSocket.ts │ │ │ │ ├── VoiceWebSocket.ts │ │ │ │ └── index.ts │ │ │ ├── receive/ │ │ │ │ ├── AudioReceiveStream.ts │ │ │ │ ├── SSRCMap.ts │ │ │ │ ├── SpeakingMap.ts │ │ │ │ ├── VoiceReceiver.ts │ │ │ │ └── index.ts │ │ │ └── util/ │ │ │ ├── Secretbox.ts │ │ │ ├── abortAfter.ts │ │ │ ├── adapter.ts │ │ │ ├── constants.ts │ │ │ ├── demuxProbe.ts │ │ │ ├── entersState.ts │ │ │ ├── generateDependencyReport.ts │ │ │ ├── index.ts │ │ │ └── util.ts │ │ ├── tsconfig.docs.json │ │ ├── tsconfig.eslint.json │ │ ├── tsconfig.json │ │ ├── tsconfig.test.json │ │ └── tsup.config.ts │ └── ws/ │ ├── .cliff-jumperrc.json │ ├── .gitignore │ ├── .lintstagedrc.js │ ├── .prettierignore │ ├── .prettierrc.js │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── __tests__/ │ │ ├── gateway.mock.ts │ │ ├── strategy/ │ │ │ ├── WorkerContextFetchingStrategy.test.ts │ │ │ └── WorkerShardingStrategy.test.ts │ │ ├── types/ │ │ │ └── WebSocketManager.test-d.ts │ │ ├── util/ │ │ │ └── SimpleIdentifyThrottler.test.ts │ │ └── ws/ │ │ └── WebSocketManager.test.ts │ ├── api-extractor.json │ ├── cliff.toml │ ├── docs/ │ │ └── README.md │ ├── package.json │ ├── src/ │ │ ├── index.ts │ │ ├── strategies/ │ │ │ ├── context/ │ │ │ │ ├── IContextFetchingStrategy.ts │ │ │ │ ├── SimpleContextFetchingStrategy.ts │ │ │ │ └── WorkerContextFetchingStrategy.ts │ │ │ └── sharding/ │ │ │ ├── IShardingStrategy.ts │ │ │ ├── SimpleShardingStrategy.ts │ │ │ ├── WorkerShardingStrategy.ts │ │ │ └── defaultWorker.ts │ │ ├── throttling/ │ │ │ ├── IIdentifyThrottler.ts │ │ │ └── SimpleIdentifyThrottler.ts │ │ ├── utils/ │ │ │ ├── WorkerBootstrapper.ts │ │ │ └── constants.ts │ │ └── ws/ │ │ ├── WebSocketManager.ts │ │ └── WebSocketShard.ts │ ├── tsconfig.docs.json │ ├── tsconfig.eslint.json │ ├── tsconfig.json │ ├── tsconfig.test.json │ └── tsup.config.ts ├── patches/ │ └── @microsoft__tsdoc-config@0.17.1.patch ├── pnpm-workspace.yaml ├── tsconfig.docs.json ├── tsconfig.eslint.json ├── tsconfig.json ├── tsup.config.ts ├── turbo.json ├── unocss.config.ts └── vitest.config.ts
Showing preview only (551K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6041 symbols across 858 files)
FILE: apps/guide/next.config.ts
method webpack (line 29) | webpack(config) {
FILE: apps/guide/src/app/[[...slug]]/page.tsx
function generateStaticParams (line 7) | async function generateStaticParams() {
function generateMetadata (line 11) | async function generateMetadata(props: { params: Promise<{ slug?: string...
function Page (line 33) | async function Page(props: { readonly params: Promise<{ slug?: string[] ...
FILE: apps/guide/src/app/layout.client.tsx
function Body (line 6) | function Body({ children }: { readonly children: ReactNode }): React.Rea...
function useMode (line 13) | function useMode(): string | undefined {
FILE: apps/guide/src/app/layout.tsx
function RootLayout (line 54) | async function RootLayout({ children }: PropsWithChildren) {
FILE: apps/guide/src/app/og/[...slug]/route.tsx
function generateStaticParams (line 6) | function generateStaticParams() {
function loadGoogleFont (line 13) | async function loadGoogleFont(font: string, text: string) {
function GET (line 36) | async function GET(_req: Request, { params }: { params: Promise<{ slug: ...
FILE: apps/guide/src/components/GitHubInfo.tsx
function getRepoStars (line 8) | async function getRepoStars(owner: string, repo: string, token?: string)...
function GithubInfo (line 34) | async function GithubInfo({
function humanizeNumber (line 79) | function humanizeNumber(num: number): string {
FILE: apps/guide/src/components/mdx/mermaid.tsx
function Mermaid (line 6) | function Mermaid({ chart }: { readonly chart: string }) {
FILE: apps/guide/src/lib/source.ts
method icon (line 7) | icon(icon) {
FILE: apps/guide/src/mdx-components.tsx
function getMDXComponents (line 7) | function getMDXComponents(components?: MDXComponents): MDXComponents {
FILE: apps/guide/src/middleware.ts
function middleware (line 3) | function middleware(request: NextRequest) {
FILE: apps/guide/src/util/env.ts
constant ENV (line 1) | const ENV = {
FILE: apps/website/next.config.ts
method redirects (line 25) | async redirects() {
FILE: apps/website/src/app/api/docs/entrypoints/route.ts
function GET (line 4) | async function GET(request: NextRequest) {
FILE: apps/website/src/app/api/docs/sitemap/route.ts
function GET (line 4) | async function GET(request: NextRequest) {
FILE: apps/website/src/app/api/docs/versions/route.ts
function GET (line 4) | async function GET(request: NextRequest) {
FILE: apps/website/src/app/docs/packages/[packageName]/[version]/[[...item]]/CmdK.tsx
function CmdK (line 4) | async function CmdK({
FILE: apps/website/src/app/docs/packages/[packageName]/[version]/[[...item]]/layout.tsx
function generateMetadata (line 5) | async function generateMetadata({
function Layout (line 24) | async function Layout({
FILE: apps/website/src/app/docs/packages/[packageName]/[version]/[[...item]]/page.tsx
function generateMetadata (line 11) | async function generateMetadata({
function Page (line 38) | async function Page({
FILE: apps/website/src/app/docs/packages/layout.tsx
function Layout (line 10) | async function Layout({ children }: PropsWithChildren) {
FILE: apps/website/src/app/layout.tsx
function RootLayout (line 54) | async function RootLayout({ children }: PropsWithChildren) {
FILE: apps/website/src/app/not-found.tsx
function NotFound (line 3) | function NotFound() {
FILE: apps/website/src/app/opengraph-image.tsx
function loadGoogleFont (line 12) | async function loadGoogleFont(font: string, text: string) {
function Image (line 28) | async function Image() {
FILE: apps/website/src/app/page.tsx
function Page (line 10) | async function Page() {
FILE: apps/website/src/app/providers.tsx
function makeQueryClient (line 14) | function makeQueryClient() {
function getQueryClient (line 26) | function getQueryClient() {
function Providers (line 36) | function Providers({ children }: PropsWithChildren) {
FILE: apps/website/src/components/Badges.tsx
function Badge (line 4) | function Badge({ children, className = '' }: PropsWithChildren<{ readonl...
function Badges (line 14) | async function Badges({ node }: { readonly node: any }) {
FILE: apps/website/src/components/CmdK.tsx
function CmdK (line 22) | function CmdK({ dependencies }: { readonly dependencies: string[] }) {
FILE: apps/website/src/components/ConstructorNode.tsx
function ConstructorNode (line 11) | async function ConstructorNode({ node, version }: { readonly node: any; ...
FILE: apps/website/src/components/DeprecatedNode.tsx
function DeprecatedNode (line 4) | async function DeprecatedNode({
FILE: apps/website/src/components/DocItem.tsx
function OverloadNode (line 21) | async function OverloadNode({
function DocItem (line 56) | async function DocItem({
FILE: apps/website/src/components/DocKind.tsx
function resolveNodeKind (line 1) | function resolveNodeKind(kind: string) {
function DocKind (line 41) | async function DocKind({ background = false, node }: { readonly backgrou...
FILE: apps/website/src/components/DocNode.tsx
function DocNode (line 6) | async function DocNode({ node, version }: { readonly node?: any; readonl...
FILE: apps/website/src/components/EntrypointSelect.tsx
function EntryPointSelect (line 9) | function EntryPointSelect({
FILE: apps/website/src/components/EnumMemberNode.tsx
function EnumMemberNode (line 17) | async function EnumMemberNode({
FILE: apps/website/src/components/EventNode.tsx
function EventBodyNode (line 18) | async function EventBodyNode({
function OverloadNode (line 101) | async function OverloadNode({
function EventNode (line 136) | async function EventNode({
FILE: apps/website/src/components/ExampleNode.tsx
function ExampleNode (line 3) | async function ExampleNode({ node, version }: { readonly node: any; read...
FILE: apps/website/src/components/ExcerptNode.tsx
function ExcerptNode (line 5) | async function ExcerptNode({ node, version }: { readonly node?: any; rea...
FILE: apps/website/src/components/Footer.tsx
function Footer (line 5) | function Footer() {
FILE: apps/website/src/components/InformationNode.tsx
function InformationNode (line 6) | async function InformationNode({ node, version }: { readonly node: any; ...
FILE: apps/website/src/components/InheritanceNode.tsx
function InheritanceNode (line 3) | async function InheritanceNode({
FILE: apps/website/src/components/InheritedFromNode.tsx
function InheritedFromNode (line 3) | async function InheritedFromNode({
FILE: apps/website/src/components/InstallButton.tsx
function InstallButton (line 7) | function InstallButton({ className = '' }: { readonly className?: string...
FILE: apps/website/src/components/MethodNode.tsx
function MethodBodyNode (line 19) | async function MethodBodyNode({
function OverloadNode (line 105) | async function OverloadNode({
function MethodNode (line 140) | async function MethodNode({
FILE: apps/website/src/components/Navigation.tsx
function Navigation (line 11) | function Navigation() {
FILE: apps/website/src/components/NavigationItem.tsx
function NavigationItem (line 10) | function NavigationItem({
FILE: apps/website/src/components/Outline.tsx
function Outline (line 10) | async function Outline({ node }: { readonly node: any }) {
FILE: apps/website/src/components/OverlayScrollbars.tsx
function Scrollbars (line 10) | function Scrollbars(props: OverlayScrollbarsComponentProps) {
FILE: apps/website/src/components/PackageSelect.tsx
function PackageSelect (line 7) | function PackageSelect() {
FILE: apps/website/src/components/ParameterNode.tsx
function ParameterNode (line 8) | async function ParameterNode({
FILE: apps/website/src/components/PropertyNode.tsx
function PropertyNode (line 15) | async function PropertyNode({
FILE: apps/website/src/components/ReturnNode.tsx
function ReturnNode (line 3) | async function ReturnNode({
FILE: apps/website/src/components/SearchButton.tsx
function SearchButton (line 8) | function SearchButton() {
FILE: apps/website/src/components/SeeNode.tsx
function SeeNode (line 3) | async function SeeNode({
FILE: apps/website/src/components/Sidebar.tsx
function SidebarHeader (line 17) | function SidebarHeader() {
FILE: apps/website/src/components/SummaryNode.tsx
function SummaryNode (line 3) | async function SummaryNode({
FILE: apps/website/src/components/SyntaxHighlighter.tsx
function SyntaxHighlighter (line 3) | async function SyntaxHighlighter({
FILE: apps/website/src/components/ThemeSwitch.tsx
function ThemeSwitch (line 8) | function ThemeSwitch() {
FILE: apps/website/src/components/TypeParameterNode.tsx
function TypeParameterNode (line 10) | async function TypeParameterNode({
FILE: apps/website/src/components/UnionMember.tsx
function UnionMember (line 3) | async function UnionMember({ node, version }: { readonly node: any; read...
FILE: apps/website/src/components/UnstableNode.tsx
function UnstableNode (line 4) | async function UnstableNode({
FILE: apps/website/src/components/VersionSelect.tsx
function VersionSelect (line 8) | function VersionSelect({
FILE: apps/website/src/components/ui/Alert.tsx
type IAlert (line 6) | interface IAlert {
function resolveType (line 11) | function resolveType(type: IAlert['type']) {
function Alert (line 47) | async function Alert({ title, type, children }: PropsWithChildren<IAlert...
FILE: apps/website/src/components/ui/Button.tsx
type ButtonProps (line 8) | type ButtonProps = RACButtonProps & VariantProps<typeof buttonStyles>;
function Button (line 10) | function Button(props: ButtonProps) {
FILE: apps/website/src/components/ui/Dialog.tsx
function Dialog (line 11) | function Dialog(props: ComponentProps<typeof RACDialog>) {
type DialogHeaderProps (line 24) | type DialogHeaderProps = ComponentPropsWithoutRef<'div'> & {
function DialogHeader (line 30) | function DialogHeader({ hasBorder = false, ...props }: DialogHeaderProps) {
type DialogTitleProps (line 67) | type DialogTitleProps = RACHeadingProps & {
function DialogTitle (line 71) | function DialogTitle({ level = 2, ...props }: DialogTitleProps) {
type DialogDescriptionProps (line 82) | type DialogDescriptionProps = ComponentProps<'div'>;
function DialogDescription (line 84) | function DialogDescription(props: DialogDescriptionProps) {
type DialogBodyProps (line 88) | type DialogBodyProps = ComponentProps<'div'>;
function DialogBody (line 90) | function DialogBody(props: DialogBodyProps) {
type DialogFooterProps (line 103) | type DialogFooterProps = ComponentProps<'div'> & {
function DialogFooter (line 107) | function DialogFooter({ hasBorder = false, ...props }: DialogFooterProps) {
type DialogCloseProps (line 143) | type DialogCloseProps = ButtonProps;
function DialogClose (line 145) | function DialogClose(props: DialogCloseProps) {
type CloseButtonIndicatorProps (line 149) | type CloseButtonIndicatorProps = Omit<ButtonProps, 'children'> & {
function DialogCloseIndicator (line 154) | function DialogCloseIndicator(props: CloseButtonIndicatorProps) {
FILE: apps/website/src/components/ui/Dropdown.tsx
type DropdownSectionProps (line 23) | type DropdownSectionProps<Type extends object> = RACDropdownSectionProps...
function DropdownSection (line 27) | function DropdownSection<Type extends object>(props: DropdownSectionProp...
function DropdownLabel (line 46) | function DropdownLabel(props: RACTextProps) {
type DropdownItemProps (line 76) | type DropdownItemProps = RACListBoxItemProps & {
function DropdownItem (line 82) | function DropdownItem(props: DropdownItemProps) {
type DropdownItemDetailProps (line 116) | type DropdownItemDetailProps = RACTextProps & {
function DropdownItemDetails (line 125) | function DropdownItemDetails(props: DropdownItemDetailProps) {
function DropdownSeparator (line 151) | function DropdownSeparator(props: RACSeparatorProps) {
function DropdownKeyboard (line 164) | function DropdownKeyboard(props: ComponentProps<typeof Keyboard>) {
FILE: apps/website/src/components/ui/Field.tsx
function Label (line 24) | function Label(props: RACLabelProps) {
function Description (line 36) | function Description(props: RACTextProps) {
function FieldError (line 46) | function FieldError(props: RACFieldErrorProps) {
function FieldGroup (line 93) | function FieldGroup(props: RACGroupProps) {
function Input (line 107) | function Input(props: RACInputProps) {
FILE: apps/website/src/components/ui/Keyboard.tsx
type KeyboardProps (line 7) | type KeyboardProps = ComponentProps<'div'> & {
function Keyboard (line 15) | function Keyboard(props: KeyboardProps) {
FILE: apps/website/src/components/ui/ListBox.tsx
function ListBox (line 10) | function ListBox<Type extends object>(props: RACListBoxProps<Type>) {
type ListBoxItemProps (line 27) | type ListBoxItemProps<Type extends object> = RACListBoxItemProps<Type> & {
function ListBoxItem (line 31) | function ListBoxItem<Type extends object>(props: ListBoxItemProps<Type>) {
type ListBoxSectionProps (line 61) | type ListBoxSectionProps = ComponentProps<typeof DropdownSection>;
function ListBoxSection (line 63) | function ListBoxSection(props: ListBoxSectionProps) {
FILE: apps/website/src/components/ui/Popover.tsx
function Popover (line 25) | function Popover(props: RACDialogTriggerProps) {
function PopoverTitle (line 29) | function PopoverTitle({ level = 2, ...props }: DialogTitleProps) {
function PopoverHeader (line 33) | function PopoverHeader(props: DialogHeaderProps) {
function PopoverBody (line 37) | function PopoverBody(props: DialogBodyProps) {
function PopoverFooter (line 41) | function PopoverFooter(props: DialogFooterProps) {
type PopoverContentProps (line 85) | type PopoverContentProps = Omit<RACModalOverlayProps, 'className'> &
function PopoverContent (line 95) | function PopoverContent({ respectScreen = true, showArrow = true, ...pro...
FILE: apps/website/src/components/ui/Select.tsx
type SelectProps (line 50) | type SelectProps<Type extends object> = RACSelectProps<Type> & {
function Select (line 58) | function Select<Type extends object>(props: SelectProps<Type>) {
type SelectListProps (line 73) | type SelectListProps<Type extends object> = Pick<PopoverContentProps, 'p...
function SelectList (line 81) | function SelectList<Type extends object>(props: SelectListProps<Type>) {
type SelectTriggerProps (line 96) | type SelectTriggerProps = ComponentProps<typeof Button> & {
function SelectTrigger (line 102) | function SelectTrigger(props: SelectTriggerProps) {
FILE: apps/website/src/components/ui/Sheet.tsx
type Sides (line 32) | type Sides = 'bottom' | 'left' | 'right' | 'top';
type SheetProps (line 71) | type SheetProps = RACDialogTriggerProps;
function Sheet (line 73) | function Sheet(props: SheetProps) {
type SheetContentProps (line 77) | type SheetContentProps = Omit<ComponentProps<typeof RACModal>, 'children...
function SheetContent (line 93) | function SheetContent({
FILE: apps/website/src/components/ui/Sidebar.tsx
constant SIDEBAR_COOKIE_NAME (line 20) | const SIDEBAR_COOKIE_NAME = 'sidebar:state';
constant SIDEBAR_COOKIE_MAX_AGE (line 21) | const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
type SidebarContextProps (line 23) | interface SidebarContextProps {
function useSidebar (line 34) | function useSidebar() {
type SidebarProviderProps (line 43) | type SidebarProviderProps = ComponentProps<'div'> & {
function SidebarProvider (line 50) | function SidebarProvider({
type SidebarProps (line 176) | type SidebarProps = ComponentProps<'div'> &
function Sidebar (line 184) | function Sidebar({
function SidebarInsetAnchor (line 284) | function SidebarInsetAnchor({
type SidebarHeaderProps (line 318) | type SidebarHeaderProps = ComponentProps<'div'> & {
function SidebarHeader (line 322) | function SidebarHeader({ hasBorder = false, ...props }: SidebarHeaderPro...
type SidebarFooterProps (line 363) | type SidebarFooterProps = ComponentProps<'div'> & {
function SidebarFooter (line 367) | function SidebarFooter({ hasBorder = false, ...props }: SidebarFooterPro...
function SidebarContent (line 380) | function SidebarContent(props: ComponentProps<'div'>) {
function SidebarInset (line 396) | function SidebarInset(props: ComponentProps<'main'>) {
function SidebarTrigger (line 410) | function SidebarTrigger({ onPress, children, ...props }: ButtonProps) {
type CloseButtonIndicatorProps (line 435) | type CloseButtonIndicatorProps = Omit<ButtonProps, 'children'> & {
function SidebarCloseIndicator (line 440) | function SidebarCloseIndicator({ isDismissable = true, ...props }: Close...
function SidebarRail (line 461) | function SidebarRail({ className, ref, ...props }: ComponentProps<'butto...
FILE: apps/website/src/hooks/useSystemThemeFallback.ts
function useSystemThemeFallback (line 5) | function useSystemThemeFallback() {
FILE: apps/website/src/hooks/useUnregisterServiceWorker.ts
function useUnregisterServiceWorker (line 5) | function useUnregisterServiceWorker() {
FILE: apps/website/src/middleware.ts
function middleware (line 5) | async function middleware(request: NextRequest) {
FILE: apps/website/src/styles/util.ts
function composeTailwindRenderProps (line 4) | function composeTailwindRenderProps<Type>(
FILE: apps/website/src/util/constants.ts
constant PACKAGES (line 1) | const PACKAGES = [
constant PACKAGES_WITH_ENTRY_POINTS (line 18) | const PACKAGES_WITH_ENTRY_POINTS = ['discord-api-types'];
constant DEFAULT_ENTRY_POINT (line 20) | const DEFAULT_ENTRY_POINT = ['v10'];
constant DESCRIPTION (line 22) | const DESCRIPTION =
FILE: apps/website/src/util/env.ts
constant ENV (line 1) | const ENV = {
FILE: apps/website/src/util/fetchDependencies.ts
function fetchDependencies (line 5) | async function fetchDependencies({
function sanitizeVersion (line 44) | function sanitizeVersion(version: string) {
FILE: apps/website/src/util/fetchEntryPoints.ts
function fetchEntryPoints (line 6) | async function fetchEntryPoints(packageName: string, version: string): P...
type EntryPoint (line 41) | interface EntryPoint {
FILE: apps/website/src/util/fetchLatestVersion.ts
function fetchLatestVersion (line 9) | async function fetchLatestVersion(packageName: string): Promise<string> {
FILE: apps/website/src/util/fetchNode.ts
function fetchNode (line 6) | async function fetchNode({
FILE: apps/website/src/util/fetchSitemap.ts
function fetchSitemap (line 6) | async function fetchSitemap({
FILE: apps/website/src/util/fetchVersions.ts
function fetchVersions (line 4) | async function fetchVersions(packageName: string) {
FILE: apps/website/src/util/parseDocsPathParams.ts
function parseDocsPathParams (line 3) | function parseDocsPathParams(item: string[] | undefined): {
FILE: apps/website/src/util/resolveNodeKind.tsx
function resolveKind (line 11) | function resolveKind(item: any, size = 24) {
FILE: apps/website/src/util/shiki.bundle.ts
type BundledLanguage (line 10) | type BundledLanguage = 'typescript' | 'ts' | 'javascript' | 'js' | 'shel...
type BundledTheme (line 11) | type BundledTheme = 'github-light' | 'github-dark-dimmed';
type Highlighter (line 12) | type Highlighter = HighlighterGeneric<BundledLanguage, BundledTheme>;
FILE: packages/actions/src/formatTag/formatTag.ts
function formatTag (line 1) | function formatTag(tag: string) {
FILE: packages/actions/src/releasePackages/generateReleaseTree.ts
type pnpmTreeDependency (line 5) | interface pnpmTreeDependency {
type pnpmTree (line 11) | interface pnpmTree {
type ReleaseEntry (line 20) | interface ReleaseEntry {
function fetchDevVersion (line 27) | async function fetchDevVersion(pkg: string, tag: string) {
function getReleaseEntries (line 38) | async function getReleaseEntries(dry: boolean, devTag?: string) {
function generateReleaseTree (line 135) | async function generateReleaseTree(dry: boolean, devTag?: string, packag...
FILE: packages/actions/src/releasePackages/index.ts
function npmPackageLink (line 6) | function npmPackageLink(packageName: string) {
type ReleaseResult (line 56) | interface ReleaseResult {
FILE: packages/actions/src/releasePackages/releasePackage.ts
function checkRegistry (line 13) | async function checkRegistry(release: ReleaseEntry) {
function gitTagAndRelease (line 18) | async function gitTagAndRelease(release: ReleaseEntry, dry: boolean) {
function releasePackage (line 43) | async function releasePackage(release: ReleaseEntry, dry: boolean, devTa...
FILE: packages/actions/src/uploadSplitDocumentation/index.ts
function upload (line 47) | async function upload(retries = 0) {
FILE: packages/api-extractor-model/src/aedoc/AedocDefinitions.ts
class AedocDefinitions (line 10) | class AedocDefinitions {
method tsdocConfiguration (line 26) | public static get tsdocConfiguration(): TSDocConfiguration {
FILE: packages/api-extractor-model/src/aedoc/ReleaseTag.ts
type ReleaseTag (line 17) | enum ReleaseTag {
function getTagName (line 59) | function getTagName(releaseTag: ReleaseTag): string {
function compare (line 85) | function compare(a: ReleaseTag, b: ReleaseTag): number {
FILE: packages/api-extractor-model/src/items/ApiDeclaredItem.ts
type IApiDeclaredItemOptions (line 16) | interface IApiDeclaredItemOptions extends IApiDocumentedItemOptions {
type IApiDeclaredItemJson (line 23) | interface IApiDeclaredItemJson extends IApiDocumentedItemJson {
class ApiDeclaredItem (line 43) | class ApiDeclaredItem extends ApiDocumentedItem {
method constructor (line 56) | public constructor(options: IApiDeclaredItemOptions) {
method onDeserializeInto (line 73) | public static override onDeserializeInto(
method excerpt (line 89) | public get excerpt(): Excerpt {
method excerptTokens (line 96) | public get excerptTokens(): readonly ExcerptToken[] {
method fileUrlPath (line 105) | public get fileUrlPath(): string | undefined {
method fileLine (line 112) | public get fileLine(): number | undefined {
method fileColumn (line 119) | public get fileColumn(): number | undefined {
method sourceLocation (line 126) | public get sourceLocation(): SourceLocation {
method getExcerptWithModifiers (line 138) | public getExcerptWithModifiers(): string {
method serializeInto (line 168) | public override serializeInto(jsonObject: Partial<IApiDeclaredItemJson...
method buildExcerpt (line 200) | public buildExcerpt(tokenRange: IExcerptTokenRange): Excerpt {
method _buildSourceLocation (line 207) | private _buildSourceLocation(): SourceLocation {
FILE: packages/api-extractor-model/src/items/ApiDocumentedItem.ts
type IApiDocumentedItemOptions (line 13) | interface IApiDocumentedItemOptions extends IApiItemOptions {
type IApiDocumentedItemJson (line 17) | interface IApiDocumentedItemJson extends IApiItemJson {
class ApiDocumentedItem (line 30) | class ApiDocumentedItem extends ApiItem {
method constructor (line 33) | public constructor(options: IApiDocumentedItemOptions) {
method onDeserializeInto (line 41) | public static override onDeserializeInto(
method tsdocComment (line 63) | public get tsdocComment(): tsdoc.DocComment | undefined {
method serializeInto (line 70) | public override serializeInto(jsonObject: Partial<IApiDocumentedItemJs...
FILE: packages/api-extractor-model/src/items/ApiItem.ts
type ApiItemKind (line 21) | enum ApiItemKind {
type Navigation (line 49) | enum Navigation {
type Meaning (line 57) | enum Meaning {
type IApiItemOptions (line 79) | interface IApiItemOptions {}
type IApiItemJson (line 81) | interface IApiItemJson {
class ApiItem (line 98) | class ApiItem {
method constructor (line 104) | public constructor(_options: IApiItemOptions) {
method deserialize (line 108) | public static deserialize(jsonObject: IApiItemJson, context: Deseriali...
method deserializeDocgen (line 116) | public static deserializeDocgen(jsonObject: DocgenJson, _package: stri...
method onDeserializeInto (line 125) | public static onDeserializeInto(
method serializeInto (line 136) | public serializeInto(jsonObject: Partial<IApiItemJson>): void {
method kind (line 146) | public get kind(): ApiItemKind {
method canonicalReference (line 158) | public get canonicalReference(): DeclarationReference {
method containerKey (line 180) | public get containerKey(): string {
method displayName (line 192) | public get displayName(): string {
method parent (line 216) | public get parent(): ApiItem | undefined {
method members (line 227) | public get members(): readonly ApiItem[] {
method getMergedSiblings (line 241) | public getMergedSiblings(): readonly ApiItem[] {
method getHierarchy (line 253) | public getHierarchy(): readonly ApiItem[] {
method getScopedNameWithinPackage (line 270) | public getScopedNameWithinPackage(): string {
method getAssociatedEntryPoint (line 309) | public getAssociatedEntryPoint(): ApiEntryPoint | undefined {
method getAssociatedPackage (line 323) | public getAssociatedPackage(): ApiPackage | undefined {
method getAssociatedModel (line 337) | public getAssociatedModel(): ApiModel | undefined {
method getSortKey (line 357) | public getSortKey(): string {
method [apiItem_onParentChanged] (line 368) | public [apiItem_onParentChanged](parent: ApiItem | undefined): void {
method buildCanonicalReference (line 378) | protected buildCanonicalReference(): DeclarationReference {
type IApiItemConstructor (line 389) | interface IApiItemConstructor extends Constructor<ApiItem>, PropertiesOf...
FILE: packages/api-extractor-model/src/items/ApiPropertyItem.ts
type IApiPropertyItemOptions (line 17) | interface IApiPropertyItemOptions
type IApiPropertyItemJson (line 27) | interface IApiPropertyItemJson extends IApiDeclaredItemJson {
class ApiPropertyItem (line 36) | class ApiPropertyItem extends ApiNameMixin(
method constructor (line 44) | public constructor(options: IApiPropertyItemOptions) {
method onDeserializeInto (line 53) | public static override onDeserializeInto(
method isEventProperty (line 73) | public get isEventProperty(): boolean {
method serializeInto (line 84) | public override serializeInto(jsonObject: Partial<IApiPropertyItemJson...
FILE: packages/api-extractor-model/src/mixins/ApiAbstractMixin.ts
type IApiAbstractMixinOptions (line 12) | interface IApiAbstractMixinOptions extends IApiItemOptions {
type IApiAbstractMixinJson (line 16) | interface IApiAbstractMixinJson extends IApiItemJson {
type ApiAbstractMixin (line 37) | interface ApiAbstractMixin extends ApiItem {
function ApiAbstractMixin (line 54) | function ApiAbstractMixin<TBaseClass extends IApiItemConstructor>(
function isBaseClassOf (line 112) | function isBaseClassOf(apiItem: ApiItem): apiItem is ApiAbstractMixin {
FILE: packages/api-extractor-model/src/mixins/ApiExportedMixin.ts
type IApiExportedMixinOptions (line 14) | interface IApiExportedMixinOptions extends IApiItemOptions {
type IApiExportedMixinJson (line 18) | interface IApiExportedMixinJson extends IApiItemJson {
type ApiExportedMixin (line 39) | interface ApiExportedMixin extends ApiItem {
function ApiExportedMixin (line 80) | function ApiExportedMixin<TBaseClass extends IApiItemConstructor>(
function isBaseClassOf (line 140) | function isBaseClassOf(apiItem: ApiItem): apiItem is ApiExportedMixin {
FILE: packages/api-extractor-model/src/mixins/ApiInitializerMixin.ts
type IApiInitializerMixinOptions (line 15) | interface IApiInitializerMixinOptions extends IApiItemOptions {
type IApiInitializerMixinJson (line 19) | interface IApiInitializerMixinJson extends IApiItemJson {
type ApiInitializerMixin (line 40) | interface ApiInitializerMixin extends ApiItem {
function ApiInitializerMixin (line 59) | function ApiInitializerMixin<TBaseClass extends IApiItemConstructor>(
function isBaseClassOf (line 127) | function isBaseClassOf(apiItem: ApiItem): apiItem is ApiInitializerMixin {
FILE: packages/api-extractor-model/src/mixins/ApiItemContainerMixin.ts
type IApiItemContainerMixinOptions (line 43) | interface IApiItemContainerMixinOptions extends IApiItemOptions {
type IApiItemContainerJson (line 48) | interface IApiItemContainerJson extends IApiItemJson {
type Mixin (line 53) | interface Mixin {
type ExcerptTokenRangeInDeclaredItem (line 58) | interface ExcerptTokenRangeInDeclaredItem {
type IMappedTypeParameters (line 62) | interface IMappedTypeParameters {
type ApiItemContainerMixin (line 94) | interface ApiItemContainerMixin extends ApiItem {
function ApiItemContainerMixin (line 212) | function ApiItemContainerMixin<TBaseClass extends IApiItemConstructor>(
function isBaseClassOf (line 692) | function isBaseClassOf(apiItem: ApiItem): apiItem is ApiItemContainerMix...
FILE: packages/api-extractor-model/src/mixins/ApiNameMixin.ts
type IApiNameMixinOptions (line 12) | interface IApiNameMixinOptions extends IApiItemOptions {
type IApiNameMixinJson (line 16) | interface IApiNameMixinJson extends IApiItemJson {
type ApiNameMixin (line 38) | interface ApiNameMixin extends ApiItem {
function ApiNameMixin (line 60) | function ApiNameMixin<TBaseClass extends IApiItemConstructor>(
function isBaseClassOf (line 125) | function isBaseClassOf(apiItem: ApiItem): apiItem is ApiNameMixin {
FILE: packages/api-extractor-model/src/mixins/ApiOptionalMixin.ts
type IApiOptionalMixinOptions (line 12) | interface IApiOptionalMixinOptions extends IApiItemOptions {
type IApiOptionalMixinJson (line 16) | interface IApiOptionalMixinJson extends IApiItemJson {
type ApiOptionalMixin (line 38) | interface ApiOptionalMixin extends ApiItem {
function ApiOptionalMixin (line 66) | function ApiOptionalMixin<TBaseClass extends IApiItemConstructor>(
function isBaseClassOf (line 124) | function isBaseClassOf(apiItem: ApiItem): apiItem is ApiOptionalMixin {
FILE: packages/api-extractor-model/src/mixins/ApiParameterListMixin.ts
type IApiParameterOptions (line 16) | interface IApiParameterOptions {
type IApiParameterListMixinOptions (line 29) | interface IApiParameterListMixinOptions extends IApiItemOptions {
type IApiParameterListJson (line 34) | interface IApiParameterListJson extends IApiItemJson {
type ApiParameterListMixin (line 57) | interface ApiParameterListMixin extends ApiItem {
function ApiParameterListMixin (line 102) | function ApiParameterListMixin<TBaseClass extends IApiItemConstructor>(
function isBaseClassOf (line 202) | function isBaseClassOf(apiItem: ApiItem): apiItem is ApiParameterListMix...
FILE: packages/api-extractor-model/src/mixins/ApiProtectedMixin.ts
type IApiProtectedMixinOptions (line 12) | interface IApiProtectedMixinOptions extends IApiItemOptions {
type IApiProtectedMixinJson (line 16) | interface IApiProtectedMixinJson extends IApiItemJson {
type ApiProtectedMixin (line 37) | interface ApiProtectedMixin extends ApiItem {
function ApiProtectedMixin (line 56) | function ApiProtectedMixin<TBaseClass extends IApiItemConstructor>(
function isBaseClassOf (line 114) | function isBaseClassOf(apiItem: ApiItem): apiItem is ApiProtectedMixin {
FILE: packages/api-extractor-model/src/mixins/ApiReadonlyMixin.ts
type IApiReadonlyMixinOptions (line 12) | interface IApiReadonlyMixinOptions extends IApiItemOptions {
type IApiReadonlyMixinJson (line 16) | interface IApiReadonlyMixinJson extends IApiItemJson {
type ApiReadonlyMixin (line 38) | interface ApiReadonlyMixin extends ApiItem {
function ApiReadonlyMixin (line 76) | function ApiReadonlyMixin<TBaseClass extends IApiItemConstructor>(
function isBaseClassOf (line 134) | function isBaseClassOf(apiItem: ApiItem): apiItem is ApiReadonlyMixin {
FILE: packages/api-extractor-model/src/mixins/ApiReleaseTagMixin.ts
type IApiReleaseTagMixinOptions (line 14) | interface IApiReleaseTagMixinOptions extends IApiItemOptions {
type IApiReleaseTagMixinJson (line 18) | interface IApiReleaseTagMixinJson extends IApiItemJson {
type ApiReleaseTagMixin (line 40) | interface ApiReleaseTagMixin extends ApiItem {
function ApiReleaseTagMixin (line 63) | function ApiReleaseTagMixin<TBaseClass extends IApiItemConstructor>(
function isBaseClassOf (line 129) | function isBaseClassOf(apiItem: ApiItem): apiItem is ApiReleaseTagMixin {
FILE: packages/api-extractor-model/src/mixins/ApiReturnTypeMixin.ts
type IApiReturnTypeMixinOptions (line 15) | interface IApiReturnTypeMixinOptions extends IApiItemOptions {
type IApiReturnTypeMixinJson (line 19) | interface IApiReturnTypeMixinJson extends IApiItemJson {
type ApiReturnTypeMixin (line 40) | interface ApiReturnTypeMixin extends ApiItem {
function ApiReturnTypeMixin (line 59) | function ApiReturnTypeMixin<TBaseClass extends IApiItemConstructor>(
function isBaseClassOf (line 122) | function isBaseClassOf(apiItem: ApiItem): apiItem is ApiReturnTypeMixin {
FILE: packages/api-extractor-model/src/mixins/ApiStaticMixin.ts
type IApiStaticMixinOptions (line 12) | interface IApiStaticMixinOptions extends IApiItemOptions {
type IApiStaticMixinJson (line 16) | interface IApiStaticMixinJson extends IApiItemJson {
type ApiStaticMixin (line 37) | interface ApiStaticMixin extends ApiItem {
function ApiStaticMixin (line 56) | function ApiStaticMixin<TBaseClass extends IApiItemConstructor>(
function isBaseClassOf (line 114) | function isBaseClassOf(apiItem: ApiItem): apiItem is ApiStaticMixin {
FILE: packages/api-extractor-model/src/mixins/ApiTypeParameterListMixin.ts
type IApiTypeParameterOptions (line 16) | interface IApiTypeParameterOptions {
type IApiTypeParameterListMixinOptions (line 27) | interface IApiTypeParameterListMixinOptions extends IApiItemOptions {
type IApiTypeParameterListMixinJson (line 31) | interface IApiTypeParameterListMixinJson extends IApiItemJson {
type ApiTypeParameterListMixin (line 52) | interface ApiTypeParameterListMixin extends ApiItem {
function ApiTypeParameterListMixin (line 69) | function ApiTypeParameterListMixin<TBaseClass extends IApiItemConstructor>(
function isBaseClassOf (line 158) | function isBaseClassOf(apiItem: ApiItem): apiItem is ApiTypeParameterLis...
FILE: packages/api-extractor-model/src/mixins/Excerpt.ts
type ExcerptTokenKind (line 10) | enum ExcerptTokenKind {
type IExcerptTokenRange (line 27) | interface IExcerptTokenRange {
type IExcerptToken (line 46) | interface IExcerptToken {
class ExcerptToken (line 57) | class ExcerptToken {
method constructor (line 64) | public constructor(kind: ExcerptTokenKind, text: string, canonicalRefe...
method kind (line 77) | public get kind(): ExcerptTokenKind {
method text (line 84) | public get text(): string {
method canonicalReference (line 92) | public get canonicalReference(): DeclarationReference | undefined {
class Excerpt (line 120) | class Excerpt {
method constructor (line 141) | public constructor(tokens: readonly ExcerptToken[], tokenRange: IExcer...
method text (line 163) | public get text(): string {
method isEmpty (line 174) | public get isEmpty(): boolean {
FILE: packages/api-extractor-model/src/mixins/IFindApiItemsResult.ts
type IFindApiItemsResult (line 11) | interface IFindApiItemsResult {
type IFindApiItemsMessage (line 34) | interface IFindApiItemsMessage {
type FindApiItemsMessageId (line 53) | enum FindApiItemsMessageId {
FILE: packages/api-extractor-model/src/mixins/Mixin.ts
type Constructor (line 10) | type Constructor<T = {}> = new (...args: any[]) => T;
type PropertiesOf (line 18) | type PropertiesOf<T> = { [K in keyof T]: T[K] };
FILE: packages/api-extractor-model/src/model/ApiCallSignature.ts
type IApiCallSignatureOptions (line 20) | interface IApiCallSignatureOptions
class ApiCallSignature (line 56) | class ApiCallSignature extends ApiTypeParameterListMixin(
method constructor (line 59) | public constructor(options: IApiCallSignatureOptions) {
method getContainerKey (line 63) | public static getContainerKey(overloadIndex: number): string {
method kind (line 70) | public override get kind(): ApiItemKind {
method containerKey (line 77) | public override get containerKey(): string {
method buildCanonicalReference (line 84) | public override buildCanonicalReference(): DeclarationReference {
FILE: packages/api-extractor-model/src/model/ApiClass.ts
type IApiClassOptions (line 34) | interface IApiClassOptions
type IExcerptTokenRangeWithTypeParameters (line 47) | interface IExcerptTokenRangeWithTypeParameters extends IExcerptTokenRange {
type IApiClassJson (line 51) | interface IApiClassJson
class ApiClass (line 72) | class ApiClass extends ApiItemContainerMixin(
method constructor (line 82) | public constructor(options: IApiClassOptions) {
method getContainerKey (line 101) | public static getContainerKey(name: string): string {
method onDeserializeInto (line 108) | public static override onDeserializeInto(
method kind (line 122) | public override get kind(): ApiItemKind {
method containerKey (line 129) | public override get containerKey(): string {
method implementsTypes (line 136) | public get implementsTypes(): readonly HeritageType[] {
method serializeInto (line 143) | public override serializeInto(jsonObject: Partial<IApiClassJson>): void {
method buildCanonicalReference (line 163) | public override buildCanonicalReference(): DeclarationReference {
FILE: packages/api-extractor-model/src/model/ApiConstructSignature.ts
type IApiConstructSignatureOptions (line 20) | interface IApiConstructSignatureOptions
class ApiConstructSignature (line 69) | class ApiConstructSignature extends ApiTypeParameterListMixin(
method constructor (line 72) | public constructor(options: IApiConstructSignatureOptions) {
method getContainerKey (line 76) | public static getContainerKey(overloadIndex: number): string {
method kind (line 83) | public override get kind(): ApiItemKind {
method containerKey (line 90) | public override get containerKey(): string {
method buildCanonicalReference (line 97) | public override buildCanonicalReference(): DeclarationReference {
FILE: packages/api-extractor-model/src/model/ApiConstructor.ts
type IApiConstructorOptions (line 16) | interface IApiConstructorOptions
class ApiConstructor (line 49) | class ApiConstructor extends ApiParameterListMixin(ApiProtectedMixin(Api...
method constructor (line 50) | public constructor(options: IApiConstructorOptions) {
method getContainerKey (line 54) | public static getContainerKey(overloadIndex: number): string {
method kind (line 61) | public override get kind(): ApiItemKind {
method containerKey (line 68) | public override get containerKey(): string {
method buildCanonicalReference (line 75) | public override buildCanonicalReference(): DeclarationReference {
FILE: packages/api-extractor-model/src/model/ApiEntryPoint.ts
type IApiEntryPointOptions (line 15) | interface IApiEntryPointOptions extends IApiItemContainerMixinOptions, I...
class ApiEntryPoint (line 41) | class ApiEntryPoint extends ApiItemContainerMixin(ApiNameMixin(ApiItem)) {
method constructor (line 42) | public constructor(options: IApiEntryPointOptions) {
method kind (line 49) | public override get kind(): ApiItemKind {
method containerKey (line 56) | public override get containerKey(): string {
method importPath (line 68) | public get importPath(): string {
method buildCanonicalReference (line 75) | public override buildCanonicalReference(): DeclarationReference {
FILE: packages/api-extractor-model/src/model/ApiEnum.ts
type IApiEnumOptions (line 18) | interface IApiEnumOptions
class ApiEnum (line 45) | class ApiEnum extends ApiItemContainerMixin(
method constructor (line 48) | public constructor(options: IApiEnumOptions) {
method getContainerKey (line 52) | public static getContainerKey(name: string): string {
method kind (line 59) | public override get kind(): ApiItemKind {
method members (line 66) | public override get members(): readonly ApiEnumMember[] {
method containerKey (line 73) | public override get containerKey(): string {
method addMember (line 80) | public override addMember(member: ApiEnumMember): void {
method buildCanonicalReference (line 91) | public override buildCanonicalReference(): DeclarationReference {
FILE: packages/api-extractor-model/src/model/ApiEnumMember.ts
type IApiEnumMemberOptions (line 16) | interface IApiEnumMemberOptions
type EnumMemberOrder (line 30) | enum EnumMemberOrder {
class ApiEnumMember (line 65) | class ApiEnumMember extends ApiNameMixin(ApiReleaseTagMixin(ApiInitializ...
method constructor (line 66) | public constructor(options: IApiEnumMemberOptions) {
method getContainerKey (line 70) | public static getContainerKey(name: string): string {
method kind (line 78) | public override get kind(): ApiItemKind {
method containerKey (line 85) | public override get containerKey(): string {
method buildCanonicalReference (line 92) | public override buildCanonicalReference(): DeclarationReference {
FILE: packages/api-extractor-model/src/model/ApiEvent.ts
type IApiEventOptions (line 16) | interface IApiEventOptions
class ApiEvent (line 36) | class ApiEvent extends ApiNameMixin(ApiParameterListMixin(ApiReleaseTagM...
method constructor (line 37) | public constructor(options: IApiEventOptions) {
method getContainerKey (line 41) | public static getContainerKey(name: string, overloadIndex: number): st...
method kind (line 48) | public override get kind(): ApiItemKind {
method containerKey (line 55) | public override get containerKey(): string {
method buildCanonicalReference (line 62) | public override buildCanonicalReference(): DeclarationReference {
FILE: packages/api-extractor-model/src/model/ApiFunction.ts
type IApiFunctionOptions (line 22) | interface IApiFunctionOptions
class ApiFunction (line 52) | class ApiFunction extends ApiNameMixin(
method constructor (line 57) | public constructor(options: IApiFunctionOptions) {
method getContainerKey (line 61) | public static getContainerKey(name: string, overloadIndex: number): st...
method kind (line 68) | public override get kind(): ApiItemKind {
method containerKey (line 75) | public override get containerKey(): string {
method buildCanonicalReference (line 82) | public override buildCanonicalReference(): DeclarationReference {
FILE: packages/api-extractor-model/src/model/ApiIndexSignature.ts
type IApiIndexSignatureOptions (line 17) | interface IApiIndexSignatureOptions
class ApiIndexSignature (line 46) | class ApiIndexSignature extends ApiParameterListMixin(
method constructor (line 49) | public constructor(options: IApiIndexSignatureOptions) {
method getContainerKey (line 53) | public static getContainerKey(overloadIndex: number): string {
method kind (line 60) | public override get kind(): ApiItemKind {
method containerKey (line 67) | public override get containerKey(): string {
method buildCanonicalReference (line 74) | public override buildCanonicalReference(): DeclarationReference {
FILE: packages/api-extractor-model/src/model/ApiInterface.ts
type IApiInterfaceOptions (line 37) | interface IApiInterfaceOptions
type IApiInterfaceJson (line 48) | interface IApiInterfaceJson
class ApiInterface (line 75) | class ApiInterface extends ApiItemContainerMixin(
method constructor (line 80) | public constructor(options: IApiInterfaceOptions) {
method getContainerKey (line 88) | public static getContainerKey(name: string): string {
method onDeserializeInto (line 95) | public static override onDeserializeInto(
method kind (line 108) | public override get kind(): ApiItemKind {
method containerKey (line 115) | public override get containerKey(): string {
method extendsTypes (line 122) | public get extendsTypes(): readonly HeritageType[] {
method serializeInto (line 129) | public override serializeInto(jsonObject: Partial<IApiInterfaceJson>):...
method buildCanonicalReference (line 141) | public override buildCanonicalReference(): DeclarationReference {
FILE: packages/api-extractor-model/src/model/ApiMethod.ts
type IApiMethodOptions (line 25) | interface IApiMethodOptions
class ApiMethod (line 58) | class ApiMethod extends ApiNameMixin(
method constructor (line 69) | public constructor(options: IApiMethodOptions) {
method getContainerKey (line 73) | public static getContainerKey(name: string, isStatic: boolean, overloa...
method kind (line 84) | public override get kind(): ApiItemKind {
method containerKey (line 91) | public override get containerKey(): string {
method buildCanonicalReference (line 98) | public override buildCanonicalReference(): DeclarationReference {
FILE: packages/api-extractor-model/src/model/ApiMethodSignature.ts
type IApiMethodSignatureOptions (line 20) | interface IApiMethodSignatureOptions
class ApiMethodSignature (line 50) | class ApiMethodSignature extends ApiNameMixin(
method constructor (line 55) | public constructor(options: IApiMethodSignatureOptions) {
method getContainerKey (line 59) | public static getContainerKey(name: string, overloadIndex: number): st...
method kind (line 66) | public override get kind(): ApiItemKind {
method containerKey (line 73) | public override get containerKey(): string {
method buildCanonicalReference (line 80) | public override buildCanonicalReference(): DeclarationReference {
FILE: packages/api-extractor-model/src/model/ApiModel.ts
class ApiModel (line 51) | class ApiModel extends ApiItemContainerMixin(ApiItem) {
method constructor (line 58) | public constructor() {
method loadPackage (line 64) | public loadPackage(apiJsonFilename: string): ApiPackage {
method kind (line 73) | public override get kind(): ApiItemKind {
method containerKey (line 80) | public override get containerKey(): string {
method packages (line 84) | public get packages(): readonly ApiPackage[] {
method addMember (line 91) | public override addMember(member: ApiPackage): void {
method tryGetPackageByName (line 110) | public tryGetPackageByName(packageName: string): ApiPackage | undefined {
method resolveDeclarationReference (line 146) | public resolveDeclarationReference(
method _initApiItemsRecursive (line 187) | private _initApiItemsRecursive(apiItem: ApiItem, apiItemsByCanonicalRe...
method buildCanonicalReference (line 203) | public override buildCanonicalReference(): DeclarationReference {
FILE: packages/api-extractor-model/src/model/ApiNamespace.ts
type IApiNamespaceOptions (line 17) | interface IApiNamespaceOptions
class ApiNamespace (line 46) | class ApiNamespace extends ApiItemContainerMixin(
method constructor (line 49) | public constructor(options: IApiNamespaceOptions) {
method getContainerKey (line 53) | public static getContainerKey(name: string): string {
method kind (line 60) | public override get kind(): ApiItemKind {
method containerKey (line 67) | public override get containerKey(): string {
method buildCanonicalReference (line 74) | public override buildCanonicalReference(): DeclarationReference {
FILE: packages/api-extractor-model/src/model/ApiPackage.ts
type IApiPackageOptions (line 30) | interface IApiPackageOptions
type IApiPackageMetadataJson (line 85) | interface IApiPackageMetadataJson {
type IApiPackageJson (line 132) | interface IApiPackageJson extends IApiItemJson {
type IApiPackageSaveOptions (line 156) | interface IApiPackageSaveOptions extends IJsonFileSaveOptions {
class ApiPackage (line 193) | class ApiPackage extends ApiItemContainerMixin(ApiNameMixin(ApiDocumente...
method constructor (line 200) | public constructor(options: IApiPackageOptions) {
method onDeserializeInto (line 229) | public static override onDeserializeInto(
method loadFromJsonFile (line 240) | public static loadFromJsonFile(apiJsonFilename: string): ApiPackage {
method loadFromJson (line 244) | public static loadFromJson(rawJson: any, apiJsonFilename: string = '')...
method kind (line 323) | public override get kind(): ApiItemKind {
method containerKey (line 330) | public override get containerKey(): string {
method entryPoints (line 335) | public get entryPoints(): readonly ApiEntryPoint[] {
method dependencies (line 339) | public get dependencies(): Record<string, string> | undefined {
method tsdocConfiguration (line 351) | public get tsdocConfiguration(): TSDocConfiguration {
method projectFolderUrl (line 355) | public get projectFolderUrl(): string | undefined {
method addMember (line 362) | public override addMember(member: ApiEntryPoint): void {
method findEntryPointsByPath (line 370) | public findEntryPointsByPath(importPath: string): readonly ApiEntryPoi...
method saveToJsonFile (line 374) | public saveToJsonFile(apiJsonFilename: string, options?: IApiPackageSa...
method buildCanonicalReference (line 415) | public override buildCanonicalReference(): DeclarationReference {
method _mapToMinified (line 419) | private _mapToMinified(jsonObject: IApiPackageJson) {
method _mapFromMinified (line 441) | private static _mapFromMinified(jsonObject: any): IApiPackageJson {
FILE: packages/api-extractor-model/src/model/ApiProperty.ts
type IApiPropertyOptions (line 17) | interface IApiPropertyOptions
class ApiProperty (line 58) | class ApiProperty extends ApiAbstractMixin(
method constructor (line 61) | public constructor(options: IApiPropertyOptions) {
method getContainerKey (line 65) | public static getContainerKey(name: string, isStatic: boolean): string {
method kind (line 76) | public override get kind(): ApiItemKind {
method containerKey (line 83) | public override get containerKey(): string {
method buildCanonicalReference (line 90) | public override buildCanonicalReference(): DeclarationReference {
FILE: packages/api-extractor-model/src/model/ApiPropertySignature.ts
type IApiPropertySignatureOptions (line 13) | interface IApiPropertySignatureOptions extends IApiPropertyItemOptions {}
class ApiPropertySignature (line 36) | class ApiPropertySignature extends ApiPropertyItem {
method constructor (line 37) | public constructor(options: IApiPropertySignatureOptions) {
method getContainerKey (line 41) | public static getContainerKey(name: string): string {
method kind (line 48) | public override get kind(): ApiItemKind {
method containerKey (line 55) | public override get containerKey(): string {
method buildCanonicalReference (line 62) | public override buildCanonicalReference(): DeclarationReference {
FILE: packages/api-extractor-model/src/model/ApiTypeAlias.ts
type IApiTypeAliasOptions (line 27) | interface IApiTypeAliasOptions
type IApiTypeAliasJson (line 37) | interface IApiTypeAliasJson extends IApiDeclaredItemJson, IApiTypeParame...
class ApiTypeAlias (line 66) | class ApiTypeAlias extends ApiTypeParameterListMixin(
method constructor (line 82) | public constructor(options: IApiTypeAliasOptions) {
method onDeserializeInto (line 91) | public static override onDeserializeInto(
method getContainerKey (line 101) | public static getContainerKey(name: string): string {
method kind (line 108) | public override get kind(): ApiItemKind {
method containerKey (line 115) | public override get containerKey(): string {
method serializeInto (line 122) | public override serializeInto(jsonObject: Partial<IApiTypeAliasJson>):...
method buildCanonicalReference (line 131) | public override buildCanonicalReference(): DeclarationReference {
FILE: packages/api-extractor-model/src/model/ApiVariable.ts
type IApiVariableOptions (line 24) | interface IApiVariableOptions
type IApiVariableJson (line 35) | interface IApiVariableJson extends IApiDeclaredItemJson, IApiExportedMix...
class ApiVariable (line 58) | class ApiVariable extends ApiNameMixin(
method constructor (line 66) | public constructor(options: IApiVariableOptions) {
method onDeserializeInto (line 75) | public static override onDeserializeInto(
method getContainerKey (line 85) | public static getContainerKey(name: string): string {
method kind (line 92) | public override get kind(): ApiItemKind {
method containerKey (line 99) | public override get containerKey(): string {
method serializeInto (line 106) | public override serializeInto(jsonObject: Partial<IApiVariableJson>): ...
method buildCanonicalReference (line 115) | public override buildCanonicalReference(): DeclarationReference {
FILE: packages/api-extractor-model/src/model/Deserializer.ts
type DocgenAccess (line 45) | type DocgenAccess = 'private' | 'protected' | 'public';
type DocgenScope (line 46) | type DocgenScope = 'global' | 'instance' | 'static';
type DocgenDeprecated (line 47) | type DocgenDeprecated = boolean | string;
type DocgenMetaJson (line 49) | interface DocgenMetaJson {
type DocgenTypeJson (line 55) | interface DocgenTypeJson {
type DocgenVarJson (line 59) | interface DocgenVarJson {
type DocgenVarTypeJson (line 64) | type DocgenVarTypeJson = DocgenVarJson | string[][][];
type DocgenExceptionJson (line 65) | interface DocgenExceptionJson {
type DocgenExternalJson (line 71) | interface DocgenExternalJson {
type DocgenTypedefJson (line 78) | interface DocgenTypedefJson {
type DocgenEventJson (line 91) | interface DocgenEventJson {
type DocgenParamJson (line 100) | interface DocgenParamJson {
type DocgenConstructorJson (line 110) | interface DocgenConstructorJson {
type DocgenMethodJson (line 118) | interface DocgenMethodJson {
type DocgenPropertyJson (line 139) | interface DocgenPropertyJson {
type DocgenClassJson (line 154) | interface DocgenClassJson {
type DocgenInterfaceJson (line 169) | type DocgenInterfaceJson = DocgenClassJson;
type DocgenJson (line 171) | interface DocgenJson {
function formatVarType (line 184) | function formatVarType(type: DocgenVarTypeJson): string {
function getFirstType (line 190) | function getFirstType(type: DocgenVarTypeJson): string {
function mapVarType (line 196) | function mapVarType(type: DocgenVarTypeJson, _package: string): IExcerpt...
function mapProp (line 214) | function mapProp(
function mapParam (line 252) | function mapParam(
type IApiMethodJson (line 270) | interface IApiMethodJson
type IApiConstructorJson (line 283) | interface IApiConstructorJson
function mapMethod (line 286) | function mapMethod(method: DocgenMethodJson, _package: string, parent?: ...
class Deserializer (line 353) | class Deserializer {
method deserialize (line 354) | public static deserialize(context: DeserializerContext, jsonObject: IA...
method deserializeDocgen (line 422) | public static deserializeDocgen(jsonObject: DocgenJson, _package: stri...
FILE: packages/api-extractor-model/src/model/DeserializerContext.ts
type ApiJsonSchemaVersion (line 7) | enum ApiJsonSchemaVersion {
class DeserializerContext (line 130) | class DeserializerContext {
method constructor (line 156) | public constructor(options: DeserializerContext) {
FILE: packages/api-extractor-model/src/model/HeritageType.ts
class HeritageType (line 23) | class HeritageType {
method constructor (line 43) | public constructor(excerpt: Excerpt, typeParameters: IExcerptTokenRang...
FILE: packages/api-extractor-model/src/model/ModelReferenceResolver.ts
type IResolveDeclarationReferenceResult (line 18) | interface IResolveDeclarationReferenceResult {
class ModelReferenceResolver (line 39) | class ModelReferenceResolver {
method constructor (line 42) | public constructor(apiModel: ApiModel) {
method resolve (line 46) | public resolve(
method _selectUsingSystemSelector (line 167) | private _selectUsingSystemSelector(
method _selectUsingIndexSelector (line 221) | private _selectUsingIndexSelector(
FILE: packages/api-extractor-model/src/model/Parameter.ts
type IParameterOptions (line 14) | interface IParameterOptions {
class Parameter (line 39) | class Parameter {
method constructor (line 67) | public constructor(options: IParameterOptions) {
method tsdocParamBlock (line 79) | public get tsdocParamBlock(): tsdoc.DocParamBlock | undefined {
FILE: packages/api-extractor-model/src/model/SourceLocation.ts
type ISourceLocationOptions (line 9) | interface ISourceLocationOptions {
class SourceLocation (line 42) | class SourceLocation {
method constructor (line 51) | public constructor(options: ISourceLocationOptions) {
method fileUrl (line 62) | public get fileUrl(): string | undefined {
method fileLine (line 79) | public get fileLine(): number | undefined {
method fileColumn (line 86) | public get fileColumn(): number | undefined {
FILE: packages/api-extractor-model/src/model/TypeParameter.ts
type ITypeParameterOptions (line 14) | interface ITypeParameterOptions {
class TypeParameter (line 47) | class TypeParameter {
method constructor (line 88) | public constructor(options: ITypeParameterOptions) {
method tsdocTypeParamBlock (line 99) | public get tsdocTypeParamBlock(): tsdoc.DocParamBlock | undefined {
FILE: packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts
type ReferenceData (line 28) | interface ReferenceData {
type InheritanceData (line 33) | interface InheritanceData {
type ApiInheritableJSON (line 39) | interface ApiInheritableJSON {
type ApiItemJSON (line 43) | interface ApiItemJSON {
type ApiPropertyItemJSON (line 57) | interface ApiPropertyItemJSON extends ApiItemJSON, ApiInheritableJSON {
type ApiTypeParameterListJSON (line 63) | interface ApiTypeParameterListJSON {
type ApiTypeParameterJSON (line 67) | interface ApiTypeParameterJSON {
type ApiParameterListJSON (line 75) | interface ApiParameterListJSON {
type ApiMethodSignatureJSON (line 79) | interface ApiMethodSignatureJSON
type ApiMethodJSON (line 87) | interface ApiMethodJSON extends ApiMethodSignatureJSON {
type ApiParameterJSON (line 93) | interface ApiParameterJSON {
type ApiClassJSON (line 100) | interface ApiClassJSON extends ApiItemJSON, ApiTypeParameterListJSON {
type ApiTypeAliasJSON (line 108) | interface ApiTypeAliasJSON extends ApiItemJSON, ApiTypeParameterListJSON {
type EnumMemberData (line 112) | interface EnumMemberData {
type ApiEnumJSON (line 118) | interface ApiEnumJSON extends ApiItemJSON {
type ApiInterfaceJSON (line 122) | interface ApiInterfaceJSON extends ApiItemJSON, ApiTypeParameterListJSON {
type ApiVariableJSON (line 128) | interface ApiVariableJSON extends ApiItemJSON {
type ApiFunctionJSON (line 133) | interface ApiFunctionJSON extends ApiItemJSON, ApiTypeParameterListJSON,...
type ApiConstructorJSON (line 139) | interface ApiConstructorJSON extends ApiItemJSON, ApiParameterListJSON {
type FunctionLike (line 143) | type FunctionLike = ApiDeclaredItem & ApiParameterListMixin & ApiReturnT...
class ApiNodeJSONEncoder (line 145) | class ApiNodeJSONEncoder {
method encode (line 146) | public static encode(model: ApiModel, node: ApiItem, version: string) {
method encodeItem (line 171) | public static encodeItem(model: ApiModel, item: ApiDeclaredItem, versi...
method encodeParameterList (line 205) | public static encodeParameterList(
method encodeTypeParameterList (line 215) | public static encodeTypeParameterList(
method encodeProperty (line 225) | public static encodeProperty(
method encodeInheritanceData (line 240) | public static encodeInheritanceData(
method encodeFunctionLike (line 257) | public static encodeFunctionLike(model: ApiModel, item: FunctionLike, ...
method encodeFunction (line 267) | public static encodeFunction(model: ApiModel, item: FunctionLike, vers...
method encodeMethodSignature (line 276) | public static encodeMethodSignature(
method encodeMethod (line 295) | public static encodeMethod(
method encodeClass (line 312) | public static encodeClass(model: ApiModel, item: ApiClass, version: st...
method encodeTypeAlias (line 349) | public static encodeTypeAlias(model: ApiModel, item: ApiTypeAlias, ver...
method encodeEnum (line 357) | public static encodeEnum(model: ApiModel, item: ApiEnum, version: stri...
method encodeInterface (line 369) | public static encodeInterface(model: ApiModel, item: ApiInterface, ver...
method encodeVariable (line 397) | public static encodeVariable(model: ApiModel, item: ApiVariable, versi...
method encodeConstructor (line 405) | public static encodeConstructor(model: ApiModel, item: ApiConstructor,...
FILE: packages/api-extractor-utils/src/TypeParameterJSONEncoder.ts
type TypeParameterData (line 5) | interface TypeParameterData {
function generateTypeParamData (line 13) | function generateTypeParamData(
FILE: packages/api-extractor-utils/src/parse.ts
function findPackage (line 22) | function findPackage(model: ApiModel, name: string): ApiPackage | undefi...
function hasOverloadIndex (line 28) | function hasOverloadIndex(item: ApiItem): item is ApiFunction | ApiMetho...
function generatePath (line 32) | function generatePath(items: readonly ApiItem[], version: string) {
function resolveDocComment (line 70) | function resolveDocComment(item: ApiDeclaredItem) {
function findReferences (line 101) | function findReferences(model: ApiModel, excerpt: Excerpt) {
function resolveName (line 125) | function resolveName(item: ApiItem) {
function getProperties (line 133) | function getProperties(item: ApiItem) {
type TokenDocumentation (line 151) | interface TokenDocumentation {
type ParameterDocumentation (line 157) | interface ParameterDocumentation {
function createDapiTypesURL (line 164) | function createDapiTypesURL(meaning: Meaning, name: string) {
function genReference (line 175) | function genReference(item: ApiItem, version: string) {
function genToken (line 182) | function genToken(model: ApiModel, token: ExcerptToken, version: string) {
function genParameter (line 212) | function genParameter(model: ApiModel, param: Parameter, version: string...
function getMembers (line 223) | function getMembers(pkg: ApiPackage, version: string) {
FILE: packages/api-extractor-utils/src/tsdoc/CommentBlock.ts
type DocBlockJSON (line 7) | interface DocBlockJSON extends DocNodeJSON {
function block (line 12) | function block(block: DocBlock, model: ApiModel, version: string, parent...
FILE: packages/api-extractor-utils/src/tsdoc/CommentBlockTag.ts
type DocBlockTagJSON (line 4) | interface DocBlockTagJSON extends DocNodeJSON {
function blockTag (line 8) | function blockTag(blockTag: DocBlockTag): DocBlockTagJSON {
FILE: packages/api-extractor-utils/src/tsdoc/CommentCodeSpan.ts
type DocCodeSpanJSON (line 4) | interface DocCodeSpanJSON extends DocNodeJSON {
function codeSpan (line 8) | function codeSpan(codeSpan: DocCodeSpan): DocCodeSpanJSON {
FILE: packages/api-extractor-utils/src/tsdoc/CommentNode.ts
type DocNodeJSON (line 10) | interface DocNodeJSON {
type AnyDocNodeJSON (line 14) | type AnyDocNodeJSON =
function node (line 24) | function node(node: DocNode): DocNodeJSON {
FILE: packages/api-extractor-utils/src/tsdoc/CommentNodeContainer.ts
type DocNodeContainerJSON (line 6) | interface DocNodeContainerJSON extends DocNodeJSON {
function nodeContainer (line 10) | function nodeContainer(
FILE: packages/api-extractor-utils/src/tsdoc/FencedCodeCommentNode.ts
type DocFencedCodeJSON (line 4) | interface DocFencedCodeJSON extends DocNodeJSON {
function fencedCode (line 9) | function fencedCode(fencedCode: DocFencedCode) {
FILE: packages/api-extractor-utils/src/tsdoc/LinkTagCommentNode.ts
type LinkTagCodeLink (line 6) | interface LinkTagCodeLink {
type DocLinkTagJSON (line 12) | interface DocLinkTagJSON extends DocNodeJSON {
function genLinkToken (line 18) | function genLinkToken(
function linkTagNode (line 37) | function linkTagNode(
FILE: packages/api-extractor-utils/src/tsdoc/ParamBlock.ts
type DocParamBlockJSON (line 5) | interface DocParamBlockJSON extends DocBlockJSON {
function paramBlock (line 9) | function paramBlock(
FILE: packages/api-extractor-utils/src/tsdoc/PlainTextCommentNode.ts
type DocPlainTextJSON (line 4) | interface DocPlainTextJSON extends DocNodeJSON {
function plainTextNode (line 8) | function plainTextNode(plainTextNode: DocPlainText): DocPlainTextJSON {
FILE: packages/api-extractor-utils/src/tsdoc/RootComment.ts
type DocCommentJSON (line 7) | interface DocCommentJSON extends DocNodeJSON {
function comment (line 14) | function comment(comment: DocComment, model: ApiModel, version: string, ...
FILE: packages/api-extractor-utils/src/tsdoc/index.ts
function createCommentNode (line 24) | function createCommentNode(
FILE: packages/api-extractor/src/aedoc/PackageDocComment.ts
class PackageDocComment (line 8) | class PackageDocComment {
method tryFindInSourceFile (line 12) | public static tryFindInSourceFile(sourceFile: ts.SourceFile, collector...
FILE: packages/api-extractor/src/analyzer/AstDeclaration.ts
type IAstDeclarationOptions (line 13) | interface IAstDeclarationOptions {
class AstDeclaration (line 36) | class AstDeclaration {
method constructor (line 73) | public constructor(options: IAstDeclarationOptions) {
method children (line 102) | public get children(): readonly AstDeclaration[] {
method referencedAstEntities (line 121) | public get referencedAstEntities(): readonly AstEntity[] {
method _notifyChildAttach (line 131) | public _notifyChildAttach(child: AstDeclaration): void {
method getDump (line 147) | public getDump(indent: string = ''): string {
method getSpanDump (line 171) | public getSpanDump(indent: string = ''): string {
method _notifyReferencedAstEntity (line 182) | public _notifyReferencedAstEntity(referencedAstEntity: AstEntity): void {
method forEachDeclarationRecursive (line 206) | public forEachDeclarationRecursive(action: (astDeclaration: AstDeclara...
method findChildrenWithName (line 219) | public findChildrenWithName(name: string): readonly AstDeclaration[] {
method isSupportedSyntaxKind (line 253) | public static isSupportedSyntaxKind(kind: ts.SyntaxKind): boolean {
FILE: packages/api-extractor/src/analyzer/AstImport.ts
type AstImportKind (line 11) | enum AstImportKind {
type IAstImportOptions (line 47) | interface IAstImportOptions {
class AstImport (line 58) | class AstImport extends AstSyntheticEntity {
method constructor (line 121) | public constructor(options: IAstImportOptions) {
method localName (line 137) | public get localName(): string {
method getKey (line 145) | public static getKey(options: IAstImportOptions): string {
FILE: packages/api-extractor/src/analyzer/AstModule.ts
type IAstModuleExportInfo (line 11) | interface IAstModuleExportInfo {
type IAstModuleOptions (line 26) | interface IAstModuleOptions {
class AstModule (line 35) | class AstModule {
method constructor (line 69) | public constructor(options: IAstModuleOptions) {
method isExternal (line 85) | public get isExternal(): boolean {
FILE: packages/api-extractor/src/analyzer/AstNamespaceExport.ts
type IAstNamespaceExportOptions (line 6) | interface IAstNamespaceExportOptions extends IAstNamespaceImportOptions {}
class AstNamespaceExport (line 38) | class AstNamespaceExport extends AstNamespaceImport {
method constructor (line 39) | public constructor(options: IAstNamespaceExportOptions) {
FILE: packages/api-extractor/src/analyzer/AstNamespaceImport.ts
type IAstNamespaceImportOptions (line 9) | interface IAstNamespaceImportOptions {
class AstNamespaceImport (line 46) | class AstNamespaceImport extends AstSyntheticEntity {
method constructor (line 75) | public constructor(options: IAstNamespaceImportOptions) {
method localName (line 86) | public get localName(): string {
method fetchAstModuleExportInfo (line 91) | public fetchAstModuleExportInfo(collector: Collector): IAstModuleExpor...
FILE: packages/api-extractor/src/analyzer/AstReferenceResolver.ts
class ResolverFailure (line 23) | class ResolverFailure {
method constructor (line 29) | public constructor(reason: string) {
class AstReferenceResolver (line 42) | class AstReferenceResolver {
method constructor (line 49) | public constructor(collector: Collector) {
method resolve (line 55) | public resolve(
method _getMemberReferenceIdentifier (line 134) | private _getMemberReferenceIdentifier(memberReference: tsdoc.DocMember...
method _selectDeclaration (line 146) | private _selectDeclaration(
method _selectUsingSystemSelector (line 181) | private _selectUsingSystemSelector(
method _selectUsingIndexSelector (line 239) | private _selectUsingIndexSelector(
method _tryDisambiguateAncillaryMatches (line 281) | private _tryDisambiguateAncillaryMatches(matches: readonly AstDeclarat...
FILE: packages/api-extractor/src/analyzer/AstSymbol.ts
type IAstSymbolOptions (line 12) | interface IAstSymbolOptions {
class AstSymbol (line 54) | class AstSymbol extends AstEntity {
method constructor (line 119) | public constructor(options: IAstSymbolOptions) {
method astDeclarations (line 140) | public get astDeclarations(): readonly AstDeclaration[] {
method analyzed (line 152) | public get analyzed(): boolean {
method _notifyDeclarationAttach (line 162) | public _notifyDeclarationAttach(astDeclaration: AstDeclaration): void {
method _notifyAnalyzed (line 176) | public _notifyAnalyzed(): void {
method forEachDeclarationRecursive (line 187) | public forEachDeclarationRecursive(action: (astDeclaration: AstDeclara...
FILE: packages/api-extractor/src/analyzer/AstSymbolTable.ts
type IFetchAstSymbolOptions (line 24) | interface IFetchAstSymbolOptions {
class AstSymbolTable (line 62) | class AstSymbolTable {
method constructor (line 98) | public constructor(
method fetchAstModuleFromWorkingPackage (line 122) | public fetchAstModuleFromWorkingPackage(sourceFile: ts.SourceFile): As...
method fetchAstModuleExportInfo (line 129) | public fetchAstModuleExportInfo(astModule: AstModule): IAstModuleExpor...
method tryGetExportOfAstModule (line 137) | public tryGetExportOfAstModule(exportName: string, astModule: AstModul...
method analyze (line 154) | public analyze(astEntity: AstEntity): void {
method getChildAstDeclarationByNode (line 171) | public getChildAstDeclarationByNode(node: ts.Node, parentAstDeclaratio...
method tryGetEntityForNode (line 195) | public tryGetEntityForNode(identifier: ts.Identifier | ts.ImportTypeNo...
method getLocalNameForSymbol (line 218) | public static getLocalNameForSymbol(symbol: ts.Symbol): string {
method _analyzeAstNamespaceImport (line 283) | private _analyzeAstNamespaceImport(astNamespaceImport: AstNamespaceImp...
method _analyzeAstSymbol (line 300) | private _analyzeAstSymbol(astSymbol: AstSymbol): void {
method _analyzeChildTree (line 343) | private _analyzeChildTree(node: ts.Node, governingAstDeclaration: AstD...
method _fetchEntityForNode (line 481) | private _fetchEntityForNode(
method _fetchAstDeclaration (line 510) | private _fetchAstDeclaration(node: ts.Node, isExternal: boolean): AstD...
method _fetchAstSymbol (line 543) | private _fetchAstSymbol(options: IFetchAstSymbolOptions): AstSymbol | ...
method _tryFindFirstAstDeclarationParent (line 697) | private _tryFindFirstAstDeclarationParent(node: ts.Node): ts.Node | un...
FILE: packages/api-extractor/src/analyzer/ExportAnalyzer.ts
type IAstSymbolTable (line 24) | interface IAstSymbolTable {
type IAstModuleReference (line 34) | interface IAstModuleReference {
class ExportAnalyzer (line 58) | class ExportAnalyzer {
method constructor (line 76) | public constructor(
method fetchAstModuleFromSourceFile (line 96) | public fetchAstModuleFromSourceFile(
method _getModuleSymbolFromSourceFile (line 181) | private _getModuleSymbolFromSourceFile(
method fetchAstModuleExportInfo (line 230) | public fetchAstModuleExportInfo(entryPointAstModule: AstModule): IAstM...
method _isExternalModulePath (line 254) | private _isExternalModulePath(
method isImportableAmbientSourceFile (line 304) | public isImportableAmbientSourceFile(sourceFile: ts.SourceFile): boole...
method _collectAllExportsRecursive (line 308) | private _collectAllExportsRecursive(astModuleExportInfo: IAstModuleExp...
method fetchReferencedAstEntity (line 361) | public fetchReferencedAstEntity(symbol: ts.Symbol, referringModuleIsEx...
method fetchReferencedAstEntityFromImportTypeNode (line 417) | public fetchReferencedAstEntityFromImportTypeNode(
method _tryMatchExportDeclaration (line 508) | private _tryMatchExportDeclaration(declaration: ts.Declaration, declar...
method _getAstNamespaceExport (line 612) | private _getAstNamespaceExport(
method _tryMatchImportDeclaration (line 627) | private _tryMatchImportDeclaration(declaration: ts.Declaration, declar...
method _getAstNamespaceImport (line 775) | private _getAstNamespaceImport(
method _getIsTypeOnly (line 794) | private static _getIsTypeOnly(importDeclaration: ts.ImportDeclaration)...
method _getExportOfSpecifierAstModule (line 802) | private _getExportOfSpecifierAstModule(
method _getExportOfAstModule (line 812) | private _getExportOfAstModule(exportName: string, astModule: AstModule...
method tryGetExportOfAstModule (line 827) | public tryGetExportOfAstModule(exportName: string, astModule: AstModul...
method _tryGetExportOfAstModule (line 832) | private _tryGetExportOfAstModule(
method _tryGetExternalModulePath (line 885) | private _tryGetExternalModulePath(
method _fetchSpecifierAstModule (line 900) | private _fetchSpecifierAstModule(
method _fetchAstImport (line 957) | private _fetchAstImport(importSymbol: ts.Symbol | undefined, options: ...
method _getModuleSpecifier (line 987) | private _getModuleSpecifier(
FILE: packages/api-extractor/src/analyzer/PackageMetadataManager.ts
class PackageMetadata (line 23) | class PackageMetadata {
method constructor (line 41) | public constructor(packageJsonPath: string, packageJson: INodePackageJ...
constant TSDOC_METADATA_FILENAME (line 48) | const TSDOC_METADATA_FILENAME = 'tsdoc-metadata.json' as const;
function _tryResolveTsdocMetadataFromTsdocMetadataField (line 55) | function _tryResolveTsdocMetadataFromTsdocMetadataField({ tsdocMetadata ...
function _tryResolveTsdocMetadataFromExportsField (line 67) | function _tryResolveTsdocMetadataFromExportsField({ exports }: INodePack...
function _tryResolveTsdocMetadataFromTypesVersionsField (line 116) | function _tryResolveTsdocMetadataFromTypesVersionsField({ typesVersions ...
function _tryResolveTsdocMetadataFromTypesOrTypingsFields (line 157) | function _tryResolveTsdocMetadataFromTypesOrTypingsFields({ typings, typ...
function _tryResolveTsdocMetadataFromMainField (line 170) | function _tryResolveTsdocMetadataFromMainField({ main }: INodePackageJso...
class PackageMetadataManager (line 191) | class PackageMetadataManager {
method constructor (line 200) | public constructor(packageJsonLookup: PackageJsonLookup, messageRouter...
method _resolveTsdocMetadataPathFromPackageJson (line 209) | private static _resolveTsdocMetadataPathFromPackageJson(
method resolveTsdocMetadataPath (line 239) | public static resolveTsdocMetadataPath(
method writeTsdocMetadataFile (line 254) | public static writeTsdocMetadataFile(tsdocMetadataPath: string, newlin...
method tryFetchPackageMetadata (line 281) | public tryFetchPackageMetadata(sourceFilePath: string): PackageMetadat...
method isAedocSupportedFor (line 318) | public isAedocSupportedFor(sourceFilePath: string): boolean {
FILE: packages/api-extractor/src/analyzer/SourceFileLocationFormatter.ts
type ISourceFileLocationFormatOptions (line 8) | interface ISourceFileLocationFormatOptions {
class SourceFileLocationFormatter (line 14) | class SourceFileLocationFormatter {
method formatDeclaration (line 19) | public static formatDeclaration(node: ts.Node, workingPackageFolderPat...
method formatPath (line 30) | public static formatPath(sourceFilePath: string, options?: ISourceFile...
FILE: packages/api-extractor/src/analyzer/Span.ts
type IWriteModifiedTextOptions (line 9) | interface IWriteModifiedTextOptions {
type IndentDocCommentState (line 15) | enum IndentDocCommentState {
type IndentDocCommentScope (line 37) | enum IndentDocCommentScope {
class SpanModification (line 57) | class SpanModification {
method constructor (line 104) | public constructor(span: Span) {
method prefix (line 112) | public get prefix(): string {
method prefix (line 116) | public set prefix(value: string) {
method suffix (line 123) | public get suffix(): string {
method suffix (line 127) | public set suffix(value: string) {
method reset (line 134) | public reset(): void {
method skipAll (line 150) | public skipAll(): void {
class Span (line 183) | class Span {
method constructor (line 205) | public constructor(node: ts.Node) {
method kind (line 268) | public get kind(): ts.SyntaxKind {
method parent (line 277) | public get parent(): Span | undefined {
method previousSibling (line 287) | public get previousSibling(): Span | undefined {
method nextSibling (line 297) | public get nextSibling(): Span | undefined {
method prefix (line 304) | public get prefix(): string {
method suffix (line 317) | public get suffix(): string {
method separator (line 330) | public get separator(): string {
method getLastInnerSeparator (line 338) | public getLastInnerSeparator(): string {
method findFirstParent (line 353) | public findFirstParent(kindToMatch: ts.SyntaxKind): Span | undefined {
method forEach (line 371) | public forEach(callback: (span: Span) => void): void {
method getText (line 383) | public getText(): string {
method getModifiedText (line 400) | public getModifiedText(): string {
method writeModifiedText (line 413) | public writeModifiedText(output: IndentedWriter): void {
method getDump (line 425) | public getDump(indent: string = ''): string {
method getModifiedDump (line 452) | public getModifiedDump(indent: string = ''): string {
method _writeModifiedText (line 503) | private _writeModifiedText(options: IWriteModifiedTextOptions): void {
method _beginIndentDocComment (line 617) | private _beginIndentDocComment(options: IWriteModifiedTextOptions): vo...
method _endIndentDocComment (line 625) | private _endIndentDocComment(options: IWriteModifiedTextOptions): void {
method _write (line 636) | private _write(text: string, options: IWriteModifiedTextOptions): void {
method _getTrimmed (line 666) | private _getTrimmed(text: string): string {
method _getSubstring (line 670) | private _getSubstring(startIndex: number, endIndex: number): string {
FILE: packages/api-extractor/src/analyzer/SyntaxHelpers.ts
class SyntaxHelpers (line 9) | class SyntaxHelpers {
method isSafeUnquotedMemberIdentifier (line 27) | public static isSafeUnquotedMemberIdentifier(identifier: string): bool...
method makeCamelCaseIdentifier (line 52) | public static makeCamelCaseIdentifier(input: string): string {
FILE: packages/api-extractor/src/analyzer/TypeScriptHelpers.ts
class TypeScriptHelpers (line 9) | class TypeScriptHelpers {
method followAliases (line 29) | public static followAliases(symbol: ts.Symbol, typeChecker: ts.TypeChe...
method isFollowableAlias (line 51) | public static isFollowableAlias(symbol: ts.Symbol, typeChecker: ts.Typ...
method tryGetADeclaration (line 66) | public static tryGetADeclaration(symbol: ts.Symbol): ts.Declaration | ...
method isAmbient (line 77) | public static isAmbient(symbol: ts.Symbol, typeChecker: ts.TypeChecker...
method getSymbolForDeclaration (line 109) | public static getSymbolForDeclaration(declaration: ts.Declaration, che...
method getModuleSpecifier (line 122) | public static getModuleSpecifier(
method matchAncestor (line 163) | public static matchAncestor<T extends ts.Node>(node: ts.Node, kindsToM...
method findFirstChildNode (line 192) | public static findFirstChildNode<T extends ts.Node>(node: ts.Node, kin...
method findFirstParent (line 210) | public static findFirstParent<T extends ts.Node>(node: ts.Node, kindTo...
method findHighestParent (line 230) | public static findHighestParent<T extends ts.Node>(node: ts.Node, kind...
method tryDecodeWellKnownSymbolName (line 254) | public static tryDecodeWellKnownSymbolName(name: ts.__String): string ...
method isUniqueSymbolName (line 267) | public static isUniqueSymbolName(name: ts.__String): boolean {
method tryGetLateBoundName (line 274) | public static tryGetLateBoundName(declarationName: ts.ComputedProperty...
FILE: packages/api-extractor/src/analyzer/TypeScriptInternals.ts
type IGlobalVariableAnalyzer (line 10) | interface IGlobalVariableAnalyzer {
class TypeScriptInternals (line 14) | class TypeScriptInternals {
method tryGetSymbolForDeclaration (line 23) | public static tryGetSymbolForDeclaration(
method isLateBoundSymbol (line 40) | public static isLateBoundSymbol(symbol: ts.Symbol): boolean {
method getJSDocCommentRanges (line 50) | public static getJSDocCommentRanges(node: ts.Node, text: string): ts.C...
method getTextOfIdentifierOrLiteral (line 60) | public static getTextOfIdentifierOrLiteral(node: ts.Identifier | ts.Nu...
method getResolvedModule (line 71) | public static getResolvedModule(
method getSymbolParent (line 90) | public static getSymbolParent(symbol: ts.Symbol): ts.Symbol | undefined {
method tryGetLocalSymbol (line 98) | public static tryGetLocalSymbol(declaration: ts.Declaration): ts.Symbo...
method getGlobalVariableAnalyzer (line 102) | public static getGlobalVariableAnalyzer(program: ts.Program): IGlobalV...
method isVarConst (line 126) | public static isVarConst(node: ts.VariableDeclaration | ts.VariableDec...
FILE: packages/api-extractor/src/api/CompilerState.ts
type ICompilerStateCreateOptions (line 17) | interface ICompilerStateCreateOptions {
class CompilerState (line 35) | class CompilerState {
method constructor (line 41) | private constructor(properties: CompilerState) {
method create (line 48) | public static create(extractorConfig: ExtractorConfig, options?: IComp...
method _generateFilePathsForAnalysis (line 108) | private static _generateFilePathsForAnalysis(inputFilePaths: string[])...
method _createCompilerHost (line 131) | private static _createCompilerHost(
FILE: packages/api-extractor/src/api/ConsoleMessageId.ts
type ConsoleMessageId (line 13) | const enum ConsoleMessageId {
FILE: packages/api-extractor/src/api/Extractor.ts
type IExtractorInvokeOptions (line 37) | interface IExtractorInvokeOptions {
class ExtractorResult (line 103) | class ExtractorResult {
method constructor (line 150) | public constructor(properties: ExtractorResult) {
class Extractor (line 165) | class Extractor {
method version (line 169) | public static get version(): string {
method packageName (line 176) | public static get packageName(): string {
method _getPackageJson (line 180) | private static _getPackageJson(): IPackageJson {
method loadConfigAndInvoke (line 187) | public static loadConfigAndInvoke(configFilePath: string, options?: IE...
method invoke (line 196) | public static invoke(extractorConfig: ExtractorConfig, options?: IExtr...
method _writeApiReport (line 374) | private static _writeApiReport(
method _checkCompilerCompatibility (line 498) | private static _checkCompilerCompatibility(extractorConfig: ExtractorC...
method _generateRollupDtsFile (line 529) | private static _generateRollupDtsFile(
FILE: packages/api-extractor/src/api/ExtractorConfig.ts
type IExtractorConfigTokenContext (line 39) | interface IExtractorConfigTokenContext {
type IExtractorConfigLoadForFolderOptions (line 67) | interface IExtractorConfigLoadForFolderOptions {
type IExtractorConfigPrepareOptions (line 92) | interface IExtractorConfigPrepareOptions {
type IExtractorConfigApiReport (line 164) | interface IExtractorConfigApiReport {
type IExtractorConfigParameters (line 200) | interface IExtractorConfigParameters {
class ExtractorConfig (line 255) | class ExtractorConfig {
method reportFilePath (line 360) | public get reportFilePath(): string {
method reportTempFilePath (line 371) | public get reportTempFilePath(): string {
method constructor (line 474) | private constructor({
method getDiagnosticDump (line 556) | public getDiagnosticDump(): string {
method _getShortFilePath (line 577) | public _getShortFilePath(absolutePath: string): string {
method tryLoadForFolder (line 606) | public static tryLoadForFolder(
method loadFileAndPrepare (line 657) | public static loadFileAndPrepare(configJsonFilePath: string): Extracto...
method loadFile (line 682) | public static loadFile(jsonFilePath: string): IConfigFile {
method _resolveConfigFileRelativePaths (line 752) | private static _resolveConfigFileRelativePaths(configFile: IConfigFile...
method _resolveConfigFileRelativePath (line 861) | private static _resolveConfigFileRelativePath(
method prepare (line 880) | public static prepare(options: IExtractorConfigPrepareOptions): Extrac...
method _getCompleteReportConfig (line 1367) | private _getCompleteReportConfig(): IExtractorConfigApiReport | undefi...
method _resolvePathWithTokens (line 1371) | private static _resolvePathWithTokens(
method _expandStringWithTokens (line 1384) | private static _expandStringWithTokens(
method hasDtsFileExtension (line 1421) | public static hasDtsFileExtension(filePath: string): boolean {
method _rejectAnyTokensInPath (line 1429) | private static _rejectAnyTokensInPath(value: string, fieldName: string...
function _validateTagsToReport (line 1450) | function _validateTagsToReport(
FILE: packages/api-extractor/src/api/ExtractorLogLevel.ts
type ExtractorLogLevel (line 11) | const enum ExtractorLogLevel {
FILE: packages/api-extractor/src/api/ExtractorMessage.ts
type IExtractorMessageProperties (line 15) | interface IExtractorMessageProperties {
type ExtractorMessageCategory (line 32) | const enum ExtractorMessageCategory {
type IExtractorMessageOptions (line 74) | interface IExtractorMessageOptions {
class ExtractorMessage (line 90) | class ExtractorMessage {
method constructor (line 137) | public constructor(options: IExtractorMessageOptions) {
method handled (line 162) | public get handled(): boolean {
method handled (line 166) | public set handled(value: boolean) {
method logLevel (line 187) | public get logLevel(): ExtractorLogLevel {
method logLevel (line 191) | public set logLevel(value: ExtractorLogLevel) {
method formatMessageWithLocation (line 215) | public formatMessageWithLocation(workingPackageFolderPath: string | un...
method formatMessageWithoutLocation (line 235) | public formatMessageWithoutLocation(): string {
FILE: packages/api-extractor/src/api/ExtractorMessageId.ts
type ExtractorMessageId (line 13) | const enum ExtractorMessageId {
FILE: packages/api-extractor/src/api/IConfigFile.ts
type IConfigEntryPoint (line 17) | interface IConfigEntryPoint {
type IConfigCompiler (line 29) | interface IConfigCompiler {
type ApiReportVariant (line 70) | type ApiReportVariant = 'alpha' | 'beta' | 'complete' | 'public';
type IConfigApiReport (line 79) | interface IConfigApiReport {
type ReleaseTagForTrim (line 191) | type ReleaseTagForTrim = '@alpha' | '@beta' | '@internal' | '@public';
type IConfigDocModel (line 200) | interface IConfigDocModel {
type IConfigDtsRollup (line 254) | interface IConfigDtsRollup {
type IConfigTsdocMetadata (line 323) | interface IConfigTsdocMetadata {
type IConfigMessageReportingRule (line 350) | interface IConfigMessageReportingRule {
type IConfigMessageReportingTable (line 375) | interface IConfigMessageReportingTable {
type IExtractorMessagesConfig (line 391) | interface IExtractorMessagesConfig {
type IConfigFile (line 415) | interface IConfigFile {
FILE: packages/api-extractor/src/cli/ApiExtractorCommandLine.ts
class ApiExtractorCommandLine (line 12) | class ApiExtractorCommandLine extends CommandLineParser {
method constructor (line 15) | public constructor() {
method onExecuteAsync (line 34) | protected override async onExecuteAsync(): Promise<void> {
method _populateActions (line 53) | private _populateActions(): void {
FILE: packages/api-extractor/src/cli/InitAction.ts
class InitAction (line 11) | class InitAction extends CommandLineAction {
method constructor (line 12) | public constructor(_parser: ApiExtractorCommandLine) {
method onExecuteAsync (line 23) | protected override async onExecuteAsync(): Promise<void> {
FILE: packages/api-extractor/src/cli/RunAction.ts
class RunAction (line 18) | class RunAction extends CommandLineAction {
method constructor (line 31) | public constructor(_parser: ApiExtractorCommandLine) {
method onExecuteAsync (line 86) | protected override async onExecuteAsync(): Promise<void> {
FILE: packages/api-extractor/src/collector/ApiItemMetadata.ts
type IApiItemMetadataOptions (line 11) | interface IApiItemMetadataOptions {
class ApiItemMetadata (line 46) | class ApiItemMetadata {
method constructor (line 86) | public constructor(options: IApiItemMetadataOptions) {
FILE: packages/api-extractor/src/collector/Collector.ts
type ICollectorOptions (line 34) | interface ICollectorOptions {
class Collector (line 58) | class Collector {
method constructor (line 108) | public constructor(options: ICollectorOptions) {
method dtsTypeReferenceDirectives (line 172) | public get dtsTypeReferenceDirectives(): ReadonlySet<string> {
method dtsLibReferenceDirectives (line 183) | public get dtsLibReferenceDirectives(): ReadonlySet<string> {
method entities (line 187) | public get entities(): ReadonlyMap<IWorkingPackageEntryPoint, Collecto...
method starExportedExternalModulePaths (line 195) | public get starExportedExternalModulePaths(): readonly string[] {
method analyze (line 202) | public analyze(): void {
method tryGetEntityForNode (line 356) | public tryGetEntityForNode(identifier: ts.Identifier | ts.ImportTypeNo...
method tryGetEntityForSymbol (line 369) | public tryGetEntityForSymbol(symbol: ts.Symbol): CollectorEntity | und...
method tryGetCollectorEntity (line 376) | public tryGetCollectorEntity(astEntity: AstEntity): CollectorEntity | ...
method fetchSymbolMetadata (line 380) | public fetchSymbolMetadata(astSymbol: AstSymbol): SymbolMetadata {
method fetchDeclarationMetadata (line 388) | public fetchDeclarationMetadata(astDeclaration: AstDeclaration): Decla...
method fetchApiItemMetadata (line 397) | public fetchApiItemMetadata(astDeclaration: AstDeclaration): ApiItemMe...
method tryFetchMetadataForAstEntity (line 406) | public tryFetchMetadataForAstEntity(astEntity: AstEntity): SymbolMetad...
method isAncillaryDeclaration (line 418) | public isAncillaryDeclaration(astDeclaration: AstDeclaration): boolean {
method getNonAncillaryDeclarations (line 423) | public getNonAncillaryDeclarations(astSymbol: AstSymbol): readonly Ast...
method getSortKeyIgnoringUnderscore (line 443) | public static getSortKeyIgnoringUnderscore(identifier: string | undefi...
method getOverloadIndex (line 462) | public getOverloadIndex(astDeclaration: AstDeclaration): number {
method _createCollectorEntity (line 493) | private _createCollectorEntity(
method _recursivelyCreateEntities (line 530) | private _recursivelyCreateEntities(
method _makeUniqueNames (line 578) | private _makeUniqueNames(entryPoint: IWorkingPackageEntryPoint): void {
method _fetchSymbolMetadata (line 660) | private _fetchSymbolMetadata(astSymbol: AstSymbol): void {
method _calculateDeclarationMetadataForDeclarations (line 699) | private _calculateDeclarationMetadataForDeclarations(astSymbol: AstSym...
method _addAncillaryDeclaration (line 737) | private _addAncillaryDeclaration(mainAstDeclaration: AstDeclaration, a...
method _calculateApiItemMetadata (line 773) | private _calculateApiItemMetadata(astDeclaration: AstDeclaration): void {
method _parseTsdocForAstDeclaration (line 939) | private _parseTsdocForAstDeclaration(astDeclaration: AstDeclaration): ...
method _collectReferenceDirectives (line 989) | private _collectReferenceDirectives(astEntity: AstEntity): void {
method _collectReferenceDirectivesFromSourceFiles (line 1016) | private _collectReferenceDirectivesFromSourceFiles(
method _getReferenceDirectiveFromSourceFile (line 1054) | private _getReferenceDirectiveFromSourceFile(
FILE: packages/api-extractor/src/collector/CollectorEntity.ts
class CollectorEntity (line 19) | class CollectorEntity {
method constructor (line 37) | public constructor(astEntity: AstEntity) {
method nameForEmit (line 46) | public get nameForEmit(): string | undefined {
method nameForEmit (line 50) | public set nameForEmit(value: string | undefined) {
method exportNames (line 66) | public get exportNames(): ReadonlySet<string> {
method singleExportName (line 79) | public get singleExportName(): string | undefined {
method shouldInlineExport (line 87) | public get shouldInlineExport(): boolean {
method exportedFromEntryPoint (line 100) | public get exportedFromEntryPoint(): boolean {
method exported (line 123) | public get exported(): boolean {
method consumable (line 163) | public get consumable(): boolean {
method getFirstExportingConsumableParent (line 181) | public getFirstExportingConsumableParent(): CollectorEntity | undefined {
method addExportName (line 194) | public addExportName(exportName: string): void {
method addLocalExportName (line 224) | public addLocalExportName(localExportName: string, parent: CollectorEn...
method getSortKey (line 234) | public getSortKey(): string {
FILE: packages/api-extractor/src/collector/DeclarationMetadata.ts
class InternalDeclarationMetadata (line 43) | class InternalDeclarationMetadata extends DeclarationMetadata {
FILE: packages/api-extractor/src/collector/MessageRouter.ts
type IReportingRule (line 22) | interface IReportingRule {
type IMessageRouterOptions (line 27) | interface IMessageRouterOptions {
type IBuildJsonDumpObjectOptions (line 37) | interface IBuildJsonDumpObjectOptions {
class MessageRouter (line 44) | class MessageRouter {
method constructor (line 90) | public constructor(options: IMessageRouterOptions) {
method _applyMessagesConfig (line 109) | private _applyMessagesConfig(messagesConfig: IExtractorMessagesConfig)...
method _getNormalizedRule (line 178) | private static _getNormalizedRule(rule: IConfigMessageReportingRule): ...
method messages (line 185) | public get messages(): readonly ExtractorMessage[] {
method addCompilerDiagnostic (line 192) | public addCompilerDiagnostic(diagnostic: ts.Diagnostic): void {
method addAnalyzerIssue (line 228) | public addAnalyzerIssue(
method addTsdocMessages (line 256) | public addTsdocMessages(
method buildJsonDumpObject (line 294) | public static buildJsonDumpObject(input: any, options?: IBuildJsonDump...
method _buildJsonDumpObject (line 302) | private static _buildJsonDumpObject(input: any, keyNamesToOmit: Set<st...
method _associateMessageWithAstDeclaration (line 350) | private _associateMessageWithAstDeclaration(
method addAnalyzerIssueForPosition (line 368) | public addAnalyzerIssueForPosition(
method fetchAssociatedMessagesForReviewFile (line 401) | public fetchAssociatedMessagesForReviewFile(astDeclaration: AstDeclara...
method fetchUnassociatedMessagesForReviewFile (line 426) | public fetchUnassociatedMessagesForReviewFile(): ExtractorMessage[] {
method handleRemainingNonConsoleMessages (line 451) | public handleRemainingNonConsoleMessages(): void {
method logError (line 468) | public logError(messageId: ConsoleMessageId, message: string, properti...
method logWarning (line 480) | public logWarning(messageId: ConsoleMessageId, message: string, proper...
method logInfo (line 492) | public logInfo(messageId: ConsoleMessageId, message: string, propertie...
method logVerbose (line 504) | public logVerbose(messageId: ConsoleMessageId, message: string, proper...
method logDiagnosticHeader (line 516) | public logDiagnosticHeader(title: string): void {
method logDiagnosticFooter (line 522) | public logDiagnosticFooter(): void {
method logDiagnostic (line 526) | public logDiagnostic(message: string): void {
method _handleMessage (line 535) | private _handleMessage(message: ExtractorMessage): void {
method _getRuleForMessage (line 608) | private _getRuleForMessage(message: ExtractorMessage): IReportingRule {
method _sortMessagesForOutput (line 629) | private _sortMessagesForOutput(messages: ExtractorMessage[]): void {
FILE: packages/api-extractor/src/collector/SourceMapper.ts
type ISourceMap (line 9) | interface ISourceMap {
type IOriginalFileInfo (line 18) | interface IOriginalFileInfo {
type ISourceLocation (line 27) | interface ISourceLocation {
type IGetSourceLocationOptions (line 44) | interface IGetSourceLocationOptions {
class SourceMapper (line 66) | class SourceMapper {
method getSourceLocation (line 77) | public getSourceLocation(options: IGetSourceLocationOptions): ISourceL...
method _getMappedSourceLocation (line 93) | private _getMappedSourceLocation(sourceLocation: ISourceLocation): ISo...
method _getSourceMap (line 166) | private _getSourceMap(sourceFilePath: string): ISourceMap | null {
method _findNearestMappingItem (line 222) | private static _findNearestMappingItem(mappingItems: MappingItem[], po...
method _compareMappingItem (line 250) | private static _compareMappingItem(mappingItem: MappingItem, position:...
FILE: packages/api-extractor/src/collector/SymbolMetadata.ts
type ISymbolMetadataOptions (line 9) | interface ISymbolMetadataOptions {
class SymbolMetadata (line 17) | class SymbolMetadata {
method constructor (line 22) | public constructor(options: ISymbolMetadataOptions) {
FILE: packages/api-extractor/src/collector/VisitorState.ts
type VisitorState (line 7) | enum VisitorState {
FILE: packages/api-extractor/src/collector/WorkingPackage.ts
type IWorkingPackageOptions (line 11) | interface IWorkingPackageOptions {
type IWorkingPackageEntryPoint (line 17) | interface IWorkingPackageEntryPoint {
class WorkingPackage (line 36) | class WorkingPackage {
method constructor (line 71) | public constructor(options: IWorkingPackageOptions) {
method name (line 80) | public get name(): string {
method isDefaultEntryPoint (line 84) | public isDefaultEntryPoint(entryPoint: IWorkingPackageEntryPoint): boo...
FILE: packages/api-extractor/src/enhancers/DocCommentEnhancer.ts
class DocCommentEnhancer (line 16) | class DocCommentEnhancer {
method constructor (line 19) | public constructor(collector: Collector) {
method analyze (line 23) | public static analyze(collector: Collector): void {
method analyze (line 28) | public analyze(): void {
method _analyzeApiItem (line 45) | private _analyzeApiItem(astDeclaration: AstDeclaration, entryPoint: IW...
method _analyzeNeedsDocumentation (line 73) | private _analyzeNeedsDocumentation(astDeclaration: AstDeclaration, met...
method _checkForBrokenLinks (line 147) | private _checkForBrokenLinks(
method _checkForBrokenLinksRecursive (line 159) | private _checkForBrokenLinksRecursive(
method _applyInheritDoc (line 194) | private _applyInheritDoc(
method _copyInheritedDocs (line 248) | private _copyInheritedDocs(targetDocComment: tsdoc.DocComment, sourceD...
FILE: packages/api-extractor/src/enhancers/ValidationEnhancer.ts
class ValidationEnhancer (line 19) | class ValidationEnhancer {
method analyze (line 20) | public static analyze(collector: Collector): void {
method _checkForInternalUnderscore (line 73) | private static _checkForInternalUnderscore(
method _checkForInconsistentReleaseTags (line 131) | private static _checkForInconsistentReleaseTags(
method _checkReferences (line 196) | private static _checkReferences(
method _isEcmaScriptSymbol (line 271) | private static _isEcmaScriptSymbol(astSymbol: AstSymbol): boolean {
FILE: packages/api-extractor/src/generators/ApiModelGenerator.ts
type DocgenAccess (line 63) | type DocgenAccess = 'private' | 'protected' | 'public';
type DocgenScope (line 64) | type DocgenScope = 'global' | 'instance' | 'static';
type DocgenDeprecated (line 65) | type DocgenDeprecated = boolean | string;
type DocgenMetaJson (line 67) | interface DocgenMetaJson {
type DocgenTypeJson (line 73) | interface DocgenTypeJson {
type DocgenVarJson (line 77) | interface DocgenVarJson {
type DocgenVarTypeJson (line 82) | type DocgenVarTypeJson = DocgenVarJson | string[][][];
type DocgenExceptionJson (line 83) | interface DocgenExceptionJson {
type DocgenExternalJson (line 89) | interface DocgenExternalJson {
type DocgenTypedefJson (line 96) | interface DocgenTypedefJson {
type DocgenEventJson (line 109) | interface DocgenEventJson {
type DocgenParamJson (line 118) | interface DocgenParamJson {
type DocgenConstructorJson (line 128) | interface DocgenConstructorJson {
type DocgenMethodJson (line 136) | interface DocgenMethodJson {
type DocgenPropertyJson (line 157) | interface DocgenPropertyJson {
type DocgenClassJson (line 172) | interface DocgenClassJson {
type DocgenInterfaceJson (line 187) | type DocgenInterfaceJson = DocgenClassJson;
type DocgenContainerJson (line 188) | type DocgenContainerJson =
type DocgenJson (line 196) | interface DocgenJson {
type IProcessAstEntityContext (line 208) | interface IProcessAstEntityContext {
type IApiModelGenerationOptions (line 219) | interface IApiModelGenerationOptions {
function filePathFromJson (line 231) | function filePathFromJson(meta: DocgenMetaJson): string {
function fixPrimitiveTypes (line 235) | function fixPrimitiveTypes(type: string, symbol: string | undefined) {
class ApiModelGenerator (line 246) | class ApiModelGenerator {
method constructor (line 261) | public constructor(collector: Collector, extractorConfig: ExtractorCon...
method apiModel (line 278) | public get apiModel(): ApiModel {
method buildApiPackage (line 282) | public buildApiPackage(): ApiPackage {
method _processAstEntity (line 323) | private _processAstEntity(astEntity: AstEntity, context: IProcessAstEn...
method _processAstNamespaceImport (line 356) | private _processAstNamespaceImport(astNamespaceImport: AstNamespaceImp...
method _processDeclaration (line 389) | private _processDeclaration(astDeclaration: AstDeclaration, context: I...
method _tryFindFunctionDeclaration (line 487) | private _tryFindFunctionDeclaration(astDeclaration: AstDeclaration): t...
method _processChildDeclarations (line 494) | private _processChildDeclarations(astDeclaration: AstDeclaration, cont...
method _processApiCallSignature (line 539) | private _processApiCallSignature(astDeclaration: AstDeclaration, conte...
method _processApiConstructor (line 586) | private _processApiConstructor(astDeclaration: AstDeclaration, context...
method _processApiClass (line 635) | private _processApiClass(astDeclaration: AstDeclaration, context: IPro...
method _processApiConstructSignature (line 738) | private _processApiConstructSignature(astDeclaration: AstDeclaration, ...
method _processApiEnum (line 795) | private _processApiEnum(astDeclaration: AstDeclaration, context: IProc...
method _processApiEnumMember (line 829) | private _processApiEnumMember(astDeclaration: AstDeclaration, context:...
method _processApiFunction (line 867) | private _processApiFunction(
method _processApiIndexSignature (line 944) | private _processApiIndexSignature(astDeclaration: AstDeclaration, cont...
method _processApiInterface (line 987) | private _processApiInterface(astDeclaration: AstDeclaration, context: ...
method _processApiMethod (line 1070) | private _processApiMethod(astDeclaration: AstDeclaration | null, conte...
method _processApiMethodSignature (line 1169) | private _processApiMethodSignature(astDeclaration: AstDeclaration | nu...
method _processApiNamespace (line 1247) | private _processApiNamespace(astDeclaration: AstDeclaration, context: ...
method _processApiProperty (line 1279) | private _processApiProperty(astDeclaration: AstDeclaration | null, con...
method _processApiPropertySignature (line 1377) | private _processApiPropertySignature(astDeclaration: AstDeclaration | ...
method _processApiTypeAlias (line 1446) | private _processApiTypeAlias(astDeclaration: AstDeclaration, context: ...
method _processApiVariable (line 1512) | private _processApiVariable(astDeclaration: AstDeclaration, context: I...
method _processApiEvent (line 1559) | private _processApiEvent(context: IProcessAstEntityContext): void {
method _buildExcerptTokens (line 1656) | private _buildExcerptTokens(
method _captureTypeParameters (line 1683) | private _captureTypeParameters(
method _captureParameters (line 1707) | private _captureParameters(
method _isInherited (line 1730) | private _isInherited(
method _isReadonly (line 1778) | private _isReadonly(astDeclaration: AstDeclaration): boolean {
method _getSourceLocation (line 1809) | private _getSourceLocation(declaration: ts.Declaration): ISourceLocati...
method _escapeSpecialChars (line 1822) | private _escapeSpecialChars(input: boolean | number | string) {
method _fixLinkTags (line 1830) | private _fixLinkTags(input?: string): string | undefined {
method _mapVarType (line 1849) | private _mapVarType(typey: DocgenVarTypeJson, nullable?: boolean): IEx...
method _mapProp (line 1921) | private _mapProp(prop: DocgenPropertyJson, _package: string): IApiProp...
method _mapParam (line 1952) | private _mapParam(
method _mapMethod (line 1970) | private _mapMethod(method: DocgenMethodJson, _package: string): IApiMe...
FILE: packages/api-extractor/src/generators/ApiReportGenerator.ts
function capitalizeFirstLetter (line 28) | function capitalizeFirstLetter(input: string): string {
class ApiReportGenerator (line 32) | class ApiReportGenerator {
method areEquivalentApiFileContents (line 42) | public static areEquivalentApiFileContents(actualFileContent: string, ...
method generateReviewFileContent (line 56) | public static generateReviewFileContent(collector: Collector, reportVa...
method _modifySpan (line 283) | private static _modifySpan(
method _shouldIncludeDeclaration (line 457) | private static _shouldIncludeDeclaration(
method _shouldIncludeReleaseTag (line 472) | private static _shouldIncludeReleaseTag(releaseTag: ReleaseTag, report...
method _modifySpanForPreapproved (line 505) | private static _modifySpanForPreapproved(span: Span): void {
method _getAedocSynopsis (line 557) | private static _getAedocSynopsis(
method _writeLineAsComments (line 646) | private static _writeLineAsComments(writer: IndentedWriter, line: stri...
FILE: packages/api-extractor/src/generators/DeclarationReferenceGenerator.ts
class DeclarationReferenceGenerator (line 20) | class DeclarationReferenceGenerator {
method constructor (line 25) | public constructor(collector: Collector) {
method getDeclarationReferenceForIdentifier (line 32) | public getDeclarationReferenceForIdentifier(
method getDeclarationReferenceForSymbol (line 60) | public getDeclarationReferenceForSymbol(
method _isInExpressionContext (line 68) | private static _isInExpressionContext(node: ts.Node): boolean {
method _isExternalModuleSymbol (line 80) | private static _isExternalModuleSymbol(symbol: ts.Symbol): boolean {
method _isSameSymbol (line 88) | private static _isSameSymbol(left: ts.Symbol | undefined, right: ts.Sy...
method _getNavigationToSymbol (line 95) | private _getNavigationToSymbol(symbol: ts.Symbol): Navigation {
method _getMeaningOfSymbol (line 146) | private static _getMeaningOfSymbol(symbol: ts.Symbol, meaning: ts.Symb...
method _symbolToDeclarationReference (line 209) | private _symbolToDeclarationReference(
method _getParentReference (line 293) | private _getParentReference(
method _getEntryPointName (line 373) | private _getEntryPointName(sourceFile: ts.SourceFile, entry: IWorkingP...
method _sourceFileToModuleSource (line 401) | private _sourceFileToModuleSource(
FILE: packages/api-extractor/src/generators/DtsEmitHelpers.ts
class DtsEmitHelpers (line 17) | class DtsEmitHelpers {
method emitImport (line 18) | public static emitImport(writer: IndentedWriter, collectorEntity: Coll...
method emitNamedExport (line 66) | public static emitNamedExport(writer: IndentedWriter, exportName: stri...
method emitStarExports (line 76) | public static emitStarExports(writer: IndentedWriter, collector: Colle...
method modifyImportTypeSpan (line 85) | public static modifyImportTypeSpan(
FILE: packages/api-extractor/src/generators/DtsRollupGenerator.ts
type DtsRollupKind (line 28) | enum DtsRollupKind {
class DtsRollupGenerator (line 57) | class DtsRollupGenerator {
method writeTypingsFile (line 64) | public static writeTypingsFile(
method _generateTypingsFileContent (line 81) | private static _generateTypingsFileContent(
method _modifySpan (line 249) | private static _modifySpan(
method _shouldIncludeReleaseTag (line 448) | private static _shouldIncludeReleaseTag(releaseTag: ReleaseTag, dtsKin...
FILE: packages/api-extractor/src/generators/ExcerptBuilder.ts
type IExcerptBuilderNodeToCapture (line 20) | interface IExcerptBuilderNodeToCapture {
type IBuildSpanState (line 35) | interface IBuildSpanState {
class ExcerptBuilder (line 65) | class ExcerptBuilder {
method addBlankLine (line 71) | public static addBlankLine(excerptTokens: IExcerptToken[]): void {
method addDeclaration (line 91) | public static addDeclaration(
method createEmptyTokenRange (line 135) | public static createEmptyTokenRange(): IExcerptTokenRange {
method createEmptyTokenRangeWithTypeParameters (line 139) | public static createEmptyTokenRangeWithTypeParameters(): IExcerptToken...
method _isPrimitiveKeyword (line 143) | private static _isPrimitiveKeyword(node: ts.Node): boolean {
method _isRedundantBarAfterColon (line 164) | private static _isRedundantBarAfterColon(span: Span) {
method _buildSpan (line 173) | private static _buildSpan(excerptTokens: IExcerptToken[], span: Span, ...
method _appendToken (line 255) | private static _appendToken(
method _condenseTokens (line 283) | private static _condenseTokens(excerptTokens: IExcerptToken[], tokenRa...
FILE: packages/api-extractor/src/generators/IndentedWriter.ts
class IndentedWriter (line 33) | class IndentedWriter {
method constructor (line 89) | public constructor(builder?: IStringBuilder) {
method getText (line 104) | public getText(): string {
method toString (line 108) | public toString(): string {
method increaseIndent (line 119) | public increaseIndent(indentPrefix?: string): void {
method decreaseIndent (line 128) | public decreaseIndent(): void {
method indentScope (line 137) | public indentScope(scope: () => void, indentPrefix?: string): void {
method ensureNewLine (line 146) | public ensureNewLine(): void {
method ensureSkippedLine (line 158) | public ensureSkippedLine(): void {
method peekLastCharacter (line 168) | public peekLastCharacter(): string {
method peekSecondLastCharacter (line 180) | public peekSecondLastCharacter(): string {
method write (line 199) | public write(message: string): void {
method writeLine (line 229) | public writeLine(message: string = ''): void {
method _writeLinePart (line 240) | private _writeLinePart(message: string): void {
method _writeNewLine (line 261) | private _writeNewLine(): void {
method _write (line 272) | private _write(str: string): void {
method _updateIndentText (line 278) | private _updateIndentText(): void {
FILE: packages/brokers/src/brokers/Broker.ts
type BaseBrokerOptions (line 8) | interface BaseBrokerOptions {
type ToEventMap (line 32) | type ToEventMap<
type IBaseBroker (line 44) | interface IBaseBroker<TEvents extends {}> {
type IPubSubBroker (line 56) | interface IPubSubBroker<TEvents extends {}>
type IRPCBroker (line 64) | interface IRPCBroker<TEvents extends Record<string, any[]>, TResponses e...
FILE: packages/brokers/src/brokers/redis/BaseRedis.ts
type RedisReadGroupData (line 11) | type RedisReadGroupData = [Buffer, [Buffer, Buffer[]][]][];
type Redis (line 15) | interface Redis {
type RedisBrokerOptions (line 33) | interface RedisBrokerOptions extends BaseBrokerOptions {
method constructor (line 123) | public constructor(
method subscribe (line 140) | public async subscribe(events: (keyof TEvents)[]): Promise<void> {
method unsubscribe (line 160) | public async unsubscribe(events: (keyof TEvents)[]): Promise<void> {
method listen (line 178) | protected async listen(): Promise<void> {
method readGroup (line 213) | private async readGroup(fromId: string, block: number): Promise<RedisRea...
method processMessages (line 230) | private async processMessages(data: RedisReadGroupData): Promise<void> {
method claimAndEmitDeadEvents (line 246) | private async claimAndEmitDeadEvents(): Promise<void> {
method destroy (line 313) | public async destroy() {
FILE: packages/brokers/src/brokers/redis/PubSubRedis.ts
class PubSubRedisBroker (line 32) | class PubSubRedisBroker<TEvents extends Record<string, any>>
method publish (line 39) | public async publish<Event extends keyof TEvents>(event: Event, data: ...
method emitEvent (line 43) | protected emitEvent(id: Buffer, group: string, event: string, data: un...
FILE: packages/brokers/src/brokers/redis/RPCRedis.ts
type InternalPromise (line 7) | interface InternalPromise {
type RPCRedisBrokerOptions (line 16) | interface RPCRedisBrokerOptions extends RedisBrokerOptions {
class RPCRedisBroker (line 56) | class RPCRedisBroker<TEvents extends Record<string, any[]>, TResponses e...
method constructor (line 70) | public constructor(redisClient: Redis, options: RPCRedisBrokerOptions) {
method call (line 88) | public async call<Event extends keyof TEvents>(
method emitEvent (line 119) | protected emitEvent(id: Buffer, event: string, data: unknown) {
FILE: packages/brokers/src/brokers/redis/RedisGateway.ts
type DiscordEvents (line 6) | type DiscordEvents = {
type BrokerProps (line 12) | interface BrokerProps<Payload> {
type Events (line 17) | interface Events extends DiscordEvents {
type RedisBrokerDiscordEvents (line 22) | type RedisBrokerDiscordEvents = {
class RedisGateway (line 83) | class RedisGateway
method toPublishArgs (line 95) | public static toPublishArgs(
method constructor (line 102) | public constructor(
method getShardCount (line 109) | public getShardCount(): number {
method send (line 113) | public async send(shardId: number, payload: GatewaySendPayload): Promi...
method init (line 117) | public async init(events: GatewayDispatchEvents[]) {
FILE: packages/builders/__tests__/components/selectMenu.test.ts
function makeStringSelectMenuWithOptions (line 37) | function makeStringSelectMenuWithOptions() {
function mapStringSelectMenuOptionBuildersToJson (line 47) | function mapStringSelectMenuOptionBuildersToJson(selectMenu: StringSelec...
FILE: packages/builders/__tests__/interactions/ChatInputCommands/ChatInputCommands.test.ts
class Collection (line 40) | class Collection {
FILE: packages/builders/__tests__/types.test-d.ts
type BuilderPropsOnly (line 12) | type BuilderPropsOnly<Type = ChatInputCommandBuilder> = Pick<
FILE: packages/builders/src/components/ActionRow.ts
type ActionRowBuilderData (line 37) | interface ActionRowBuilderData extends Partial<
class ActionRowBuilder (line 46) | class ActionRowBuilder extends ComponentBuilder<APIActionRowComponent<AP...
method components (line 55) | public get components(): readonly AnyActionRowComponentBuilder[] {
method constructor (line 93) | public constructor(data: Partial<APIActionRowComponent<APIComponentInA...
method addPrimaryButtonComponents (line 110) | public addPrimaryButtonComponents(
method addSecondaryButtonComponents (line 127) | public addSecondaryButtonComponents(
method addSuccessButtonComponents (line 146) | public addSuccessButtonComponents(
method addDangerButtonComponents (line 161) | public addDangerButtonComponents(
method addComponents (line 176) | public addComponents(...input: RestOrArray<AnyActionRowComponentBuilde...
method addPremiumButtonComponents (line 188) | public addPremiumButtonComponents(
method addLinkButtonComponents (line 205) | public addLinkButtonComponents(
method addChannelSelectMenuComponent (line 222) | public addChannelSelectMenuComponent(
method addMentionableSelectMenuComponent (line 237) | public addMentionableSelectMenuComponent(
method addRoleSelectMenuComponent (line 252) | public addRoleSelectMenuComponent(
method addStringSelectMenuComponent (line 264) | public addStringSelectMenuComponent(
method addUserSelectMenuComponent (line 279) | public addUserSelectMenuComponent(
method addTextInputComponent (line 291) | public addTextInputComponent(
method spliceComponents (line 326) | public spliceComponents(index: number, deleteCount: number, ...compone...
method toJSON (line 334) | public override toJSON(validationOverride?: boolean): APIActionRowComp...
FILE: packages/builders/src/components/Component.ts
type ComponentBuilderBaseData (line 4) | interface ComponentBuilderBaseData {
method setId (line 26) | public setId(id: number) {
method clearId (line 34) | public clearId() {
FILE: packages/builders/src/components/Components.ts
type MessageTopLevelComponentBuilder (line 39) | type MessageTopLevelComponentBuilder =
type MessageComponentBuilder (line 51) | type MessageComponentBuilder =
type ModalComponentBuilder (line 59) | type ModalComponentBuilder =
type ButtonBuilder (line 68) | type ButtonBuilder =
type MessageActionRowComponentBuilder (line 79) | type MessageActionRowComponentBuilder =
type ModalActionRowComponentBuilder (line 90) | type ModalActionRowComponentBuilder = TextInputBuilder;
type AnyActionRowComponentBuilder (line 95) | type AnyActionRowComponentBuilder = MessageActionRowComponentBuilder | M...
type AnyModalComponentBuilder (line 100) | type AnyModalComponentBuilder = FileUploadBuilder | LabelBuilder | TextD...
type MappedComponentTypes (line 105) | interface MappedComponentTypes {
function createComponentBuilder (line 197) | function createComponentBuilder(
function createButtonBuilder (line 246) | function createButtonBuilder(data: APIButtonComponent): ButtonBuilder {
function resolveAccessoryComponent (line 266) | function resolveAccessoryComponent(component: APISectionAccessoryCompone...
FILE: packages/builders/src/components/button/Button.ts
method setDisabled (line 20) | public setDisabled(disabled = true) {
method toJSON (line 28) | public override toJSON(validationOverride?: boolean): ButtonData {
FILE: packages/builders/src/components/button/CustomIdButton.ts
type CustomIdButtonStyle (line 6) | type CustomIdButtonStyle = APIButtonComponentWithCustomId['style'];
method constructor (line 20) | protected constructor(data: Partial<APIButtonComponentWithCustomId> = {}) {
method setCustomId (line 32) | public setCustomId(customId: string) {
class PrimaryButtonBuilder (line 41) | class PrimaryButtonBuilder extends CustomIdButtonBuilder {
method constructor (line 42) | public constructor(data: Partial<APIButtonComponentWithCustomId> = {}) {
class SecondaryButtonBuilder (line 50) | class SecondaryButtonBuilder extends CustomIdButtonBuilder {
method constructor (line 51) | public constructor(data: Partial<APIButtonComponentWithCustomId> = {}) {
class SuccessButtonBuilder (line 59) | class SuccessButtonBuilder extends CustomIdButtonBuilder {
method constructor (line 60) | public constructor(data: Partial<APIButtonComponentWithCustomId> = {}) {
class DangerButtonBuilder (line 68) | class DangerButtonBuilder extends CustomIdButtonBuilder {
method constructor (line 69) | public constructor(data: Partial<APIButtonComponentWithCustomId> = {}) {
FILE: packages/builders/src/components/button/LinkButton.ts
class LinkButtonBuilder (line 17) | class LinkButtonBuilder extends Mixin(BaseButtonBuilder<APIButtonCompone...
method constructor (line 20) | public constructor(data: Partial<APIButtonComponent> = {}) {
method setURL (line 33) | public setURL(url: string) {
FILE: packages/builders/src/components/button/PremiumButton.ts
class PremiumButtonBuilder (line 8) | class PremiumButtonBuilder extends BaseButtonBuilder<APIButtonComponentW...
method constructor (line 11) | public constructor(data: Partial<APIButtonComponentWithSKUId> = {}) {
method setSKUId (line 22) | public setSKUId(skuId: Snowflake) {
FILE: packages/builders/src/components/button/mixins/EmojiOrLabelButtonMixin.ts
type EmojiOrLabelButtonData (line 3) | interface EmojiOrLabelButtonData extends Pick<
class EmojiOrLabelButtonMixin (line 11) | class EmojiOrLabelButtonMixin {
method setEmoji (line 22) | public setEmoji(emoji: APIMessageComponentEmoji) {
method clearEmoji (line 30) | public clearEmoji() {
method setLabel (line 40) | public setLabel(label: string) {
method clearLabel (line 48) | public clearLabel() {
FILE: packages/builders/src/components/fileUpload/FileUpload.ts
class FileUploadBuilder (line 10) | class FileUploadBuilder extends ComponentBuilder<APIFileUploadComponent> {
method constructor (line 39) | public constructor(data: Partial<APIFileUploadComponent> = {}) {
method setCustomId (line 49) | public setCustomId(customId: string) {
method setMinValues (line 59) | public setMinValues(minValues: number) {
method clearMinValues (line 67) | public clearMinValues() {
method setMaxValues (line 77) | public setMaxValues(maxValues: number) {
method clearMaxValues (line 85) | public clearMaxValues() {
method setRequired (line 95) | public setRequired(required = true) {
method toJSON (line 103) | public toJSON(validationOverride?: boolean): APIFileUploadComponent {
FILE: packages/builders/src/components/label/Label.ts
type LabelBuilderData (line 25) | interface LabelBuilderData extends Partial<Omit<APILabelComponent, 'comp...
class LabelBuilder (line 39) | class LabelBuilder extends ComponentBuilder<APILabelComponent> {
method constructor (line 66) | public constructor(data: Partial<APILabelComponent> = {}) {
method setLabel (line 84) | public setLabel(label: string) {
method setDescription (line 94) | public setDescription(description: string) {
method clearDescription (line 102) | public clearDescription() {
method setStringSelectMenuComponent (line 112) | public setStringSelectMenuComponent(
method setUserSelectMenuComponent (line 127) | public setUserSelectMenuComponent(
method setRoleSelectMenuComponent (line 139) | public setRoleSelectMenuComponent(
method setMentionableSelectMenuComponent (line 151) | public setMentionableSelectMenuComponent(
method setChannelSelectMenuComponent (line 166) | public setChannelSelectMenuComponent(
method setTextInputComponent (line 181) | public setTextInputComponent(
method setFileUploadComponent (line 193) | public setFileUploadComponent(
method toJSON (line 203) | public override toJSON(validationOverride?: boolean): APILabelComponent {
FILE: packages/builders/src/components/selectMenu/ChannelSelectMenu.ts
class ChannelSelectMenuBuilder (line 16) | class ChannelSelectMenuBuilder extends BaseSelectMenuBuilder<APIChannelS...
method constructor (line 42) | public constructor(data: Partial<APIChannelSelectComponent> = {}) {
method addChannelTypes (line 52) | public addChannelTypes(...types: RestOrArray<ChannelType>) {
method setChannelTypes (line 64) | public setChannelTypes(...types: RestOrArray<ChannelType>) {
method addDefaultChannels (line 76) | public addDefaultChannels(...channels: RestOrArray<Snowflake>) {
method setDefaultChannels (line 95) | public setDefaultChannels(...channels: RestOrArray<Snowflake>) {
method toJSON (line 109) | public override toJSON(validationOverride?: boolean): APIChannelSelect...
FILE: packages/builders/src/components/selectMenu/MentionableSelectMenu.ts
class MentionableSelectMenuBuilder (line 16) | class MentionableSelectMenuBuilder extends BaseSelectMenuBuilder<APIMent...
method constructor (line 41) | public constructor(data: Partial<APIMentionableSelectComponent> = {}) {
method addDefaultRoles (line 51) | public addDefaultRoles(...roles: RestOrArray<Snowflake>) {
method addDefaultUsers (line 70) | public addDefaultUsers(...users: RestOrArray<Snowflake>) {
method addDefaultValues (line 89) | public addDefaultValues(
method setDefaultValues (line 106) | public setDefaultValues(
method toJSON (line 120) | public override toJSON(validationOverride?: boolean): APIMentionableSe...
FILE: packages/builders/src/components/selectMenu/RoleSelectMenu.ts
class RoleSelectMenuBuilder (line 15) | class RoleSelectMenuBuilder extends BaseSelectMenuBuilder<APIRoleSelectC...
method constructor (line 40) | public constructor(data: Partial<APIRoleSelectComponent> = {}) {
method addDefaultRoles (line 50) | public addDefaultRoles(...roles: RestOrArray<Snowflake>) {
method setDefaultRoles (line 69) | public setDefaultRoles(...roles: RestOrArray<Snowflake>) {
method toJSON (line 83) | public override toJSON(validationOverride?: boolean): APIRoleSelectCom...
FILE: packages/builders/src/components/selectMenu/StringSelectMenu.ts
type StringSelectMenuData (line 10) | interface StringSelectMenuData extends Partial<Omit<APIStringSelectCompo...
class StringSelectMenuBuilder (line 18) | class StringSelectMenuBuilder extends BaseSelectMenuBuilder<APIStringSel...
method options (line 24) | public get options(): readonly StringSelectMenuOptionBuilder[] {
method constructor (line 59) | public constructor(data: Partial<APIStringSelectComponent> = {}) {
method addOptions (line 76) | public addOptions(
method setOptions (line 96) | public setOptions(
method spliceOptions (line 133) | public spliceOptions(
method toJSON (line 153) | public override toJSON(validationOverride?: boolean): APIStringSelectC...
FILE: packages/builders/src/components/selectMenu/StringSelectMenuOption.ts
class StringSelectMenuOptionBuilder (line 9) | class StringSelectMenuOptionBuilder implements JSONEncodable<APISelectMe...
method constructor (line 34) | public constructor(data: Partial<APISelectMenuOption> = {}) {
method setLabel (line 43) | public setLabel(label: string) {
method setValue (line 53) | public setValue(value: string) {
method setDescription (line 63) | public setDescription(description: string) {
method clearDescription (line 71) | public clearDescription() {
method setDefault (line 81) | public setDefault(isDefault = true) {
method setEmoji (line 91) | public setEmoji(emoji: APIMessageComponentEmoji) {
method clearEmoji (line 99) | public clearEmoji() {
method toJSON (line 107) | public toJSON(validationOverride?: boolean): APISelectMenuOption {
FILE: packages/builders/src/components/selectMenu/UserSelectMenu.ts
class UserSelectMenuBuilder (line 15) | class UserSelectMenuBuilder extends BaseSelectMenuBuilder<APIUserSelectC...
method constructor (line 40) | public constructor(data: Partial<APIUserSelectComponent> = {}) {
method addDefaultUsers (line 50) | public addDefaultUsers(...users: RestOrArray<Snowflake>) {
method setDefaultUsers (line 69) | public setDefaultUsers(...users: RestOrArray<Snowflake>) {
method toJSON (line 83) | public override toJSON(validationOverride?: boolean): APIUserSelectCom...
FILE: packages/builders/src/components/textInput/TextInput.ts
class TextInputBuilder (line 9) | class TextInputBuilder extends ComponentBuilder<APITextInputComponent> {
method constructor (line 38) | public constructor(data: Partial<APITextInputComponent> = {}) {
method setCustomId (line 48) | public setCustomId(customId: string) {
method setStyle (line 58) | public setStyle(style: TextInputStyle) {
method setMinLength (line 68) | public setMinLength(minLength: number) {
method clearMinLength (line 76) | public clearMinLength() {
method setMaxLength (line 86) | public setMaxLength(maxLength: number) {
method clearMaxLength (line 94) | public clearMaxLength() {
method setPlaceholder (line 104) | public setPlaceholder(placeholder: string) {
method clearPlaceholder (line 112) | public clearPlaceholder() {
method setValue (line 122) | public setValue(value: string) {
method clearValue (line 130) | public clearValue() {
method setRequired (line 140) | public setRequired(required = true) {
method toJSON (line 148) | public toJSON(validationOverride?: boolean): APITextInputComponent {
FILE: packages/builders/src/components/v2/Container.ts
type ContainerComponentBuilders (line 26) | type ContainerComponentBuilders =
type ContainerBuilderData (line 34) | interface ContainerBuilderData extends Partial<Omit<APIContainerComponen...
class ContainerBuilder (line 41) | class ContainerBuilder extends ComponentBuilder<APIContainerComponent> {
method components (line 50) | public get components(): readonly ContainerComponentBuilders[] {
method constructor (line 59) | public constructor(data: Partial<APIContainerComponent> = {}) {
method setAccentColor (line 76) | public setAccentColor(color: number) {
method clearAccentColor (line 84) | public clearAccentColor() {
method setSpoiler (line 94) | public setSpoiler(spoiler = true) {
method addActionRowComponents (line 104) | public addActionRowComponents(
method addFileComponents (line 123) | public addFileComponents(
method addMediaGalleryComponents (line 138) | public addMediaGalleryComponents(
method addSectionComponents (line 155) | public addSectionComponents(
method addSeparatorComponents (line 170) | public addSeparatorComponents(
method addTextDisplayComponents (line 185) | public addTextDisplayComponents(
method spliceComponents (line 225) | public spliceComponents(
method toJSON (line 242) | public override toJSON(validationOverride?: boolean): APIContainerComp...
FILE: packages/builders/src/components/v2/File.ts
class FileBuilder (line 9) | class FileBuilder extends ComponentBuilder<APIFileComponent> {
method constructor (line 40) | public constructor(data: Partial<APIFileComponent> = {}) {
method setSpoiler (line 57) | public setSpoiler(spoiler = true) {
method setURL (line 67) | public setURL(url: string) {
method toJSON (line 75) | public override toJSON(validationOverride?: boolean): APIFileComponent {
FILE: packages/builders/src/components/v2/MediaGallery.ts
type MediaGalleryBuilderData (line 9) | interface MediaGalleryBuilderData extends Partial<Omit<APIMediaGalleryCo...
class MediaGalleryBuilder (line 16) | class MediaGalleryBuilder extends ComponentBuilder<APIMediaGalleryCompon...
method items (line 25) | public get items(): readonly MediaGalleryItemBuilder[] {
method constructor (line 63) | public constructor(data: Partial<APIMediaGalleryComponent> = {}) {
method addItems (line 80) | public addItems(
method spliceItems (line 99) | public spliceItems(
method toJSON (line 116) | public override toJSON(validationOverride?: boolean): APIMediaGalleryC...
FILE: packages/builders/src/components/v2/MediaGalleryItem.ts
class MediaGalleryItemBuilder (line 6) | class MediaGalleryItemBuilder implements JSONEncodable<APIMediaGalleryIt...
method constructor (line 34) | public constructor(data: Partial<APIMediaGalleryItem> = {}) {
method setURL (line 43) | public setURL(url: string) {
method setDescription (line 53) | public setDescription(description: string) {
method clearDescription (line 61) | public clearDescription() {
method setSpoiler (line 71) | public setSpoiler(spoiler = true) {
method toJSON (line 79) | public toJSON(validationOverride?: boolean): APIMediaGalleryItem {
FILE: packages/builders/src/components/v2/Section.ts
type SectionBuilderAccessory (line 28) | type SectionBuilderAccessory = ButtonBuilder | ThumbnailBuilder;
type SectionBuilderData (line 30) | interface SectionBuilderData extends Partial<Omit<APISectionComponent, '...
class SectionBuilder (line 38) | class SectionBuilder extends ComponentBuilder<APISectionComponent> {
method components (line 47) | public get components(): readonly TextDisplayBuilder[] {
method constructor (line 86) | public constructor(data: Partial<APISectionComponent> = {}) {
method addTextDisplayComponents (line 104) | public addTextDisplayComponents(
method setPrimaryButtonAccessory (line 121) | public setPrimaryButtonAccessory(
method setSecondaryButtonAccessory (line 138) | public setSecondaryButtonAccessory(
method setSuccessButtonAccessory (line 155) | public setSuccessButtonAccessory(
method setDangerButtonAccessory (line 172) | public setDangerButtonAccessory(
method setPremiumButtonAccessory (line 189) | public setPremiumButtonAccessory(
method setLinkButtonAccessory (line 206) | public setLinkButtonAccessory(
method setThumbnailAccessory (line 220) | public setThumbnailAccessory(
method spliceTextDisplayComponents (line 236) | public spliceTextDisplayComponents(
method toJSON (line 253) | public override toJSON(validationOverride?: boolean): APISectionCompon...
FILE: packages/builders/src/components/v2/Separator.ts
class SeparatorBuilder (line 10) | class SeparatorBuilder extends ComponentBuilder<APISeparatorComponent> {
method constructor (line 37) | public constructor(data: Partial<APISeparatorComponent> = {}) {
method setDivider (line 50) | public setDivider(divider = true) {
method setSpacing (line 60) | public setSpacing(spacing: SeparatorSpacingSize) {
method clearSpacing (line 68) | public clearSpacing() {
method toJSON (line 76) | public override toJSON(validationOverride?: boolean): APISeparatorComp...
FILE: packages/builders/src/components/v2/TextDisplay.ts
class TextDisplayBuilder (line 10) | class TextDisplayBuilder extends ComponentBuilder<APITextDisplayComponen...
method constructor (line 36) | public constructor(data: Partial<APITextDisplayComponent> = {}) {
method setContent (line 49) | public setContent(content: string) {
method toJSON (line 57) | public override toJSON(validationOverride?: boolean): APITextDisplayCo...
FILE: packages/builders/src/components/v2/Thumbnail.ts
class ThumbnailBuilder (line 10) | class ThumbnailBuilder extends ComponentBuilder<APIThumbnailComponent> {
method constructor (line 41) | public constructor(data: Partial<APIThumbnailComponent> = {}) {
method setDescription (line 58) | public setDescription(description: string) {
method clearDescription (line 66) | public clearDescription() {
method setSpoiler (line 76) | public setSpoiler(spoiler = true) {
method setURL (line 86) | public setURL(url: string) {
method toJSON (line 94) | public override toJSON(validationOverride?: boolean): APIThumbnailComp...
FILE: packages/builders/src/interactions/commands/Command.ts
type CommandData (line 11) | interface CommandData extends Partial<
method setContexts (line 33) | public setContexts(...contexts: RestOrArray<InteractionContextType>) {
method setIntegrationTypes (line 43) | public setIntegrationTypes(...integrationTypes: RestOrArray<ApplicationI...
method setDefaultMemberPermissions (line 56) | public setDefaultMemberPermissions(permissions: Permissions | bigint | n...
method clearDefaultMemberPermissions (line 64) | public clearDefaultMemberPermissions() {
method setNSFW (line 74) | public setNSFW(nsfw = true) {
FILE: packages/builders/src/interactions/commands/SharedName.ts
type SharedNameData (line 3) | interface SharedNameData extends Partial<
class SharedName (line 10) | class SharedName {
method setName (line 21) | public setName(name: string): this {
method setNameLocalization (line 32) | public setNameLocalization(locale: Locale, localizedName: string) {
method clearNameLocalization (line 44) | public clearNameLocalization(locale: Locale) {
method setNameLocalizations (line 56) | public setNameLocalizations(localizedNames: Partial<Record<Locale, str...
method clearNameLocalizations (line 64) | public clearNameLocalizations() {
FILE: packages/builders/src/interactions/commands/SharedNameAndDescription.ts
type SharedNameAndDescriptionData (line 5) | interface SharedNameAndDescriptionData
class SharedNameAndDescription (line 11) | class SharedNameAndDescription extends SharedName {
method setDescription (line 22) | public setDescription(description: string) {
method setDescriptionLocalization (line 33) | public setDescriptionLocalization(locale: Locale, localizedDescription...
method clearDescriptionLocalization (line 45) | public clearDescriptionLocalization(locale: Locale) {
method setDescriptionLocalizations (line 57) | public setDescriptionLocalizations(localizedDescriptions: Partial<Reco...
method clearDescriptionLocalizations (line 65) | public clearDescriptionLocalizations() {
FILE: packages/builders/src/interactions/commands/chatInput/ChatInputCommand.ts
class ChatInputCommandBuilder (line 18) | class ChatInputCommandBuilder extends Mixin(
method toJSON (line 27) | public toJSON(validationOverride?: boolean): RESTPostAPIChatInputAppli...
FILE: packages/builders/src/interactions/commands/chatInput/ChatInputCommandSubcommands.ts
type ChatInputCommandSubcommandGroupData (line 16) | interface ChatInputCommandSubcommandGroupData {
class ChatInputCommandSubcommandGroupBuilder (line 25) | class ChatInputCommandSubcommandGroupBuilder
method options (line 39) | public get options(): readonly ChatInputCommandSubcommandBuilder[] {
method addSubcommands (line 48) | public addSubcommands(
method toJSON (line 71) | public toJSON(validationOverride?: boolean): APIApplicationCommandSubc...
class ChatInputCommandSubcommandBuilder (line 93) | class ChatInputCommandSubcommandBuilder
method toJSON (line 104) | public toJSON(validationOverride?: boolean): APIApplicationCommandSubc...
FILE: packages/builders/src/interactions/commands/chatInput/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts
type ApplicationCommandNumericOptionMinMaxValueData (line 3) | interface ApplicationCommandNumericOptionMinMaxValueData extends Pick<
method setMaxValue (line 22) | public setMaxValue(max: number): this {
method clearMaxValue (line 30) | public clearMaxValue(): this {
method setMinValue (line 40) | public setMinValue(min: number): this {
method clearMinValue (line 48) | public clearMinValue(): this {
FILE: packages/builders/src/interactions/commands/chatInput/mixins/ApplicationCommandOptionChannelTypesMixin.ts
type ApplicationCommandOptionChannelTypesData (line 21) | interface ApplicationCommandOptionChannelTypesData extends Pick<
class ApplicationCommandOptionChannelTypesMixin (line 29) | class ApplicationCommandOptionChannelTypesMixin {
method addChannelTypes (line 40) | public addChannelTypes(...channelTypes: RestOrArray<ApplicationCommand...
method setChannelTypes (line 52) | public setChannelTypes(...channelTypes: RestOrArray<ApplicationCommand...
FILE: packages/builders/src/interactions/commands/chatInput/mixins/ApplicationCommandOptionWithAutocompleteMixin.ts
type AutocompletableOptions (line 7) | type AutocompletableOptions =
type ApplicationCommandOptionWithAutocompleteData (line 12) | interface ApplicationCommandOptionWithAutocompleteData extends Pick<Auto...
class ApplicationCommandOptionWithAutocompleteMixin (line 17) | class ApplicationCommandOptionWithAutocompleteMixin {
method setAutocomplete (line 28) | public setAutocomplete(autocomplete = true): this {
FILE: packages/builders/src/interactions/commands/chatInput/mixins/ApplicationCommandOptionWithChoicesMixin.ts
type ApplicationCommandOptionWithChoicesData (line 5) | interface ApplicationCommandOptionWithChoicesData {
class ApplicationCommandOptionWithChoicesMixin (line 14) | class ApplicationCommandOptionWithChoicesMixin<ChoiceType extends number...
method addChoices (line 25) | public addChoices(...choices: RestOrArray<APIApplicationCommandOptionC...
method setChoices (line 39) | public setChoices(...choices: RestOrArray<APIApplicationCommandOptionC...
FILE: packages/builders/src/interactions/commands/chatInput/mixins/SharedChatInputCommandOptions.ts
type SharedChatInputCommandOptionsData (line 14) | interface SharedChatInputCommandOptionsData {
class SharedChatInputCommandOptions (line 21) | class SharedChatInputCommandOptions {
method options (line 30) | public get options(): readonly ApplicationCommandOptionBase[] {
method addBooleanOptions (line 39) | public addBooleanOptions(
method addUserOptions (line 52) | public addUserOptions(
method addChannelOptions (line 65) | public addChannelOptions(
method addRoleOptions (line 78) | public addRoleOptions(
method addAttachmentOptions (line 91) | public addAttachmentOptions(
method addMentionableOptions (line 105) | public addMentionableOptions(
method addStringOptions (line 119) | public addStringOptions(
method addIntegerOptions (line 132) | public addIntegerOptions(
method addNumberOptions (line 145) | public addNumberOptions(
method spliceOptions (line 181) | public spliceOptions(index: number, deleteCount: number, ...options: A...
method sharedAddOptions (line 192) | private sharedAddOptions<OptionBuilder extends ApplicationCommandOptio...
FILE: packages/builders/src/interactions/commands/chatInput/mixins/SharedSubcommands.ts
type SharedChatInputCommandSubcommandsData (line 9) | interface SharedChatInputCommandSubcommandsData {
class SharedChatInputCommandSubcommands (line 16) | class SharedChatInputCommandSubcommands {
method addSubcommandGroups (line 27) | public addSubcommandGroups(
method addSubcommands (line 47) | public addSubcommands(
FILE: packages/builders/src/interactions/commands/chatInput/options/ApplicationCommandOptionBase.ts
type ApplicationCommandOptionBaseData (line 12) | interface ApplicationCommandOptionBaseData extends Partial<Pick<APIAppli...
method constructor (line 38) | public constructor(type: ApplicationCommandOptionType) {
method setRequired (line 48) | public setRequired(required = true) {
method toJSON (line 60) | public toJSON(validationOverride?: boolean): APIApplicationCommandBasicO...
FILE: packages/builders/src/interactions/commands/chatInput/options/attachment.ts
class ChatInputCommandAttachmentOption (line 8) | class ChatInputCommandAttachmentOption extends ApplicationCommandOptionB...
method constructor (line 17) | public constructor() {
FILE: packages/builders/src/interactions/commands/chatInput/options/boolean.ts
class ChatInputCommandBooleanOption (line 8) | class ChatInputCommandBooleanOption extends ApplicationCommandOptionBase {
method constructor (line 17) | public constructor() {
FILE: packages/builders/src/interactions/commands/chatInput/options/channel.ts
class ChatInputCommandChannelOption (line 13) | class ChatInputCommandChannelOption extends Mixin(
method constructor (line 25) | public constructor() {
FILE: packages/builders/src/interactions/commands/chatInput/options/integer.ts
class ChatInputCommandIntegerOption (line 17) | class ChatInputCommandIntegerOption extends Mixin(
method constructor (line 31) | public constructor() {
FILE: packages/builders/src/interactions/commands/chatInput/options/mentionable.ts
class ChatInputCommandMentionableOption (line 8) | class ChatInputCommandMentionableOption extends ApplicationCommandOption...
method constructor (line 17) | public constructor() {
FILE: packages/builders/src/interactions/commands/chatInput/options/number.ts
class ChatInputCommandNumberOption (line 17) | class ChatInputCommandNumberOption extends Mixin(
method constructor (line 31) | public constructor() {
FILE: packages/builders/src/interactions/commands/chatInput/options/role.ts
class ChatInputCommandRoleOption (line 8) | class ChatInputCommandRoleOption extends ApplicationCommandOptionBase {
method constructor (line 17) | public constructor() {
FILE: packages/builders/src/interactions/commands/chatInput/options/string.ts
class ChatInputCommandStringOption (line 18) | class ChatInputCommandStringOption extends Mixin(
method constructor (line 39) | public constructor() {
method setMaxLength (line 48) | public setMaxLength(max: number): this {
method clearMaxLength (line 56) | public clearMaxLength(): this {
method setMinLength (line 66) | public setMinLength(min: number): this {
method clearMinLength (line 74) | public clearMinLength(): this {
FILE: packages/builders/src/interactions/commands/chatInput/options/user.ts
class ChatInputCommandUserOption (line 8) | class ChatInputCommandUserOption extends ApplicationCommandOptionBase {
method constructor (line 17) | public constructor() {
FILE: packages/builders/src/interactions/commands/contextMenu/ContextMenuCommand.ts
type ContextMenuCommandType (line 9) | type ContextMenuCommandType = ApplicationCommandType.Message | Applicati...
method constructor (line 33) | public constructor(data: Partial<RESTPostAPIContextMenuApplicationComman...
FILE: packages/builders/src/interactions/commands/contextMenu/MessageCommand.ts
class MessageContextCommandBuilder (line 9) | class MessageContextCommandBuilder extends ContextMenuCommandBuilder {
method toJSON (line 13) | public override toJSON(validationOverride?: boolean): RESTPostAPIConte...
FILE: packages/builders/src/interactions/commands/contextMenu/UserCommand.ts
class UserContextCommandBuilder (line 9) | class UserContextCommandBuilder extends ContextMenuCommandBuilder {
method toJSON (line 13) | public override toJSON(validationOverride?: boolean): RESTPostAPIConte...
FILE: packages/builders/src/interactions/modals/Modal.ts
type ModalBuilderData (line 17) | interface ModalBuilderData extends Partial<Omit<APIModalInteractionRespo...
class ModalBuilder (line 24) | class ModalBuilder implements JSONEncodable<APIModalInteractionResponseC...
method components (line 33) | public get components(): readonly (ActionRowBuilder | AnyModalComponen...
method constructor (line 42) | public constructor(data: Partial<APIModalInteractionResponseCallbackDa...
method setTitle (line 56) | public setTitle(title: string) {
method setCustomId (line 66) | public setCustomId(customId: string) {
method addLabelComponents (line 76) | public addLabelComponents(
method addTextDisplayComponents (line 92) | public addTextDisplayComponents(
method spliceComponents (line 134) | public spliceComponents(index: number, deleteCount: number, ...compone...
method toJSON (line 146) | public toJSON(validationOverride?: boolean): APIModalInteractionRespon...
FILE: packages/builders/src/messages/AllowedMentions.ts
class AllowedMentionsBuilder (line 10) | class AllowedMentionsBuilder implements JSONEncodable<APIAllowedMentions> {
method constructor (line 21) | public constructor(data: Partial<APIAllowedMentions> = {}) {
method setParse (line 30) | public setParse(...parse: RestOrArray<AllowedMentionsTypes>): this {
method clearParse (line 38) | public clearParse(): this {
method setRoles (line 48) | public setRoles(...roles: RestOrArray<Snowflake>): this {
method addRoles (line 58) | public addRoles(...roles: RestOrArray<Snowflake>): this {
method spliceRoles (line 93) | public spliceRoles(index: number, deleteCount: number, ...roles: RestO...
method clearRoles (line 102) | public clearRoles(): this {
method setUsers (line 112) | public setUsers(...users: RestOrArray<Snowflake>): this {
method addUsers (line 122) | public addUsers(...users: RestOrArray<Snowflake>): this {
method spliceUsers (line 156) | public spliceUsers(index: number, deleteCount: number, ...users: RestO...
method clearUsers (line 165) | public clearUsers(): this {
method setRepliedUser (line 175) | public setRepliedUser(repliedUser = true): this {
method toJSON (line 187) | public toJSON(validationOverride?: boolean): APIAllowedMentions {
FILE: packages/builders/src/messages/Attachment.ts
class AttachmentBuilder (line 10) | class AttachmentBuilder implements JSONEncodable<RESTAPIAttachment> {
method constructor (line 37) | public constructor(data: Partial<RESTAPIAttachment> = {}) {
method setId (line 47) | public setId(id: Snowflake | number): this {
method setDescription (line 57) | public setDescription(description: string): this {
method clearDescription (line 65) | public clearDescription(): this {
method setDuration (line 75) | public setDuration(duration: number): this {
method clearDuration (line 83) | public clearDuration(): this {
method setFilename (line 93) | public setFilename(filename: string): this {
method clearFilename (line 101) | public clearFilename(): this {
method setFileData (line 112) | public setFileData(data: Buffer | Uint8Array | string): this {
method clearFileData (line 120) | public clearFileData(): this {
method setFileContentType (line 130) | public setFileContentType(contentType: string): this {
method clearFileContentType (line 138) | public clearFileContentType(): this {
method getRawFile (line 148) | public getRawFile(): Partial<RawFile> | undefined {
method setTitle (line 165) | public setTitle(title: string): this {
method clearTitle (line 173) | public clearTitle(): this {
method setWaveform (line 183) | public setWaveform(waveform: string): this {
method clearWaveform (line 191) | public clearWaveform(): this {
method toJSON (line 203) | public toJSON(validationOverride?: boolean): RESTAPIAttachment {
FILE: packages/builders/src/messages/Message.ts
type MessageBuilderData (line 41) | interface MessageBuilderData extends Partial<
class MessageBuilder (line 58) | class MessageBuilder
method attachments (line 69) | public get attachments(): readonly AttachmentBuilder[] {
method components (line 76) | public get components(): readonly MessageTopLevelComponentBuilder[] {
method embeds (line 83) | public get embeds(): readonly EmbedBuilder[] {
method constructor (line 92) | public constructor(data: Partial<RESTPostAPIChannelMessageJSONBody> = ...
method setContent (line 111) | public setContent(content: string): this {
method clearContent (line 119) | public clearContent(): this {
method setNonce (line 129) | public setNonce(nonce: number | string): this {
method clearNonce (line 137) | public clearNonce(): this {
method setTTS (line 147) | public setTTS(tts = true): this {
method addEmbeds (line 175) | public addEmbeds(...embeds: RestOrArray<APIEmbed | EmbedBuilder | ((bu...
method spliceEmbeds (line 212) | public spliceEmbeds(
method setEmbeds (line 229) | public setEmbeds(...embeds: RestOrArray<APIEmbed | EmbedBuilder | ((bu...
method setAllowedMentions (line 238) | public setAllowedMentions(
method updateAllowedMentions (line 253) | public updateAllowedMentions(updater: (builder: AllowedMentionsBuilder...
method clearAllowedMentions (line 261) | public clearAllowedMentions(): this {
method setMessageReference (line 271) | public setMessageReference(
method updateMessageReference (line 286) | public updateMessageReference(updater: (builder: MessageReferenceBuild...
method clearMessageReference (line 294) | public clearMessageReference(): this {
method addActionRowComponents (line 304) | public addActionRowComponents(
method addContainerComponents (line 324) | public addContainerComponents(
method addFileComponents (line 342) | public addFileComponents(
method addMediaGalleryComponents (line 358) | public addMediaGalleryComponents(
method addSectionComponents (line 376) | public addSectionComponents(
method addSeparatorComponents (line 392) | public addSeparatorComponents(
method addTextDisplayComponents (line 410) | public addTextDisplayComponents(
method spliceComponents (line 451) | public spliceComponents(
method setStickerIds (line 470) | public setStickerIds(...stickerIds: RestOrArray<Snowflake>): this {
method addStickerIds (line 479) | public addStickerIds(...stickerIds: RestOrArray<Snowflake>): this {
method spliceStickerIds (line 513) | public spliceStickerIds(index: number, deleteCount: number, ...sticker...
method setAttachments (line 524) | public setAttachments(
method addAttachments (line 535) | public addAttachments(
method spliceAttachments (line 572) | public spliceAttachments(
method setFlags (line 588) | public setFlags(flags: MessageFlags): this {
method clearFlags (line 596) | public clearFlags(): this {
method setEnforceNonce (line 606) | public setEnforceNonce(enforceNonce = true): this {
method setPoll (line 616) | public setPoll(poll: APIPoll | PollBuilder | ((builder: PollBuilder) =...
method updatePoll (line 626) | public updatePoll(updater: (builder: PollBuilder) => void): this {
method clearPoll (line 634) | public clearPoll(): this {
method toJSON (line 646) | public toJSON(validationOverride?: boolean): RESTPostAPIChannelMessage...
method toFileBody (line 674) | public toFileBody(validationOverride?: boolean): FileBodyEncodableResu...
FILE: packages/builders/src/messages/MessageReference.ts
class MessageReferenceBuilder (line 9) | class MessageReferenceBuilder implements JSONEncodable<RESTAPIMessageRef...
method constructor (line 20) | public constructor(data: Partial<RESTAPIMessageReference> = {}) {
method setType (line 29) | public setType(type: MessageReferenceType): this {
method clearType (line 37) | public clearType(): this {
method setMessageId (line 47) | public setMessageId(messageId: Snowflake): this {
method setChannelId (line 57) | public setChannelId(channelId: Snowflake): this {
method clearChannelId (line 65) | public clearChannelId(): this {
method setGuildId (line 75) | public setGuildId(guildId: Snowflake): this {
method clearGuildId (line 83) | public clearGuildId(): this {
method setFailIfNotExists (line 93) | public setFailIfNotExists(failIfNotExists = true): this {
method toJSON (line 105) | public toJSON(validationOverride?: boolean): RESTAPIMessageReference {
FILE: packages/builders/src/messages/embed/Embed.ts
type EmbedBuilderData (line 15) | interface EmbedBuilderData extends Omit<APIEmbed, 'author' | 'fields' | ...
class EmbedBuilder (line 24) | class EmbedBuilder implements JSONEncodable<APIEmbed> {
method fields (line 33) | public get fields(): readonly EmbedFieldBuilder[] {
method constructor (line 42) | public constructor(data: Partial<APIEmbed> = {}) {
method addFields (line 77) | public addFields(
method spliceFields (line 116) | public spliceFields(
method setFields (line 137) | public setFields(
method setAuthor (line 149) | public setAuthor(
method updateAuthor (line 161) | public updateAuthor(updater: (builder: EmbedAuthorBuilder) => void) {
method clearAuthor (line 169) | public clearAuthor(): this {
method setColor (line 179) | public setColor(color: number): this {
method clearColor (line 187) | public clearColor(): this {
method setDescription (line 197) | public setDescription(description: string): this {
method clearDescription (line 205) | public clearDescription(): this {
method setFooter (line 215) | public setFooter(
method updateFooter (line 227) | public updateFooter(updater: (builder: EmbedFooterBuilder) => void) {
method clearFooter (line 235) | public clearFooter(): this {
method setImage (line 245) | public setImage(url: string): this {
method clearImage (line 253) | public clearImage(): this {
method setThumbnail (line 263) | public setThumbnail(url: string): this {
method clearThumbnail (line 271) | public clearThumbnail(): this {
method setTimestamp (line 281) | public setTimestamp(timestamp: Date | number | string = Date.now()): t...
method clearTimestamp (line 289) | public clearTimestamp(): this {
method setTitle (line 299) | public setTitle(title: string): this {
method clearTitle (line 307) | public clearTitle(): this {
method setURL (line 317) | public setURL(url: string): this {
method clearURL (line 325) | public clearURL(): this {
method toJSON (line 337) | public toJSON(validationOverride?: boolean): APIEmbed {
FILE: packages/builders/src/messages/embed/EmbedAuthor.ts
class EmbedAuthorBuilder (line 9) | class EmbedAuthorBuilder implements JSONEncodable<APIEmbedAuthor> {
method constructor (line 20) | public constructor(data: Partial<APIEmbedAuthor> = {}) {
method setName (line 29) | public setName(name: string): this {
method setURL (line 39) | public setURL(url: string): this {
method clearURL (line 47) | public clearURL(): this {
method setIconURL (line 57) | public setIconURL(iconURL: string): this {
method clearIconURL (line 65) | public clearIconURL(): this {
method toJSON (line 77) | public toJSON(validationOverride?: boolean): APIEmbedAuthor {
FILE: packages/builders/src/messages/embed/EmbedField.ts
class EmbedFieldBuilder (line 9) | class EmbedFieldBuilder implements JSONEncodable<APIEmbedField> {
method constructor (line 20) | public constructor(data: Partial<APIEmbedField> = {}) {
method setName (line 29) | public setName(name: string): this {
method setValue (line 39) | public setValue(value: string): this {
method setInline (line 49) | public setInline(inline = true): this {
method toJSON (line 61) | public toJSON(validationOverride?: boolean): APIEmbedField {
FILE: packages/builders/src/messages/embed/EmbedFooter.ts
class EmbedFooterBuilder (line 9) | class EmbedFooterBuilder implements JSONEncodable<APIEmbedFooter> {
method constructor (line 20) | public constructor(data: Partial<APIEmbedFooter> = {}) {
method setText (line 29) | public setText(text: string): this {
method setIconURL (line 39) | public setIconURL(url: string): this {
method clearIconURL (line 47) | public clearIconURL(): this {
method toJSON (line 59) | public toJSON(validationOverride?: boolean): APIEmbedFooter {
FILE: packages/builders/src/messages/poll/Poll.ts
type PollData (line 10) | interface PollData extends Omit<RESTAPIPoll, 'answers' | 'question'> {
class PollBuilder (line 18) | class PollBuilder implements JSONEncodable<RESTAPIPoll> {
method answers (line 27) | public get answers(): readonly PollAnswerBuilder[] {
method constructor (line 36) | public constructor(data: Partial<RESTAPIPoll> = {}) {
method addAnswers (line 70) | public addAnswers(
method spliceAnswers (line 111) | public spliceAnswers(
method setAnswers (line 137) | public setAnswers(
method setQuestion (line 150) | public setQuestion(
method updateQuestion (line 165) | public updateQuestion(updater: (builder: PollQuestionBuilder) => void)...
method setLayoutType (line 178) | public setLayoutType(type: PollLayoutType): this {
method clearLayoutType (line 186) | public clearLayoutType(): this {
method setMultiSelect (line 196) | public setMultiSelect(multiSelect = true): this {
method setDuration (line 209) | public setDuration(duration: number): this {
method clearDuration (line 217) | public clearDuration(): this {
method toJSON (line 229) | public toJSON(validationOverride?: boolean): RESTAPIPoll {
FILE: packages/builders/src/messages/poll/PollAnswer.ts
type PollAnswerData (line 8) | interface PollAnswerData extends Omit<APIPollAnswer, 'answer_id' | 'poll...
class PollAnswerBuilder (line 15) | class PollAnswerBuilder implements JSONEncodable<Omit<APIPollAnswer, 'an...
method constructor (line 26) | public constructor(data: Partial<Omit<APIPollAnswer, 'answer_id'>> = {...
method setMedia (line 40) | public setMedia(
method updateMedia (line 52) | public updateMedia(updater: (builder: PollAnswerMediaBuilder) => void)...
method toJSON (line 64) | public toJSON(validationOverride?: boolean): Omit<APIPollAnswer, 'answ...
FILE: packages/builders/src/messages/poll/PollAnswerMedia.ts
class PollAnswerMediaBuilder (line 9) | class PollAnswerMediaBuilder extends PollMediaBuilder {
method setEmoji (line 15) | public setEmoji(emoji: APIPartialEmoji): this {
method clearEmoji (line 23) | public clearEmoji(): this {
method toJSON (line 31) | public override toJSON(validationOverride?: boolean): APIPollMedia {
FILE: packages/builders/src/messages/poll/PollMedia.ts
method constructor (line 19) | public constructor(data: Partial<APIPollMedia> = {}) {
method setText (line 28) | public setText(text: string): this {
FILE: packages/builders/src/messages/poll/PollQuestion.ts
class PollQuestionBuilder (line 9) | class PollQuestionBuilder extends PollMediaBuilder {
method toJSON (line 13) | public override toJSON(validationOverride?: boolean): Omit<APIPollMedi...
FILE: packages/builders/src/util/ValidationError.ts
class ValidationError (line 6) | class ValidationError extends Error {
method constructor (line 15) | public constructor(error: z.ZodError) {
FILE: packages/builders/src/util/normalizeArray.ts
function normalizeArray (line 7) | function normalizeArray<ItemType>(arr: RestOrArray<ItemType>): ItemType[] {
type RestOrArray (line 19) | type RestOrArray<Type> = Type[] | [Type[]];
FILE: packages/builders/src/util/resolveBuilder.ts
function isBuilder (line 9) | function isBuilder<Builder extends JSONEncodable<any>>(
function resolveBuilder (line 27) | function resolveBuilder<Builder extends JSONEncodable<any>, BuilderData ...
FILE: packages/builders/src/util/validation.ts
function enableValidators (line 11) | function enableValidators() {
function disableValidators (line 20) | function disableValidators() {
function isValidationEnabled (line 27) | function isValidationEnabled() {
function validate (line 42) | function validate<Validator extends z.ZodType>(
FILE: packages/collection/__tests__/collection.test.ts
type TestCollection (line 6) | type TestCollection<Value> = Collection<string, Value>;
function createCollection (line 8) | function createCollection<Value = number>(): TestCollection<Value> {
function createCollectionFrom (line 12) | function createCollectionFrom<Value = number>(...entries: [key: string, ...
function createTestCollection (line 16) | function createTestCollection(): TestCollection<number> {
function expectInvalidFunctionError (line 20) | function expectInvalidFunctionError(cb: () => unknown, val?: unknown): v...
class DerivedCollection (line 1144) | class DerivedCollection<Key, Value> extends Collection<Key, Value> {}
FILE: packages/collection/src/collection.ts
type ReadonlyCollection (line 6) | type ReadonlyCollection<Key, Value> = Omit<
type Collection (line 12) | interface Collection<Key, Value> {
method ensure (line 40) | public ensure(key: Key, defaultValueGenerator: (key: Key, collection: ...
method hasAll (line 54) | public hasAll(...keys: Key[]) {
method hasAny (line 64) | public hasAny(...keys: Key[]) {
method first (line 76) | public first(amount?: number): Value | Value[] | undefined {
method firstKey (line 100) | public firstKey(amount?: number): Key | Key[] | undefined {
method last (line 124) | public last(amount?: number): Value | Value[] | undefined {
method lastKey (line 142) | public lastKey(amount?: number): Key | Key[] | undefined {
method at (line 158) | public at(index: number): Value | undefined {
method keyAt (line 182) | public keyAt(index: number): Key | undefined {
method random (line 207) | public random(amount?: number): Value | Value[] | undefined {
method randomKey (line 229) | public randomKey(amount?: number): Key | Key[] | undefined {
method reverse (line 247) | public reverse() {
method find (line 280) | public find(fn: (value: Value, key: Key, collection: this) => unknown,...
method findKey (line 314) | public findKey(fn: (value: Value, key: Key, collection: this) => unkno...
method findLast (line 343) | public findLast(fn: (value: Value, key: Key, collection: this) => unkn...
method findLastKey (line 375) | public findLastKey(fn: (value: Value, key: Key, collection: this) => u...
method sweep (line 396) | public sweep(fn: (value: Value, key: Key, collection: this) => unknown...
method filter (line 438) | public filter(fn: (value: Value, key: Key, collection: this) => unknow...
method partition (line 481) | public partition(
method flatMap (line 520) | public flatMap<NewValue>(
method map (line 545) | public map<NewValue>(fn: (value: Value, key: Key, collection: this) =>...
method mapValues (line 575) | public mapValues<NewValue>(
method some (line 599) | public some(fn: (value: Value, key: Key, collection: this) => unknown,...
method every (line 636) | public every(fn: (value: Value, key: Key, collection: this) => unknown...
method reduce (line 666) | public reduce<InitialValue>(
method reduceRight (line 703) | public reduceRight<InitialValue>(
method each (line 746) | public each(fn: (value: Value, key: Key, collection: this) => void, th...
method tap (line 772) | public tap(fn: (collection: this) => void, thisArg?: unknown): this {
method clone (line 787) | public clone(): Collection<Key, Value> {
method concat (line 800) | public concat(...collections: ReadonlyCollection<Key, Value>[]) {
method equals (line 817) | public equals(collection: ReadonlyCollection<Key, Value>) {
method sort (line 846) | public sort(compareFunction: Comparator<Key, Value> = Collection.defau...
method intersection (line 874) | public intersection(other: ReadonlyCollection<Key, any>): Collection<K...
method union (line 900) | public union<OtherValue>(other: ReadonlyCollection<Key, OtherValue>): ...
method difference (line 924) | public difference(other: ReadonlyCollection<Key, any>): Collection<Key...
method symmetricDifference (line 947) | public symmetricDifference<OtherValue>(
method merge (line 991) | public merge<OtherValue, ResultValue>(
method toReversed (line 1025) | public toReversed() {
method toSorted (line 1041) | public toSorted(compareFunction: Comparator<Key, Value> = Collection.d...
method toJSON (line 1045) | public toJSON() {
method defaultSort (line 1055) | private static defaultSort<Value>(firstValue: Value, secondValue: Valu...
method combineEntries (line 1077) | public static combineEntries<Key, Value>(
method groupBy (line 1097) | public static override groupBy<Key, Item>(
class Collection (line 29) | class Collection<Key, Value> extends Map<Key, Value> {
method ensure (line 40) | public ensure(key: Key, defaultValueGenerator: (key: Key, collection: ...
method hasAll (line 54) | public hasAll(...keys: Key[]) {
method hasAny (line 64) | public hasAny(...keys: Key[]) {
method first (line 76) | public first(amount?: number): Value | Value[] | undefined {
method firstKey (line 100) | public firstKey(amount?: number): Key | Key[] | undefined {
method last (line 124) | public last(amount?: number): Value | Value[] | undefined {
method lastKey (line 142) | public lastKey(amount?: number): Key | Key[] | undefined {
method at (line 158) | public at(index: number): Value | undefined {
method keyAt (line 182) | public keyAt(index: number): Key | undefined {
method random (line 207) | public random(amount?: number): Value | Value[] | undefined {
method randomKey (line 229) | public randomKey(amount?: number): Key | Key[] | undefined {
method reverse (line 247) | public reverse() {
method find (line 280) | public find(fn: (value: Value, key: Key, collection: this) => unknown,...
method findKey (line 314) | public findKey(fn: (value: Value, key: Key, collection: this) => unkno...
method findLast (line 343) | public findLast(fn: (value: Value, key: Key, collection: this) => unkn...
method findLastKey (line 375) | public findLastKey(fn: (value: Value, key: Key, collection: this) => u...
method sweep (line 396) | public sweep(fn: (value: Value, key: Key, collection: this) => unknown...
method filter (line 438) | public filter(fn: (value: Value, key: Key, collection: this) => unknow...
method partition (line 481) | public partition(
method flatMap (line 520) | public flatMap<NewValue>(
method map (line 545) | public map<NewValue>(fn: (value: Value, key: Key, collection: this) =>...
method mapValues (line 575) | public mapValues<NewValue>(
method some (line 599) | public some(fn: (value: Value, key: Key, collection: this) => unknown,...
method every (line 636) | public every(fn: (value: Value, key: Key, collection: this) => unknown...
method reduce (line 666) | public reduce<InitialValue>(
method reduceRight (line 703) | public reduceRight<InitialValue>(
method each (line 746) | public each(fn: (value: Value, key: Key, collection: this) => void, th...
method tap (line 772) | public tap(fn: (collection: this) => void, thisArg?: unknown): this {
method clone (line 787) | public clone(): Collection<Key, Value> {
method concat (line 800) | public concat(...collections: ReadonlyCollection<Key, Value>[]) {
method equals (line 817) | public equals(collection: ReadonlyCollection<Key, Value>) {
method sort (line 846) | public sort(compareFunction: Comparator<Key, Value> = Collection.defau...
method intersection (line 874) | public intersection(other: ReadonlyCollection<Key, any>): Collection<K...
method union (line 900) | public union<OtherValue>(other: ReadonlyCollection<Key, OtherValue>): ...
method difference (line 924) | public difference(other: ReadonlyCollection<Key, any>): Collection<Key...
method symmetricDifference (line 947) | public symmetricDifference<OtherValue>(
method merge (line 991) | public merge<OtherValue, ResultValue>(
method toReversed (line 1025) | public toReversed() {
method toSorted (line 1041) | public toSorted(compareFunction: Comparator<Key, Value> = Collection.d...
method toJSON (line 1045) | public toJSON() {
method defaultSort (line 1055) | private static defaultSort<Value>(firstValue: Value, secondValue: Valu...
method combineEntries (line 1077) | public static combineEntries<Key, Value>(
method groupBy (line 1097) | public static override groupBy<Key, Item>(
type Keep (line 1110) | type Keep<Value> = { keep: false } | { keep: true; value: Value };
type Comparator (line 1112) | type Comparator<Key, Value> = (firstValue: Value, secondValue: Value, fi...
FILE: packages/core/__tests__/types.test-d.ts
constant SNOWFLAKE (line 13) | const SNOWFLAKE = '123456789012345678' as const;
constant TOKEN (line 14) | const TOKEN = 'token' as const;
constant MODAL_COMPONENTS (line 15) | const MODAL_COMPONENTS: APIActionRowComponent<APIComponentInModalActionR...
FILE: packages/core/src/Gateway.ts
type Gateway (line 10) | interface Gateway {
FILE: packages/core/src/api/applicationCommands.ts
class ApplicationCommandsAPI (line 31) | class ApplicationCommandsAPI {
method constructor (line 32) | public constructor(private readonly rest: REST) {}
method getGlobalCommands (line 42) | public async getGlobalCommands(
method createGlobalCommand (line 62) | public async createGlobalCommand(
method getGlobalCommand (line 82) | public async getGlobalCommand(
method editGlobalCommand (line 102) | public async editGlobalCommand(
method deleteGlobalCommand (line 123) | public async deleteGlobalCommand(
method bulkOverwriteGlobalCommands (line 139) | public async bulkOverwriteGlobalCommands(
method getGuildCommands (line 160) | public async getGuildCommands(
method createGuildCommand (line 182) | public async createGuildCommand(
method getGuildCommand (line 204) | public async getGuildCommand(
method editGuildCommand (line 226) | public async editGuildCommand(
method deleteGuildCommand (line 249) | public async deleteGuildCommand(
method bulkOverwriteGuildCommands (line 267) | public async bulkOverwriteGuildCommands(
method getGuildCommandPermissions (line 289) | public async getGuildCommandPermissions(
method getGuildCommandsPermissions (line 309) | public async getGuildCommandsPermissions(
method editGuildCommandPermissions (line 331) | public async editGuildCommandPermissions(
FILE: packages/core/src/api/applications.ts
class ApplicationsAPI (line 18) | class ApplicationsAPI {
method constructor (line 19) | public constructor(private readonly rest: REST) {}
method getCurrent (line 27) | public async getCurrent({ auth, signal }: Pick<RequestData, 'auth' | '...
method editCurrent (line 38) | public async editCurrent(
method getEmojis (line 56) | public async getEmojis(applicationId: Snowflake, { auth, signal }: Pic...
method getEmoji (line 71) | public async getEmoji(
method createEmoji (line 90) | public async createEmoji(
method editEmoji (line 111) | public async editEmoji(
method deleteEmoji (line 132) | public async deleteEmoji(
FILE: packages/core/src/api/channel.ts
type StartForumThreadOptions (line 41) | interface StartForumThreadOptions extends RESTPostAPIGuildForumThreadsJS...
type CreateMessageOptions (line 45) | interface CreateMessageOptions extends RESTPostAPIChannelMessageJSONBody {
type EditMessageOptions (line 49) | interface EditMessageOptions extends RESTPatchAPIChannelMessageJSONBody {
class ChannelsAPI (line 53) | class ChannelsAPI {
method constructor (line 54) | public constructor(private readonly rest: REST) {}
method createMessage (line 64) | public async createMessage(
method editMessage (line 86) | public async editMessage(
method getMessageReactions (line 118) | public async getMessageReactions(
method deleteOwnMessageReaction (line 149) | public async deleteOwnMessageReaction(
method deleteUserMessageReaction (line 179) | public async deleteUserMessageReaction(
method deleteAllMessageReactions (line 200) | public async deleteAllMessageReactions(
method deleteAllMessageReactionsForEmoji (line 225) | public async deleteAllMessageReactionsForEmoji(
method addMessageReaction (line 254) | public async addMessageReaction(
method get (line 273) | public async get(channelId: Snowflake, { auth, signal }: Pick<RequestD...
method edit (line 285) | public async edit(
method delete (line 305) | public async delete(
method getMessages (line 320) | public async getMessages(
method showTyping (line 339) | public async showTyping(channelId: Snowflake, { auth, signal }: Pick<R...
method getPins (line 351) | public async getPins(
method pinMessage (line 371) | public async pinMessage(
method deleteMessage (line 387) | public async deleteMessage(
method bulkDeleteMessages (line 403) | public async bulkDeleteMessages(
method getMessage (line 419) | public async getMessage(
method crosspostMessage (line 438) | public async crosspostMessage(
method unpinMessage (line 457) | public async unpinMessage(
method followAnnouncements (line 473) | public async followAnnouncements(
method createInvite (line 494) | public async createInvite(
method getInvites (line 514) | public async getInvites(channelId: Snowflake, { auth, signal }: Pick<R...
method createThread (line 528) | public async createThread(
method createForumThread (line 550) | public async createForumThread(
method getArchivedThreads (line 581) | public async getArchivedThreads(
method getJoinedPrivateArchivedThreads (line 602) | public async getJoinedPrivateArchivedThreads(
method createWebhook (line 622) | public async createWebhook(
method getWebhooks (line 642) | public async getWebhooks(channelId: Snowflake, { auth, signal }: Pick<...
method editPermissionOverwrite (line 658) | public async editPermissionOverwrite(
method deletePermissionOverwrite (line 680) | public async deletePermissionOverwrite(
method sendSoundboardSound (line 700) | public async sendSoundboardSound(
method addGroupDMRecipient (line 721) | public async addGroupDMRecipient(
method removeGroupDMRecipient (line 742) | public async removeGroupDMRecipient(
FILE: packages/core/src/api/gateway.ts
class GatewayAPI (line 6) | class GatewayAPI {
method constructor (line 7) | public constructor(private readonly rest: REST) {}
method get (line 15) | public async get({ signal }: Pick<RequestData, 'signal'> = {}) {
method getBot (line 28) | public async getBot({ auth, signal }: Pick<RequestData, 'auth' | 'sign...
FILE: packages/core/src/api/guild.ts
type CreateStickerOptions (line 109) | interface CreateStickerOptions extends Omit<RESTPostAPIGuildStickerFormD...
class GuildsAPI (line 113) | class GuildsAPI {
method constructor (line 114) | public constructor(private readonly rest: REST) {}
method get (line 124) | public async get(
method getPreview (line 143) | public async getPreview(guildId: Snowflake, { auth, signal }: Pick<Req...
method edit (line 158) | public async edit(
method addMember (line 180) | public async addMember(
method getMembers (line 201) | public async getMembers(
method getChannels (line 220) | public async getChannels(guildId: Snowflake, { auth, signal }: Pick<Re...
method createChannel (line 235) | public async createChannel(
method setChannelPositions (line 256) | public async setChannelPositions(
method getActiveThreads (line 271) | public async getActiveThreads(guildId: Snowflake, { auth, signal }: Pi...
method getMemberBan (line 283) | public async getMemberBan(
method getMemberBans (line 299) | public async getMemberBans(
method banUser (line 320) | public async banUser(
method unbanUser (line 337) | public async unbanUser(
method bulkBanUsers (line 353) | public async bulkBanUsers(
method getRoles (line 373) | public async getRoles(guildId: Snowflake, { auth, signal }: Pick<Reque...
method getRole (line 385) | public async getRole(
method createRole (line 401) | public async createRole(
method setRolePositions (line 422) | public async setRolePositions(
method editRole (line 444) | public async editRole(
method deleteRole (line 466) | public async deleteRole(
method getPruneCount (line 482) | public async getPruneCount(
method beginPrune (line 502) | public async beginPrune(
method getVoiceRegions (line 522) | public async getVoiceRegions(guildId: Snowflake, { auth, signal }: Pic...
method getInvites (line 536) | public async getInvites(guildId: Snowflake, { auth, signal }: Pick<Req...
method getIntegrations (line 547) | public async getIntegrations(guildId: Snowflake, { auth, signal }: Pic...
method deleteIntegration (line 562) | public async deleteIntegration(
method getWidgetSettings (line 577) | public async getWidgetSettings(guildId: Snowflake, { auth, signal }: P...
method editWidgetSettings (line 592) | public async editWidgetSettings(
method getWidget (line 612) | public async getWidget(guildId: Snowflake, { auth, signal }: Pick<Requ...
method getVanityURL (line 623) | public async getVanityURL(guildId: Snowflake, { auth, signal }: Pick<R...
method getWidgetImage (line 635) | public async getWidgetImage(
method getWelcomeScreen (line 654) | public async getWelcomeScreen(guildId: Snowflake, { auth, signal }: Pi...
method editWelcomeScreen (line 669) | public async editWelcomeScreen(
method getEmojis (line 689) | public async getEmojis(guildId: Snowflake, { auth, signal }: Pick<Requ...
method getEmoji (line 701) | public async getEmoji(
method createEmoji (line 717) | public async createEmoji(
method editEmoji (line 739) | public async editEmoji(
method deleteEmoji (line 761) | public async deleteEmoji(
method getScheduledEvents (line 777) | public async getScheduledEvents(
method createScheduledEvent (line 797) | public async createScheduledEvent(
method getScheduledEvent (line 819) | public async getScheduledEvent(
method editScheduledEvent (line 841) | public async editScheduledEvent(
method deleteScheduledEvent (line 863) | public async deleteScheduledEvent(
method getScheduledEventUsers (line 880) | public async getScheduledEventUsers(
method getTemplates (line 900) | public async getTemplates(guildId: Snowflake, { auth, signal }: Pick<R...
method syncTemplate (line 912) | public async syncTemplate(
method editTemplate (line 932) | public async editTemplate(
method deleteTemplate (line 953) | public async deleteTemplate(
method getStickers (line 968) | public async getStickers(guildId: Snowflake, { auth, signal }: Pick<Re...
method getSticker (line 980) | public async getSticker(
method createSticker (line 999) | public async createSticker(
method editSticker (line 1025) | public async editSticker(
method deleteSticker (line 1047) | public async deleteSticker(
method getAuditLogs (line 1063) | public async getAuditLogs(
method getAutoModerationRules (line 1082) | public async getAutoModerationRules(guildId: Snowflake, { auth, signal...
method getAutoModerationRule (line 1097) | public async getAutoModerationRule(
method createAutoModerationRule (line 1116) | public async createAutoModerationRule(
method editAutoModerationRule (line 1138) | public async editAutoModerationRule(
method deleteAutoModerationRule (line 1160) | public async deleteAutoModerationRule(
method getMember (line 1176) | public async getMember(
method searchForMembers (line 1192) | public async searchForMembers(
method editMember (line 1213) | public async editMember(
method removeMember (line 1235) | public async removeMember(
method addRoleToMember (line 1252) | public async addRoleToMember(
method removeRoleFromMember (line 1270) | public async removeRoleFromMember(
method getTemplate (line 1286) | public async getTemplate(templateCode: string, { auth, signal }: Pick<...
method createTemplate (line 1298) | public async createTemplate(
method getWebhooks (line 1317) | public async getWebhooks(id: Snowflake, { auth, signal }: Pick<Request...
method getOnboarding (line 1328) | public async getOnboarding(guildId: Snowflake, { auth, signal }: Pick<...
method editOnboarding (line 1340) | public async editOnboarding(
method getSoundboardSounds (line 1360) | public async getSoundboardSounds(guildId: Snowflake, { auth, signal }:...
method getSoundboardSound (line 1375) | public async getSoundboardSound(
method createSoundboardSound (line 1394) | public async createSoundboardSound(
method editSoundboardSound (line 1416) | public async editSoundboardSound(
method deleteSoundboardSound (line 1438) | public async deleteSoundboardSound(
method editIncidentActions (line 1454) | public async editIncidentActions(
method getRoleMemberCounts (line 1473) | public async getRoleMemberCounts(guildId: Snowflake, { auth, signal }:...
FILE: packages/core/src/api/index.ts
class API (line 40) | class API {
method constructor (line 77) | public constructor(public readonly rest: REST) {
FILE: packages/core/src/api/interactions.ts
type CreateInteractionResponseOptions (line 18) | interface CreateInteractionResponseOptions
type CreateInteractionDeferResponseOptions (line 23) | type CreateInteractionDeferResponseOptions = APIInteractionResponseDefer...
type CreateInteractionFollowUpResponseOptions (line 26) | type CreateInteractionFollowUpResponseOptions = APIInteractionResponseCa...
type EditInteractionResponseOptions (line 27) | type EditInteractionResponseOptions = APIInteractionResponseCallbackData...
type CreateInteractionUpdateMessageResponseOptions (line 29) | type CreateInteractionUpdateMessageResponseOptions = APIInteractionRespo...
type CreateAutocompleteResponseOptions (line 32) | type CreateAutocompleteResponseOptions = APICommandAutocompleteInteracti...
type CreateModalResponseOptions (line 35) | type CreateModalResponseOptions = APIModalInteractionResponseCallbackDat...
class InteractionsAPI (line 37) | class InteractionsAPI {
method constructor (line 38) | public constructor(
method reply (line 91) | public async reply(
method defer (line 159) | public async defer(
method deferMessageUpdate (line 226) | public async deferMessageUpdate(
method followUp (line 253) | public async followUp(
method editReply (line 273) | public async editReply(
method getOriginalReply (line 293) | public async getOriginalReply(
method deleteReply (line 317) | public async deleteReply(
method updateMessage (line 374) | public async updateMessage(
method createAutocompleteResponse (line 442) | public async createAutocompleteResponse(
method createModal (line 509) | public async createModal(
method launchActivity (line 576) | public async launchActivity(
FILE: packages/core/src/api/invite.ts
class InvitesAPI (line 6) | class InvitesAPI {
method constructor (line 7) | public constructor(private readonly rest: REST) {}
method get (line 17) | public async get(
method delete (line 36) | public async delete(code: string, { auth, reason, signal }: Pick<Reque...
FILE: packages/core/src/api/monetization.ts
class MonetizationAPI (line 18) | class MonetizationAPI {
method constructor (line 19) | public constructor(private readonly rest: REST) {}
method getSKUs (line 28) | public async getSKUs(applicationId: Snowflake, { auth, signal }: Pick<...
method getSKUSubscriptions (line 40) | public async getSKUSubscriptions(
method getSKUSubscription (line 60) | public async getSKUSubscription(
method getEntitlements (line 79) | public async getEntitlements(
method getEntitlement (line 99) | public async getEntitlement(
method createTestEntitlement (line 118) | public async createTestEntitlement(
method deleteTestEntitlement (line 138) | public async deleteTestEntitlement(
method consumeEntitlement (line 154) | public async consumeEntitlement(
FILE: packages/core/src/api/oauth2.ts
class OAuth2API (line 20) | class OAuth2API {
method constructor (line 21) | public constructor(private readonly rest: REST) {}
method generateAuthorizationURL (line 29) | public generateAuthorizationURL(options: RESTOAuth2AuthorizationQuery) {
method tokenExchange (line 42) | public async tokenExchange(
method refreshToken (line 64) | public async refreshToken(
method getToken (line 88) | public async getToken(
method getCurrentBotApplicationInformation (line 109) | public async getCurrentBotApplicationInformation({ auth, signal }: Pic...
method getCurrentAuthorizationInformation (line 122) | public async getCurrentAuthorizationInformation({ auth, signal }: Pick...
method revokeToken (line 138) | public async revokeToken(
FILE: packages/core/src/api/poll.ts
class PollAPI (line 12) | class PollAPI {
method constructor (line 13) | public constructor(private readonly rest: REST) {}
method getAnswerVoters (line 25) | public async getAnswerVoters(
method expirePoll (line 47) | public async expirePoll(
FILE: packages/core/src/api/roleConnections.ts
class RoleConnectionsAPI (line 12) | class RoleConnectionsAPI {
method constructor (line 13) | public constructor(private readonly rest: REST) {}
method getMetadataRecords (line 22) | public async getMetadataRecords(
method updateMetadataRecords (line 40) | public async updateMetadataRecords(
FILE: packages/core/src/api/soundboardSounds.ts
class SoundboardSoundsAPI (line 6) | class SoundboardSoundsAPI {
method constructor (line 7) | public constructor(private readonly rest: REST) {}
method getSoundboardDefaultSounds (line 15) | public async getSoundboardDefaultSounds({ auth, signal }: Pick<Request...
FILE: packages/core/src/api/stageInstances.ts
class StageInstancesAPI (line 14) | class StageInstancesAPI {
method constructor (line 15) | public constructor(private readonly rest: REST) {}
method create (line 24) | public async create(
method get (line 43) | public async get(channelId: Snowflake, { auth, signal }: Pick<RequestD...
method edit (line 55) | public async edit(
method delete (line 75) | public async delete(
FILE: packages/core/src/api/sticker.ts
class StickersAPI (line 12) | class StickersAPI {
method constructor (line 13) | public constructor(private readonly rest: REST) {}
method getStickerPack (line 22) | public async getStickerPack(packId: Snowflake, { auth, signal }: Pick<...
method getStickers (line 32) | public async getStickers({ auth, signal }: Pick<RequestData, 'auth' | ...
method get (line 43) | public async get(stickerId: Snowflake, { auth, signal }: Pick<RequestD...
FILE: packages/core/src/api/thread.ts
class ThreadsAPI (line 12) | class ThreadsAPI {
method constructor (line 13) | public constructor(private readonly rest: REST) {}
method join (line 22) | public async join(threadId: Snowflake, { auth, signal }: Pick<RequestD...
method addMember (line 34) | public async addMember(
method leave (line 49) | public async leave(threadId: Snowflake, { auth, signal }: Pick<Request...
method removeMember (line 61) | public async removeMember(
method getMember (line 101) | public async getMember(
method getAllMembers (line 121) | public async getAllMembers(threadId: Snowflake, { auth, signal }: Pick...
FILE: packages/core/src/api/user.ts
class UsersAPI (line 23) | class UsersAPI {
method constructor (line 24) | public constructor(private readonly rest: REST) {}
method get (line 33) | public async get(userId: Snowflake, { auth, signal }: Pick<RequestData...
method getCurrent (line 43) | public async getCurrent({ auth, signal }: Pick<RequestData, 'auth' | '...
method getGuilds (line 54) | public async getGuilds(
method leaveGuild (line 72) | public async leaveGuild(guildId: Snowflake, { auth, signal }: Pick<Req...
method edit (line 83) | public async edit(
method getGuildMember (line 97) | public async getGuildMember(guildId: Snowflake, { auth, signal }: Pick...
method editCurrentGuildMember (line 112) | public async editCurrentGuildMember(
method createDM (line 132) | public async createDM(userId: Snowflake, { auth, signal }: Pick<Reques...
method getConnections (line 146) | public async getConnections({ auth, signal }: Pick<RequestData, 'auth'...
method getApplicationRoleConnection (line 157) | public async getApplicationRoleConnection(
method updateApplicationRoleConnection (line 175) | public async updateApplicationRoleConnection(
FILE: packages/core/src/api/voice.ts
class VoiceAPI (line 16) | class VoiceAPI {
method constructor (line 17) | public constructor(private readonly rest: REST) {}
method getVoiceRegions (line 25) | public async getVoiceRegions({ auth, signal }: Pick<RequestData, 'auth...
method getUserVoiceState (line 35) | public async getUserVoiceState(
method getVoiceState (line 52) | public async getVoiceState(guildId: Snowflake, { auth, signal }: Pick<...
method editUserVoiceState (line 68) | public async editUserVoiceState(
method editVoiceState (line 90) | public async editVoiceState(
FILE: packages/core/src/api/webhook.ts
type CreateWebhookMessageOptions (line 22) | type CreateWebhookMessageOptions = RESTPostAPIWebhookWithTokenJSONBody &
type EditWebhookMessageOptions (line 25) | type EditWebhookMessageOptions = RESTPatchAPIWebhookWithTokenMessageJSON...
class WebhooksAPI (line 30) | class WebhooksAPI {
method constructor (line 31) | public constructor(private readonly rest: REST) {}
method get (line 41) | public async get(
method edit (line 60) | public async edit(
method delete (line 81) | public async delete(
method execute (line 133) | public async execute(
method executeSlack (line 158) | public async executeSlack(
method executeGitHub (line 183) | public async executeGitHub(
method getMessage (line 208) | public async getMessage(
method editMessage (line 232) | public async editMessage(
method deleteMessage (line 258) | public async deleteMessage(
FILE: packages/core/src/client.ts
type IntrinsicProps (line 90) | interface IntrinsicProps {
type ToEventProps (line 101) | interface ToEventProps<Data> extends IntrinsicProps {
type MappedEvents (line 105) | interface MappedEvents {
type ManagerShardEventsMap (line 190) | interface ManagerShardEventsMap extends MappedEvents {}
type ClientOptions (line 192) | interface ClientOptions {
type RequestGuildMembersResult (line 197) | interface RequestGuildMembersResult {
function createTimer (line 204) | function createTimer(controller: AbortController, timeout: number) {
class Client (line 208) | class Client extends AsyncEventEmitter<MappedEvents> {
method constructor (line 215) | public constructor(options: ClientOptions) {
method requestGuildMembersIterator (line 240) | public async *requestGuildMembersIterator(options: GatewayRequestGuild...
method requestGuildMembers (line 325) | public async requestGuildMembers(options: GatewayRequestGuildMembersDa...
method requestSoundboardSoundsIterator (line 356) | public async *requestSoundboardSoundsIterator(options: GatewayRequestS...
method requestSoundboardSounds (line 426) | public async requestSoundboardSounds(options: GatewayRequestSoundboard...
method updateVoiceState (line 445) | public async updateVoiceState(options: GatewayVoiceStateUpdateData) {
method updatePresence (line 461) | public async updatePresence(shardId: number, options: GatewayPresenceU...
method toEventProps (line 469) | private toEventProps<ObjectType>(obj: ObjectType, shardId: number): To...
FILE: packages/core/src/util/files.ts
type DescriptiveRawFile (line 4) | interface DescriptiveRawFile extends RawFile {
function withFiles (line 14) | function withFiles(files: DescriptiveRawFile[], options: APIInteractionR...
FILE: packages/create-discord-bot/src/create-discord-bot.ts
type Options (line 11) | interface Options {
function createDiscordBot (line 18) | async function createDiscordBot({ directory, installPackages, typescript...
FILE: packages/create-discord-bot/src/helpers/packageManager.ts
type PackageManager (line 9) | type PackageManager = (typeof PACKAGE_MANAGERS)[number];
function resolvePackageManager (line 14) | function resolvePackageManager(): PackageManager {
function install (line 63) | function install(packageManager: PackageManager) {
FILE: packages/create-discord-bot/src/util/constants.ts
constant DEFAULT_PACKAGE_MANAGER (line 4) | const DEFAULT_PACKAGE_MANAGER = 'npm' as const;
constant DEFAULT_PROJECT_NAME (line 9) | const DEFAULT_PROJECT_NAME = 'my-bot' as const;
constant PACKAGE_MANAGERS (line 14) | const PACKAGE_MANAGERS = ['npm', 'pnpm', 'yarn', 'bun', 'deno'] as const;
constant GUIDE_URL (line 19) | const GUIDE_URL = 'https://discordjs.guide' as const;
FILE: packages/create-discord-bot/src/util/isFolderEmpty.ts
function isFolderEmpty (line 24) | function isFolderEmpty(root: string, name: string): boolean {
FILE: packages/create-discord-bot/template/Bun/JavaScript/src/commands/ping.js
method execute (line 7) | async execute(interaction) {
FILE: packages/create-discord-bot/template/Bun/JavaScript/src/commands/utility/user.js
method execute (line 7) | async execute(interaction) {
FILE: packages/create-discord-bot/template/Bun/JavaScript/src/events/interactionCreate.js
method execute (line 9) | async execute(interaction) {
FILE: packages/create-discord-bot/template/Bun/JavaScript/src/events/ready.js
method execute (line 7) | async execute(client) {
FILE: packages/create-discord-bot/template/Bun/JavaScript/src/util/loaders.js
function loadStructures (line 24) | async function loadStructures(dir, predicate, recursive = true) {
function loadCommands (line 66) | async function loadCommands(dir, recursive = true) {
function loadEvents (line 78) | async function loadEvents(dir, recursive = true) {
FILE: packages/create-discord-bot/template/Bun/TypeScript/src/commands/index.ts
type Command (line 8) | type Command = {
FILE: packages/create-discord-bot/template/Bun/TypeScript/src/commands/ping.ts
method execute (line 8) | async execute(interaction) {
FILE: packages/create-discord-bot/template/Bun/TypeScript/src/commands/utility/user.ts
method execute (line 8) | async execute(interaction) {
FILE: packages/create-discord-bot/template/Bun/TypeScript/src/events/index.ts
type Event (line 8) | type Event<EventName extends keyof ClientEvents = keyof ClientEvents> = {
FILE: packages/create-discord-bot/template/Bun/TypeScript/src/events/interactionCreate.ts
method execute (line 9) | async execute(interaction) {
FILE: packages/create-discord-bot/template/Bun/TypeScript/src/events/ready.ts
method execute (line 7) | async execute(client) {
FILE: packages/create-discord-bot/template/Bun/TypeScript/src/util/loaders.ts
type StructurePredicate (line 12) | type StructurePredicate<Structure> = (structure: unknown) => structure i...
function loadStructures (line 22) | async function loadStructures<Structure>(
function loadCommands (line 62) | async function loadCommands(dir: PathLike, recursive = true): Promise<Ma...
function loadEvents (line 69) | async function loadEvents(dir: PathLike, recursive = true): Promise<Even...
FILE: packages/create-discord-bot/template/Deno/src/commands/index.ts
type Command (line 8) | type Command = {
FILE: packages/create-discord-bot/template/Deno/src/commands/ping.ts
method execute (line 8) | async execute(interaction) {
FILE: packages/create-discord-bot/template/Deno/src/commands/utility/user.ts
method execute (line 8) | async execute(interaction) {
FILE: packages/create-discord-bot/template/Deno/src/events/index.ts
type Event (line 8) | type Event<EventName extends keyof ClientEvents = keyof ClientEvents> = {
FILE: packages/create-discord-bot/template/Deno/src/events/interactionCreate.ts
method execute (line 9) | async execute(interaction) {
FILE: packages/create-discord-bot/template/Deno/src/events/ready.ts
method execute (line 7) | async execute(client) {
FILE: packages/create-discord-bot/template/Deno/src/util/loaders.ts
type StructurePredicate (line 13) | type StructurePredicat
Condensed preview — 1689 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,732K chars).
[
{
"path": ".commitlintrc.json",
"chars": 328,
"preview": "{\n\t\"$schema\": \"https://json.schemastore.org/commitlintrc.json\",\n\t\"extends\": [\"@commitlint/config-angular\"],\n\t\"rules\": {\n"
},
{
"path": ".dockerignore",
"chars": 835,
"preview": "# Packages\n**/node_modules\n\n# Log files\n**/logs\n**/*.log\n**/npm-debug.log*\n\n# Runtime data\n**/pids\n**/*.pid\n**/*.seed\n\n#"
},
{
"path": ".git-blame-ignore-revs",
"chars": 122,
"preview": "# .git-blame-ignore-revs\n# switched to eslint-config-neon for mainlib discord.js\nb03c65c34c6e8bab7f97d507d6ccd7c441a1436"
},
{
"path": ".gitattributes",
"chars": 75,
"preview": "* text=auto eol=lf\npnpm-lock.yaml linguist-generated=true text=auto eol=lf\n"
},
{
"path": ".github/.kodiak.toml",
"chars": 228,
"preview": "version = 1\n\n[merge]\nrequire_automerge_label = false\nblocking_labels = ['blocked', 'in review', 'semver:major']\nmethod ="
},
{
"path": ".github/CODEOWNERS",
"chars": 1212,
"preview": "# Learn how to add code owners here:\n# https://help.github.com/articles/about-code-owners\n\n* @iCrawl\n\npackage.json @disc"
},
{
"path": ".github/CODE_OF_CONDUCT.md",
"chars": 3371,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": ".github/COMMIT_CONVENTION.md",
"chars": 3004,
"preview": "## Git Commit Message Convention\n\n> This is adapted from [Angular's commit convention](https://github.com/conventional-c"
},
{
"path": ".github/CONTRIBUTING.md",
"chars": 2746,
"preview": "# Contributing\n\n**The issue tracker is only for bug reports and enhancement suggestions. If you have a question, please "
},
{
"path": ".github/FUNDING.yml",
"chars": 76,
"preview": "github: [iCrawl, amishshah, vladfrangu, kyranet]\nopen_collective: discordjs\n"
},
{
"path": ".github/ISSUE_TEMPLATE/01-package_bug_report.yml",
"chars": 4500,
"preview": "name: Bug report\ndescription: Report an issue with discord.js or another package.\nlabels: [bug, need repro]\nbody:\n - ty"
},
{
"path": ".github/ISSUE_TEMPLATE/02-application_bug_report.yml",
"chars": 1733,
"preview": "name: Websites bug report\ndescription: Report an issue with the documentation or guide websites.\nlabels: [bug, need repr"
},
{
"path": ".github/ISSUE_TEMPLATE/03-proxy_container_bug_report.yml",
"chars": 1643,
"preview": "name: Proxy Container bug report\ndescription: Report an issue with the proxy container.\nlabels: [bug, need repro, apps:p"
},
{
"path": ".github/ISSUE_TEMPLATE/04-feature_request.yml",
"chars": 1961,
"preview": "name: Feature request\ndescription: Request a new feature (discord.js accepts documented features of the official Discord"
},
{
"path": ".github/ISSUE_TEMPLATE/05-guide.yml",
"chars": 750,
"preview": "name: Guide content\ndescription: Request to add to the guide or change existing content\nlabels: [apps:guide]\ntype: Task\n"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 179,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: Discord server\n url: https://discord.gg/djs\n about: Please vi"
},
{
"path": ".github/SUPPORT.md",
"chars": 435,
"preview": "# Seeking support?\n\nWe only use this issue tracker for bug reports and feature request. We are not able to provide gener"
},
{
"path": ".github/issue-labeler.yml",
"chars": 2574,
"preview": "apps:guide:\n - \"### Which (application|package|application or package) is this (bug\n report|feature request) for\\\\?\\"
},
{
"path": ".github/labeler.yml",
"chars": 2799,
"preview": "apps:guide:\n - changed-files:\n - any-glob-to-any-file:\n - apps/guide/*\n - apps/guide/**/*\napps:p"
},
{
"path": ".github/labels.yml",
"chars": 2351,
"preview": "- name: api changes\n color: '5663e9'\n- name: api support\n color: '5663e9'\n- name: apps:guide\n color: fbca04\n- name: a"
},
{
"path": ".github/tsc.json",
"chars": 318,
"preview": "{\n\t\"problemMatcher\": [\n\t\t{\n\t\t\t\"owner\": \"tsc\",\n\t\t\t\"pattern\": [\n\t\t\t\t{\n\t\t\t\t\t\"regexp\": \"^(?:\\\\s+\\\\d+\\\\>)?([^\\\\s].*)\\\\((\\\\d+)"
},
{
"path": ".github/workflows/cleanup-cache.yml",
"chars": 1065,
"preview": "# https://docs.github.com/actions/using-workflows/caching-dependencies-to-speed-up-workflows#force-deleting-cache-entrie"
},
{
"path": ".github/workflows/deploy-website.yml",
"chars": 1089,
"preview": "name: Deploy website\non:\n workflow_dispatch:\nconcurrency:\n group: ${{ github.workflow }}-${{ github.head_ref || github"
},
{
"path": ".github/workflows/deprecate-version.yml",
"chars": 1516,
"preview": "name: Deprecate version\non:\n workflow_dispatch:\n inputs:\n package:\n description: Package\n require"
},
{
"path": ".github/workflows/documentation.yml",
"chars": 9761,
"preview": "name: Documentation\non:\n push:\n branches:\n - 'main'\n paths:\n - 'packages/*/src/**'\n - '!packages/c"
},
{
"path": ".github/workflows/issue-triage.yml",
"chars": 361,
"preview": "name: 'Issue Labeler'\non:\n issues:\n types: [opened]\njobs:\n issue-triage:\n runs-on: ubuntu-latest\n steps:\n "
},
{
"path": ".github/workflows/label-sync.yml",
"chars": 490,
"preview": "name: Label sync\non:\n schedule:\n - cron: '0 0 * * *'\n workflow_dispatch:\n push:\n branches:\n - main\n pat"
},
{
"path": ".github/workflows/lock.yml",
"chars": 414,
"preview": "name: Lock Ancient Issues\non:\n schedule:\n - cron: '0 16 * * *'\n workflow_dispatch:\nconcurrency:\n group: lock\njobs:"
},
{
"path": ".github/workflows/pr-triage.yml",
"chars": 829,
"preview": "name: 'PR Triage'\non:\n pull_request_target:\n types:\n - opened\n - edited\n - reopened\n - synchroni"
},
{
"path": ".github/workflows/publish-dev-docker.yml",
"chars": 2563,
"preview": "name: Publish dev docker images\non:\n schedule:\n - cron: '0 */12 * * *'\n workflow_dispatch:\nenv:\n IMAGE_NAME: disco"
},
{
"path": ".github/workflows/publish-dev.yml",
"chars": 2887,
"preview": "name: Publish dev\non:\n schedule:\n - cron: '0 */12 * * *'\n workflow_dispatch:\n inputs:\n ref:\n descrip"
},
{
"path": ".github/workflows/publish-docker.yml",
"chars": 2895,
"preview": "name: Publish docker images\non:\n workflow_dispatch:\nenv:\n IMAGE_NAME: discordjs/proxy\njobs:\n build:\n name: Build $"
},
{
"path": ".github/workflows/release.yml",
"chars": 3513,
"preview": "name: Release\non:\n workflow_dispatch:\n inputs:\n ref:\n description: 'The branch, tag or SHA to checkout'\n"
},
{
"path": ".github/workflows/remove-tag.yml",
"chars": 1666,
"preview": "name: Remove tag\non:\n workflow_dispatch:\n inputs:\n tag:\n description: The tag to remove\n required"
},
{
"path": ".github/workflows/tests.yml",
"chars": 2602,
"preview": "name: Tests\non:\n push:\n pull_request:\nconcurrency:\n # Group based on workflow name and PR if it exists, if no PR, let"
},
{
"path": ".github/workflows/upload-readmes.yml",
"chars": 1279,
"preview": "name: Upload README.md files\non:\n push:\n branches:\n - 'main'\n paths:\n - 'packages/*/README.md'\n workfl"
},
{
"path": ".gitignore",
"chars": 534,
"preview": "# Packages\nnode_modules\n\n# Log files\nlogs\n*.log\nnpm-debug.log*\n\n# Runtime data\npids\n*.pid\n*.seed\n\n# Env\n.env\n\n# Dist\ndis"
},
{
"path": ".husky/commit-msg",
"chars": 31,
"preview": "pnpm exec commitlint --edit $1\n"
},
{
"path": ".husky/pre-commit",
"chars": 49,
"preview": "pnpm run build:affected && pnpm exec lint-staged\n"
},
{
"path": ".lintstagedrc.json",
"chars": 247,
"preview": "{\n\t\"$schema\": \"https://json.schemastore.org/lintstagedrc.schema.json\",\n\t\"*\": \"prettier --ignore-unknown --write\",\n\t\"{src"
},
{
"path": ".prettierignore",
"chars": 88,
"preview": "CODEOWNERS\nCHANGELOG.md\ntsup.config.bundled*\nvitest.config.ts.timestamp*\npnpm-lock.yaml\n"
},
{
"path": ".prettierrc.json",
"chars": 196,
"preview": "{\n\t\"$schema\": \"https://json.schemastore.org/prettierrc.json\",\n\t\"printWidth\": 120,\n\t\"useTabs\": true,\n\t\"singleQuote\": true"
},
{
"path": ".vscode/extensions.json",
"chars": 307,
"preview": "{\n\t\"recommendations\": [\n\t\t\"esbenp.prettier-vscode\",\n\t\t\"dbaeumer.vscode-eslint\",\n\t\t\"tamasfe.even-better-toml\",\n\t\t\"github."
},
{
"path": ".vscode/settings.json",
"chars": 2022,
"preview": "{\n\t\"eslint.validate\": [\"javascript\", \"javascriptreact\", \"typescript\", \"typescriptreact\"],\n\t\"eslint.useESLintClass\": true"
},
{
"path": "LICENSE",
"chars": 10787,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "README.md",
"chars": 7048,
"preview": "<div align=\"center\">\n\t<br />\n\t<p>\n\t\t<a href=\"https://discord.js.org\"><img src=\"https://discord.js.org/static/logo.svg\" w"
},
{
"path": "api-extractor.json",
"chars": 15550,
"preview": "/**\n * Config file for API Extractor. For more info, please visit: https://api-extractor.com\n */\n{\n\t\"$schema\": \"https:/"
},
{
"path": "apps/guide/.gitignore",
"chars": 216,
"preview": "# Packages\nnode_modules\n\n# Log files\nlogs\n*.log\nnpm-debug.log*\n\n# Runtime data\npids\n*.pid\n*.seed\n\n# Env\n.env\n.env*.local"
},
{
"path": "apps/guide/.lintstagedrc.cjs",
"chars": 98,
"preview": "/** @type {import('lint-staged').Config} */\nmodule.exports = require('../../.lintstagedrc.json');\n"
},
{
"path": "apps/guide/.prettierignore",
"chars": 92,
"preview": ".next\n.turbo\n.vscode\ncoverage\nsrc/assets/readme\nsrc/styles/unocss.css\nnext-env.d.ts\n.source\n"
},
{
"path": "apps/guide/.prettierrc.cjs",
"chars": 180,
"preview": "/** @type {import('prettier').Config} */\nmodule.exports = {\n\t...require('../../.prettierrc.json'),\n\tplugins: ['prettier-"
},
{
"path": "apps/guide/CONTRIBUTING.md",
"chars": 6396,
"preview": "# Contributing\n\n## Local development\n\nClone the code base into a local folder, `cd` into it, and install the dependencie"
},
{
"path": "apps/guide/LICENSE",
"chars": 10758,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "apps/guide/README.md",
"chars": 2503,
"preview": "<div align=\"center\">\n\t<br />\n\t<p>\n\t\t<a href=\"https://discord.js.org\"><img src=\"https://discord.js.org/static/logo.svg\" w"
},
{
"path": "apps/guide/content/docs/legacy/additional-features/cooldowns.mdx",
"chars": 4556,
"preview": "---\ntitle: Cooldowns\n---\n\nSpam is something you generally want to avoid, especially if one of your commands require call"
},
{
"path": "apps/guide/content/docs/legacy/additional-features/meta.json",
"chars": 36,
"preview": "{\n\t\"title\": \"Additional Features\"\n}\n"
},
{
"path": "apps/guide/content/docs/legacy/additional-features/reloading-commands.mdx",
"chars": 3241,
"preview": "---\ntitle: Reloading Commands\n---\n\nWhen writing your commands, you may find it tedious to restart your bot every time fo"
},
{
"path": "apps/guide/content/docs/legacy/additional-info/async-await.mdx",
"chars": 8676,
"preview": "---\ntitle: Understanding async/await\n---\n\nIf you aren't very familiar with ECMAScript 2017, you may not know about async"
},
{
"path": "apps/guide/content/docs/legacy/additional-info/changes-in-v14.mdx",
"chars": 23485,
"preview": "---\ntitle: Updating to v14\n---\n\n## Before you start\n\nMake sure you're using the latest LTS version of Node. To check you"
},
{
"path": "apps/guide/content/docs/legacy/additional-info/collections.mdx",
"chars": 4029,
"preview": "---\ntitle: Collections\n---\n\ndiscord.js comes with a utility class known as `Collection`.\nIt extends JavaScript's native "
},
{
"path": "apps/guide/content/docs/legacy/additional-info/es6-syntax.mdx",
"chars": 11813,
"preview": "---\ntitle: ES6 Syntax\n---\n\nIf you've used JavaScript for only a (relatively) small amount of time or don't have much exp"
},
{
"path": "apps/guide/content/docs/legacy/additional-info/meta.json",
"chars": 121,
"preview": "{\n\t\"title\": \"Additional Info\",\n\t\"pages\": [\"async-await\", \"collections\", \"es6-syntax\", \"notation\", \"rest-api\", \"proxy\"]\n}"
},
{
"path": "apps/guide/content/docs/legacy/additional-info/notation.mdx",
"chars": 4752,
"preview": "---\ntitle: Understanding Notation\n---\n\nThroughout the discord.js docs and when asking for help on the official server, y"
},
{
"path": "apps/guide/content/docs/legacy/additional-info/proxy.mdx",
"chars": 2113,
"preview": "---\ntitle: Using a Proxy\n---\n\nThis guide will show you how to set up a proxy with discord.js. This may be necessary if y"
},
{
"path": "apps/guide/content/docs/legacy/additional-info/rest-api.mdx",
"chars": 7445,
"preview": "---\ntitle: REST APIs\n---\n\nREST APIs are extremely popular on the web and allow you to freely grab a site's data if it ha"
},
{
"path": "apps/guide/content/docs/legacy/app-creation/creating-commands.mdx",
"chars": 6121,
"preview": "---\ntitle: Creating Slash Commands\n---\n\nimport { Step, Steps } from 'fumadocs-ui/components/steps';\nimport { File, Folde"
},
{
"path": "apps/guide/content/docs/legacy/app-creation/deploying-commands.mdx",
"chars": 6660,
"preview": "---\ntitle: Registering Commands\n---\n\nimport { Step, Steps } from 'fumadocs-ui/components/steps';\n\nFor fully functional s"
},
{
"path": "apps/guide/content/docs/legacy/app-creation/handling-commands.mdx",
"chars": 8140,
"preview": "---\ntitle: Command Handling\n---\n\nimport { Step, Steps } from 'fumadocs-ui/components/steps';\n\nUnless your bot project is"
},
{
"path": "apps/guide/content/docs/legacy/app-creation/handling-events.mdx",
"chars": 8909,
"preview": "---\ntitle: Event Handling\n---\n\nimport { File, Folder, Files } from 'fumadocs-ui/components/files';\n\nNode.js uses an even"
},
{
"path": "apps/guide/content/docs/legacy/app-creation/main-file.mdx",
"chars": 2492,
"preview": "---\ntitle: The Main File\n---\n\n<Callout>\n\tThis page assumes you've already prepared the [configuration files](../app-crea"
},
{
"path": "apps/guide/content/docs/legacy/app-creation/meta.json",
"chars": 174,
"preview": "{\n\t\"title\": \"Creating Your App\",\n\t\"pages\": [\n\t\t\"project-setup\",\n\t\t\"main-file\",\n\t\t\"creating-commands\",\n\t\t\"handling-comman"
},
{
"path": "apps/guide/content/docs/legacy/app-creation/project-setup.mdx",
"chars": 5089,
"preview": "---\ntitle: Project Setup\n---\n\n## Configuration files\n\nOnce you [add your bot to a server](../preparations/adding-your-ap"
},
{
"path": "apps/guide/content/docs/legacy/improving-dev-environment/meta.json",
"chars": 47,
"preview": "{\n\t\"title\": \"Improving Your Dev Environment\"\n}\n"
},
{
"path": "apps/guide/content/docs/legacy/improving-dev-environment/package-json-scripts.mdx",
"chars": 4313,
"preview": "---\ntitle: Package Scripts\n---\n\n## Setting up package.json scripts\n\nAn easy way to run scripts like a script to start yo"
},
{
"path": "apps/guide/content/docs/legacy/improving-dev-environment/pm2.mdx",
"chars": 3609,
"preview": "---\ntitle: PM2\n---\n\nPM2 is a process manager. It manages your applications' states, so you can start, stop, restart, and"
},
{
"path": "apps/guide/content/docs/legacy/index.mdx",
"chars": 2419,
"preview": "---\ntitle: Introduction\n---\n\nimport { GithubInfo } from '@/components/GitHubInfo';\n\n<GithubInfo owner=\"discordjs\" repo=\""
},
{
"path": "apps/guide/content/docs/legacy/interactions/context-menus.mdx",
"chars": 2340,
"preview": "---\ntitle: Context Menus\n---\n\nContext Menus are application commands which appear when right clicking or tapping a user "
},
{
"path": "apps/guide/content/docs/legacy/interactions/meta.json",
"chars": 35,
"preview": "{\n\t\"title\": \"Other Interactions\"\n}\n"
},
{
"path": "apps/guide/content/docs/legacy/interactions/modals.mdx",
"chars": 14107,
"preview": "---\ntitle: Modals\n---\n\nModals are pop-up forms that allow you to prompt users for additional input. This form-like inter"
},
{
"path": "apps/guide/content/docs/legacy/interactive-components/action-rows.mdx",
"chars": 1714,
"preview": "---\ntitle: Action Rows\n---\n\nAction rows are a layout component with five \"slots\" that can be filled with other component"
},
{
"path": "apps/guide/content/docs/legacy/interactive-components/buttons.mdx",
"chars": 5426,
"preview": "---\ntitle: Buttons\n---\n\nThe first type of interactive component we'll cover creating is a Button. Buttons are available "
},
{
"path": "apps/guide/content/docs/legacy/interactive-components/interactions.mdx",
"chars": 9405,
"preview": "---\ntitle: Interactions\n---\n\n## Component interactions\n\nEvery button click or select menu selection on a component sent "
},
{
"path": "apps/guide/content/docs/legacy/interactive-components/meta.json",
"chars": 109,
"preview": "{\n\t\"title\": \"Interactive Components\",\n\t\"pages\": [\"action-rows\", \"buttons\", \"select-menus\", \"interactions\"]\n}\n"
},
{
"path": "apps/guide/content/docs/legacy/interactive-components/select-menus.mdx",
"chars": 6138,
"preview": "---\ntitle: Select Menus\n---\n\nSelect menus are interactive components which can be sent via messages, interaction respons"
},
{
"path": "apps/guide/content/docs/legacy/keyv/keyv.mdx",
"chars": 6173,
"preview": "---\ntitle: Keyv\n---\n\n[Keyv](https://www.npmjs.com/package/keyv) is a simple key-value store that works with multiple bac"
},
{
"path": "apps/guide/content/docs/legacy/meta.json",
"chars": 793,
"preview": "{\n\t\"pages\": [\n\t\t\"[MessageCircleQuestion][FAQ](/legacy/popular-topics/faq)\",\n\t\t\"[ArrowDownToLine][Updating to v14](/legac"
},
{
"path": "apps/guide/content/docs/legacy/miscellaneous/cache-customization.mdx",
"chars": 3737,
"preview": "---\ntitle: Cache Customization\n---\n\nSometimes, you would like to be able to customize discord.js's caching behavior in o"
},
{
"path": "apps/guide/content/docs/legacy/miscellaneous/useful-packages.mdx",
"chars": 9436,
"preview": "---\ntitle: Useful Packages\n---\n\nSome of the examples in this section are far from complete. We encourage you to look at "
},
{
"path": "apps/guide/content/docs/legacy/oauth2/oauth2.mdx",
"chars": 9899,
"preview": "---\ntitle: OAuth2\n---\n\nOAuth2 enables application developers to build applications that utilize authentication and data "
},
{
"path": "apps/guide/content/docs/legacy/popular-topics/audit-logs.mdx",
"chars": 4290,
"preview": "---\ntitle: Audit Logs\n---\n\n## Working with Audit Logs\n\n### A Quick Background\n\nAudit logs are an excellent moderation to"
},
{
"path": "apps/guide/content/docs/legacy/popular-topics/canvas.mdx",
"chars": 11475,
"preview": "---\ntitle: Canvas\n---\n\n## Setting up @napi-rs/canvas\n\n`@napi-rs/canvas` is an image manipulation tool that allows you to"
},
{
"path": "apps/guide/content/docs/legacy/popular-topics/collectors.mdx",
"chars": 9890,
"preview": "---\ntitle: Collectors\n---\n\n## Message collectors\n\n`Collector` are useful to enable your bot to obtain _additional_ input"
},
{
"path": "apps/guide/content/docs/legacy/popular-topics/display-components.mdx",
"chars": 11155,
"preview": "---\ntitle: Display Components\n---\n\nWhile you might be familiar with [embeds](./embeds) in Discord, there are more ways t"
},
{
"path": "apps/guide/content/docs/legacy/popular-topics/embeds.mdx",
"chars": 7844,
"preview": "---\ntitle: Message Embeds\n---\n\nIf you have been around on Discord for a bit, chances are you have seen these special mes"
},
{
"path": "apps/guide/content/docs/legacy/popular-topics/errors.mdx",
"chars": 12185,
"preview": "---\ntitle: Common Errors\n---\n\nThere is no doubt that you have encountered errors while making bots. While errors are ins"
},
{
"path": "apps/guide/content/docs/legacy/popular-topics/faq.mdx",
"chars": 12203,
"preview": "---\ntitle: FAQ\n---\n\n# Frequently asked Questions\n\n## Legend\n\n- `client` is a placeholder for the `Client` object, such a"
},
{
"path": "apps/guide/content/docs/legacy/popular-topics/formatters.mdx",
"chars": 2149,
"preview": "---\ntitle: Formatters\n---\n\ndiscord.js provides the `formatters` package which contains a variety of utilities you can us"
},
{
"path": "apps/guide/content/docs/legacy/popular-topics/intents.mdx",
"chars": 6704,
"preview": "---\ntitle: Gateway Intents\n---\n\nGateway Intents were introduced by Discord so bot developers can choose which events the"
},
{
"path": "apps/guide/content/docs/legacy/popular-topics/meta.json",
"chars": 299,
"preview": "{\n\t\"title\": \"Popular Topics\",\n\t\"defaultOpen\": true,\n\t\"pages\": [\n\t\t\"!faq\",\n\t\t\"!display-components\",\n\t\t\"audit-logs\",\n\t\t\"ca"
},
{
"path": "apps/guide/content/docs/legacy/popular-topics/partials.mdx",
"chars": 4048,
"preview": "---\ntitle: Partials\n---\n\nPartial Structures were introduced to the library in version 12 and are optionally received whe"
},
{
"path": "apps/guide/content/docs/legacy/popular-topics/permissions-extended.mdx",
"chars": 7098,
"preview": "---\ntitle: Permissions (extended)\n---\n\n## Discord's permission system\n\nDiscord permissions are stored in a 53-bit intege"
},
{
"path": "apps/guide/content/docs/legacy/popular-topics/permissions.mdx",
"chars": 15520,
"preview": "---\ntitle: Permissions\n---\n\nPermissions are Discord's primary feature, enabling users to customize their server's workin"
},
{
"path": "apps/guide/content/docs/legacy/popular-topics/reactions.mdx",
"chars": 13438,
"preview": "---\ntitle: Reactions\n---\n\n## Reacting to messages\n\nOne of the first things many people want to know is how to react with"
},
{
"path": "apps/guide/content/docs/legacy/popular-topics/threads.mdx",
"chars": 6638,
"preview": "---\ntitle: Threads\n---\n\nThreads can be thought of as temporary sub-channels inside an existing channel, to help better o"
},
{
"path": "apps/guide/content/docs/legacy/popular-topics/webhooks.mdx",
"chars": 7511,
"preview": "---\ntitle: Webhooks\n---\n\nWebhooks can send messages to a text channel without having to log in as a bot. They can also f"
},
{
"path": "apps/guide/content/docs/legacy/preparations/adding-your-app.mdx",
"chars": 2552,
"preview": "---\ntitle: Adding Your App\n---\n\nAfter you set up a bot application, you'll notice that it's not in any servers yet. So h"
},
{
"path": "apps/guide/content/docs/legacy/preparations/app-setup.mdx",
"chars": 3398,
"preview": "---\ntitle: Application Setup\n---\n\n## Creating your bot\n\nNow that you've installed Node, discord.js, and hopefully a lint"
},
{
"path": "apps/guide/content/docs/legacy/preparations/installation.mdx",
"chars": 4306,
"preview": "---\ntitle: Installing Node.js and discord.js\n---\n\nimport { Grid2x2, Apple, Cpu, Zap, Package } from 'lucide-react';\n\n## "
},
{
"path": "apps/guide/content/docs/legacy/preparations/linter.mdx",
"chars": 5533,
"preview": "---\ntitle: Linters\n---\n\nAs a developer, it's a good idea to make your development process as streamlined as possible. Li"
},
{
"path": "apps/guide/content/docs/legacy/preparations/meta.json",
"chars": 102,
"preview": "{\n\t\"title\": \"Getting Started\",\n\t\"pages\": [\"app-setup\", \"adding-your-app\", \"installation\", \"linter\"]\n}\n"
},
{
"path": "apps/guide/content/docs/legacy/sequelize/currency.mdx",
"chars": 18124,
"preview": "---\ntitle: Making a Currency System\n---\n\nA common feature of Discord bots is a currency system. It's possible to do ever"
},
{
"path": "apps/guide/content/docs/legacy/sequelize/index.mdx",
"chars": 15568,
"preview": "---\ntitle: Sequelize\n---\n\nSequelize is an object-relational-mapper, which means you can write a query using objects and "
},
{
"path": "apps/guide/content/docs/legacy/sharding/additional-information.mdx",
"chars": 4333,
"preview": "---\ntitle: Additional Information\n---\n\n<Callout>This page is a follow-up and bases its code on [the previous page](./).<"
},
{
"path": "apps/guide/content/docs/legacy/sharding/extended.mdx",
"chars": 6610,
"preview": "---\ntitle: Advanced Sharding\n---\n\n<Callout type=\"warn\">\n\tThis page is a follow-up and bases its code on [the previous pa"
},
{
"path": "apps/guide/content/docs/legacy/sharding/index.mdx",
"chars": 10856,
"preview": "---\ntitle: App Sharding\n---\n\n## When to shard\n\nBefore you dive into this section, please note that sharding may not be n"
},
{
"path": "apps/guide/content/docs/legacy/slash-commands/advanced-creation.mdx",
"chars": 10382,
"preview": "---\ntitle: Advanced Command Creation\n---\n\nThe examples we've covered so far have all been fairly simple commands, such a"
},
{
"path": "apps/guide/content/docs/legacy/slash-commands/autocomplete.mdx",
"chars": 8491,
"preview": "---\ntitle: Autocomplete\n---\n\nAutocomplete allows you to dynamically provide a selection of values to the user, based on "
},
{
"path": "apps/guide/content/docs/legacy/slash-commands/deleting-commands.mdx",
"chars": 2733,
"preview": "---\ntitle: Deleting Commands\n---\n\n<Callout>\n\tThis page is a follow-up to [command deployment](../app-creation/deploying-"
},
{
"path": "apps/guide/content/docs/legacy/slash-commands/meta.json",
"chars": 31,
"preview": "{\n\t\"title\": \"Slash Commands\"\n}\n"
},
{
"path": "apps/guide/content/docs/legacy/slash-commands/parsing-options.mdx",
"chars": 5057,
"preview": "---\ntitle: Parsing Options\n---\n\n## Command options\n\nIn this section, we'll cover how to access the values of a command's"
},
{
"path": "apps/guide/content/docs/legacy/slash-commands/permissions.mdx",
"chars": 4404,
"preview": "---\ntitle: Slash Command Permissions\n---\n\nSlash commands have their own permissions system. This system allows you to se"
},
{
"path": "apps/guide/content/docs/legacy/slash-commands/response-methods.mdx",
"chars": 7425,
"preview": "---\ntitle: Command Responses\n---\n\nThe most common way of sending a response is by using the `ChatInputCommandInteraction"
},
{
"path": "apps/guide/content/docs/meta.json",
"chars": 41,
"preview": "{\n\t\"pages\": [\"legacy\", \"v15\", \"voice\"]\n}\n"
},
{
"path": "apps/guide/content/docs/v15/index.mdx",
"chars": 13177,
"preview": "---\ntitle: Updating to v15\nicon: ArrowDownToLine\n---\n\nimport { Github } from 'lucide-react';\n\n<Callout type=\"idea\">\n\t**V"
},
{
"path": "apps/guide/content/docs/v15/meta.json",
"chars": 225,
"preview": "{\n\t\"title\": \"discord.js v15\",\n\t\"description\": \"Work in progress...\",\n\t\"pages\": [\"external:[LibraryBig][Documentation](ht"
},
{
"path": "apps/guide/content/docs/voice/audio-player.mdx",
"chars": 5050,
"preview": "---\ntitle: Audio Player\n---\n\nAudio players can be used to play audio across voice connections. A single audio player can"
},
{
"path": "apps/guide/content/docs/voice/audio-resources.mdx",
"chars": 6136,
"preview": "---\ntitle: Audio Resources\n---\n\nAudio resources contain audio that can be played by an audio player to voice connections"
},
{
"path": "apps/guide/content/docs/voice/index.mdx",
"chars": 4601,
"preview": "---\ntitle: Installation\n---\n\n\"Voice\" refers to Discord bots being able to send audio in voice channels. This is supporte"
},
{
"path": "apps/guide/content/docs/voice/life-cycles.mdx",
"chars": 2638,
"preview": "---\ntitle: Life Cycles\n---\n\nTwo of the main components that you'll interact with when using `@discordjs/voice` are:\n\n- *"
},
{
"path": "apps/guide/content/docs/voice/meta.json",
"chars": 346,
"preview": "{\n\t\"title\": \"Voice\",\n\t\"description\": \"Working with the voice library\",\n\t\"pages\": [\n\t\t\"external:[LibraryBig][Documentatio"
},
{
"path": "apps/guide/content/docs/voice/seeking.mdx",
"chars": 1720,
"preview": "---\ntitle: Seeking\n---\n\nThere is no built-in method for seeking audio resources in discord.js. However external librarie"
},
{
"path": "apps/guide/content/docs/voice/voice-connections.mdx",
"chars": 6254,
"preview": "---\ntitle: Voice Connections\n---\n\nVoice connections represent connections to voice channels in a guild. You can only con"
},
{
"path": "apps/guide/next.config.ts",
"chars": 732,
"preview": "import { createMDX } from 'fumadocs-mdx/next';\nimport type { NextConfig } from 'next';\n\nconst withMDX = createMDX();\n\nex"
},
{
"path": "apps/guide/open-next.config.ts",
"chars": 107,
"preview": "import { defineCloudflareConfig } from '@opennextjs/cloudflare';\n\nexport default defineCloudflareConfig();\n"
},
{
"path": "apps/guide/package.json",
"chars": 2880,
"preview": "{\n\t\"$schema\": \"https://json.schemastore.org/package.json\",\n\t\"name\": \"@discordjs/guide\",\n\t\"version\": \"0.1.0\",\n\t\"descripti"
},
{
"path": "apps/guide/postcss.config.js",
"chars": 66,
"preview": "export default {\n\tplugins: {\n\t\t'@tailwindcss/postcss': {},\n\t},\n};\n"
},
{
"path": "apps/guide/public/_headers",
"chars": 67,
"preview": "/_next/static/*\n Cache-Control: public,max-age=31536000,immutable\n"
},
{
"path": "apps/guide/public/site.webmanifest",
"chars": 403,
"preview": "{\n\t\"name\": \"discord.js\",\n\t\"short_name\": \"discord.js\",\n\t\"icons\": [\n\t\t{\n\t\t\t\"src\": \"/web-app-manifest-192x192.png\",\n\t\t\t\"siz"
},
{
"path": "apps/guide/source.config.ts",
"chars": 639,
"preview": "import { rehypeCodeDefaultOptions } from 'fumadocs-core/mdx-plugins';\nimport { defineConfig, defineDocs } from 'fumadocs"
},
{
"path": "apps/guide/src/app/[[...slug]]/page.tsx",
"chars": 1386,
"preview": "import { DocsBody, DocsDescription, DocsPage, DocsTitle } from 'fumadocs-ui/page';\nimport type { Metadata } from 'next';"
},
{
"path": "apps/guide/src/app/api/search/route.ts",
"chars": 153,
"preview": "import { createFromSource } from 'fumadocs-core/search/server';\nimport { source } from '@/lib/source';\n\nexport const { G"
},
{
"path": "apps/guide/src/app/layout.client.tsx",
"chars": 521,
"preview": "'use client';\n\nimport { useParams } from 'next/navigation';\nimport type { ReactNode } from 'react';\n\nexport function Bod"
},
{
"path": "apps/guide/src/app/layout.config.tsx",
"chars": 158,
"preview": "import type { BaseLayoutProps } from 'fumadocs-ui/layouts/shared';\n\nexport const baseOptions: BaseLayoutProps = {\n\tnav: "
},
{
"path": "apps/guide/src/app/layout.tsx",
"chars": 2505,
"preview": "import { Analytics } from '@vercel/analytics/react';\nimport { DocsLayout } from 'fumadocs-ui/layouts/docs';\nimport { Roo"
},
{
"path": "apps/guide/src/app/og/[...slug]/route.tsx",
"chars": 1433,
"preview": "import { generateOGImage } from 'fumadocs-ui/og';\nimport { notFound } from 'next/navigation';\nimport pRetry, { AbortErro"
},
{
"path": "apps/guide/src/components/GitHubInfo.tsx",
"chars": 3451,
"preview": "// https://github.com/fuma-nama/fumadocs/blob/dev/packages/ui/src/components/github-info.tsx\n// https://github.com/fuma-"
},
{
"path": "apps/guide/src/components/mdx/mermaid.tsx",
"chars": 1303,
"preview": "'use client';\n\nimport { useTheme } from 'next-themes';\nimport { useEffect, useId, useRef, useState } from 'react';\n\nexpo"
},
{
"path": "apps/guide/src/lib/source.ts",
"chars": 421,
"preview": "import { loader } from 'fumadocs-core/source';\nimport { icons } from 'lucide-react';\nimport { createElement } from 'reac"
},
{
"path": "apps/guide/src/mdx-components.tsx",
"chars": 501,
"preview": "import { Popup, PopupContent, PopupTrigger } from 'fumadocs-twoslash/ui';\nimport * as TabsComponents from 'fumadocs-ui/c"
},
{
"path": "apps/guide/src/middleware.ts",
"chars": 792,
"preview": "import { NextResponse, type NextRequest } from 'next/server';\n\nexport function middleware(request: NextRequest) {\n\t// TO"
},
{
"path": "apps/guide/src/styles/base.css",
"chars": 773,
"preview": "@import 'tailwindcss';\n@import 'fumadocs-ui/css/neutral.css';\n@import 'fumadocs-ui/css/preset.css';\n@import 'fumadocs-tw"
},
{
"path": "apps/guide/src/util/env.ts",
"chars": 214,
"preview": "export const ENV = {\n\tIS_LOCAL_DEV: process.env.VERCEL_ENV === 'development' || process.env.NEXT_PUBLIC_LOCAL_DEV === 't"
},
{
"path": "apps/guide/tsconfig.eslint.json",
"chars": 405,
"preview": "{\n\t\"$schema\": \"https://json.schemastore.org/tsconfig.json\",\n\t\"extends\": \"./tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allo"
},
{
"path": "apps/guide/tsconfig.json",
"chars": 825,
"preview": "{\n\t\"$schema\": \"https://json.schemastore.org/tsconfig.json\",\n\t\"extends\": \"../../tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t/"
},
{
"path": "apps/guide/wrangler.jsonc",
"chars": 416,
"preview": "{\n\t\"$schema\": \"node_modules/wrangler/config-schema.json\",\n\t\"main\": \".open-next/worker.js\",\n\t\"name\": \"discordjs-guide\",\n\t"
},
{
"path": "apps/proxy-container/.gitignore",
"chars": 151,
"preview": "# Packages\nnode_modules\n\n# Log files\nlogs\n*.log\nnpm-debug.log*\n\n# Runtime data\npids\n*.pid\n*.seed\n\n# Env\n.env\n\n# Dist\ndis"
},
{
"path": "apps/proxy-container/.lintstagedrc.cjs",
"chars": 98,
"preview": "/** @type {import('lint-staged').Config} */\nmodule.exports = require('../../.lintstagedrc.json');\n"
},
{
"path": "apps/proxy-container/.prettierignore",
"chars": 33,
"preview": ".turbo\ndist\ntsup.config.bundled*\n"
},
{
"path": "apps/proxy-container/.prettierrc.cjs",
"chars": 93,
"preview": "/** @type {import('prettier').Config} */\nmodule.exports = require('../../.prettierrc.json');\n"
},
{
"path": "apps/proxy-container/Dockerfile",
"chars": 803,
"preview": "FROM node:24-alpine AS base\n\nENV PNPM_HOME=\"/pnpm\"\nENV PATH=\"$PNPM_HOME:$PATH\"\n\nCOPY . /usr/proxy-container\nWORKDIR /usr"
},
{
"path": "apps/proxy-container/LICENSE",
"chars": 10790,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "apps/proxy-container/README.md",
"chars": 3606,
"preview": "<div align=\"center\">\n\t<br />\n\t<p>\n\t\t<a href=\"https://discord.js.org\"><img src=\"https://discord.js.org/static/logo.svg\" w"
},
{
"path": "apps/proxy-container/package.json",
"chars": 1814,
"preview": "{\n\t\"$schema\": \"https://json.schemastore.org/package.json\",\n\t\"name\": \"@discordjs/proxy-container\",\n\t\"version\": \"1.0.0\",\n\t"
},
{
"path": "apps/proxy-container/src/index.ts",
"chars": 508,
"preview": "import { createServer } from 'node:http';\nimport process from 'node:process';\nimport { proxyRequests } from '@discordjs/"
},
{
"path": "apps/proxy-container/tsconfig.eslint.json",
"chars": 347,
"preview": "{\n\t\"$schema\": \"https://json.schemastore.org/tsconfig.json\",\n\t\"extends\": \"./tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allo"
},
{
"path": "apps/proxy-container/tsconfig.json",
"chars": 209,
"preview": "{\n\t\"$schema\": \"https://json.schemastore.org/tsconfig.json\",\n\t\"extends\": \"../../tsconfig.json\",\n\t\"include\": [\"src/**/*.ts"
},
{
"path": "apps/proxy-container/tsup.config.ts",
"chars": 144,
"preview": "import { createTsupConfig } from '../../tsup.config.js';\n\nexport default createTsupConfig({\n\tdts: false,\n\tformat: 'esm',"
},
{
"path": "apps/website/.gitignore",
"chars": 310,
"preview": "# Packages\nnode_modules\n\n# Log files\nlogs\n*.log\nnpm-debug.log*\n\n# Runtime data\npids\n*.pid\n*.seed\n\n# Env\n.env\n.env*.local"
},
{
"path": "apps/website/.lintstagedrc.cjs",
"chars": 98,
"preview": "/** @type {import('lint-staged').Config} */\nmodule.exports = require('../../.lintstagedrc.json');\n"
},
{
"path": "apps/website/.prettierignore",
"chars": 128,
"preview": ".next\n.turbo\n.vscode\ncoverage\npublic/searchIndex\nsrc/assets/readme\nsrc/styles/unocss.css\nnext-env.d.ts\nsrc/util/shiki.bu"
},
{
"path": "apps/website/.prettierrc.cjs",
"chars": 180,
"preview": "/** @type {import('prettier').Config} */\nmodule.exports = {\n\t...require('../../.prettierrc.json'),\n\tplugins: ['prettier-"
},
{
"path": "apps/website/LICENSE",
"chars": 10758,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "apps/website/README.md",
"chars": 2632,
"preview": "<div align=\"center\">\n\t<br />\n\t<p>\n\t\t<a href=\"https://discord.js.org\"><img src=\"https://discord.js.org/static/logo.svg\" w"
},
{
"path": "apps/website/next.config.ts",
"chars": 719,
"preview": "import type { NextConfig } from 'next';\n\nexport default {\n\timages: {\n\t\tdangerouslyAllowSVG: true,\n\t\tcontentDispositionTy"
},
{
"path": "apps/website/open-next.config.ts",
"chars": 107,
"preview": "import { defineCloudflareConfig } from '@opennextjs/cloudflare';\n\nexport default defineCloudflareConfig();\n"
},
{
"path": "apps/website/package.json",
"chars": 3708,
"preview": "{\n\t\"$schema\": \"https://json.schemastore.org/package.json\",\n\t\"name\": \"@discordjs/website\",\n\t\"version\": \"0.1.0\",\n\t\"descrip"
},
{
"path": "apps/website/postcss.config.js",
"chars": 66,
"preview": "export default {\n\tplugins: {\n\t\t'@tailwindcss/postcss': {},\n\t},\n};\n"
},
{
"path": "apps/website/public/_headers",
"chars": 67,
"preview": "/_next/static/*\n Cache-Control: public,max-age=31536000,immutable\n"
},
{
"path": "apps/website/public/site.webmanifest",
"chars": 403,
"preview": "{\n\t\"name\": \"discord.js\",\n\t\"short_name\": \"discord.js\",\n\t\"icons\": [\n\t\t{\n\t\t\t\"src\": \"/web-app-manifest-192x192.png\",\n\t\t\t\"siz"
},
{
"path": "apps/website/scripts/generateAllIndices.js",
"chars": 477,
"preview": "import { readFile } from 'node:fs/promises';\nimport { generateAllIndices } from '@discordjs/scripts';\n\nconsole.info('Gen"
},
{
"path": "apps/website/src/app/api/docs/entrypoints/route.ts",
"chars": 545,
"preview": "import { NextResponse, type NextRequest } from 'next/server';\nimport { fetchEntryPoints } from '@/util/fetchEntryPoints'"
},
{
"path": "apps/website/src/app/api/docs/sitemap/route.ts",
"chars": 609,
"preview": "import { NextResponse, type NextRequest } from 'next/server';\nimport { fetchSitemap } from '@/util/fetchSitemap';\n\nexpor"
},
{
"path": "apps/website/src/app/api/docs/versions/route.ts",
"chars": 469,
"preview": "import { NextResponse, type NextRequest } from 'next/server';\nimport { fetchVersions } from '@/util/fetchVersions';\n\nexp"
},
{
"path": "apps/website/src/app/docs/packages/[packageName]/[version]/[[...item]]/CmdK.tsx",
"chars": 421,
"preview": "import { CmdKNoSRR } from '@/components/CmdK';\nimport { fetchDependencies } from '@/util/fetchDependencies';\n\nexport asy"
},
{
"path": "apps/website/src/app/docs/packages/[packageName]/[version]/[[...item]]/layout.tsx",
"chars": 771,
"preview": "import type { Metadata } from 'next';\nimport { Suspense, type PropsWithChildren } from 'react';\nimport { CmdK } from './"
},
{
"path": "apps/website/src/app/docs/packages/[packageName]/[version]/[[...item]]/opengraph-image.tsx.bak",
"chars": 3872,
"preview": "/* eslint-disable react/no-unknown-property */\n\nimport { ImageResponse } from 'next/og';\nimport { resolveKind } from '@/"
},
{
"path": "apps/website/src/app/docs/packages/[packageName]/[version]/[[...item]]/page.tsx",
"chars": 3064,
"preview": "import type { Metadata } from 'next';\nimport { notFound } from 'next/navigation';\nimport { SafeMdxRenderer } from 'safe-"
},
{
"path": "apps/website/src/app/docs/packages/layout.tsx",
"chars": 1867,
"preview": "// import Link from 'next/link';\nimport type { PropsWithChildren } from 'react';\nimport { Footer } from '@/components/Fo"
},
{
"path": "apps/website/src/app/layout.tsx",
"chars": 1683,
"preview": "import { Analytics } from '@vercel/analytics/react';\nimport { GeistMono } from 'geist/font/mono';\nimport { GeistSans } f"
},
{
"path": "apps/website/src/app/not-found.tsx",
"chars": 564,
"preview": "import Link from 'next/link';\n\nexport default function NotFound() {\n\treturn (\n\t\t<div className=\"mx-auto flex min-h-[calc"
},
{
"path": "apps/website/src/app/opengraph-image.tsx",
"chars": 1466,
"preview": "/* eslint-disable react/no-unknown-property */\n\nimport { ImageResponse } from 'next/og';\n\nexport const size = {\n\twidth: "
},
{
"path": "apps/website/src/app/page.tsx",
"chars": 3028,
"preview": "import { ExternalLink } from 'lucide-react';\nimport Image from 'next/image';\nimport Link from 'next/link';\nimport vercel"
},
{
"path": "apps/website/src/app/providers.tsx",
"chars": 1549,
"preview": "'use client';\n\nimport { isServer, QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { Provider as "
},
{
"path": "apps/website/src/components/Badges.tsx",
"chars": 1900,
"preview": "import { AlertTriangle } from 'lucide-react';\nimport type { PropsWithChildren } from 'react';\n\nexport function Badge({ c"
},
{
"path": "apps/website/src/components/CmdK.tsx",
"chars": 4764,
"preview": "'use client';\n\nimport { Command } from 'cmdk';\nimport { useAtom, useSetAtom } from 'jotai';\nimport { ArrowRight } from '"
},
{
"path": "apps/website/src/components/ConstructorNode.tsx",
"chars": 2311,
"preview": "import { VscSymbolMethod } from '@react-icons/all-files/vsc/VscSymbolMethod';\nimport { Code2, LinkIcon } from 'lucide-re"
},
{
"path": "apps/website/src/components/DeprecatedNode.tsx",
"chars": 376,
"preview": "import { DocNode } from './DocNode';\nimport { Alert } from './ui/Alert';\n\nexport async function DeprecatedNode({\n\tdeprec"
},
{
"path": "apps/website/src/components/DocItem.tsx",
"chars": 5046,
"preview": "import { VscSymbolParameter } from '@react-icons/all-files/vsc/VscSymbolParameter';\nimport { ConstructorNode } from './C"
},
{
"path": "apps/website/src/components/DocKind.tsx",
"chars": 1032,
"preview": "export function resolveNodeKind(kind: string) {\n\tswitch (kind) {\n\t\tcase 'Class':\n\t\t\treturn {\n\t\t\t\ttext: 'text-green-500',"
},
{
"path": "apps/website/src/components/DocNode.tsx",
"chars": 2590,
"preview": "import Link from 'next/link';\nimport { BuiltinDocumentationLinks } from '@/util/builtinDocumentationLinks';\nimport { Scr"
}
]
// ... and 1489 more files (download for full content)
About this extraction
This page contains the full source code of the discordjs/discord.js GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1689 files (5.9 MB), approximately 1.6M tokens, and a symbol index with 6041 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.