refactor: docs (#10126)

This commit is contained in:
Noel
2024-02-29 04:37:52 +01:00
committed by GitHub
parent 0f9017ef95
commit 18cce83d80
192 changed files with 8116 additions and 6321 deletions

View File

@@ -43,24 +43,24 @@
"@actions/core": "^1.10.1",
"@actions/glob": "^0.4.0",
"@discordjs/scripts": "workspace:^",
"@vercel/blob": "^0.20.0",
"@vercel/blob": "^0.22.1",
"@vercel/postgres": "^0.7.2",
"meilisearch": "^0.37.0",
"tslib": "^2.6.2",
"undici": "6.6.1"
"undici": "6.6.2"
},
"devDependencies": {
"@types/node": "18.18.8",
"@vitest/coverage-v8": "^1.2.2",
"@vitest/coverage-v8": "^1.3.1",
"cross-env": "^7.0.3",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"prettier": "^3.2.5",
"tsup": "^8.0.1",
"turbo": "^1.12.2",
"tsup": "^8.0.2",
"turbo": "^1.12.4",
"typescript": "^5.3.3",
"vitest": "^1.2.2"
"vitest": "^1.3.1"
},
"engines": {
"node": ">=18"

View File

@@ -52,10 +52,15 @@ try {
await Promise.all(
indices.map(async (index) => {
console.log(`Uploading ${index.index}...`);
let task;
try {
await client.createIndex(index.index);
task = await client.createIndex(index.index);
} catch {}
if (task) {
await client.waitForTask(task.taskUid);
}
await client.index(index.index).addDocuments(index.data);
}),
);

View File

@@ -1,33 +1,22 @@
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
import process from 'node:process';
import { getInput, setFailed } from '@actions/core';
import { getInput } from '@actions/core';
import { create } from '@actions/glob';
import { put } from '@vercel/blob';
import { createPool } from '@vercel/postgres';
if (!process.env.DATABASE_URL) {
setFailed('DATABASE_URL is not set');
}
const pkg = getInput('package') || '*';
const version = getInput('version') || 'main';
const pool = createPool({
connectionString: process.env.DATABASE_URL,
});
const globber = await create(`packages/${pkg}/docs/split/main.*.*.api.json`);
const globber = await create(`packages/${pkg}/docs/${pkg}/split/*.api.json`);
for await (const file of globber.globGenerator()) {
const data = await readFile(file, 'utf8');
try {
console.log(`Uploading ${file} with ${version}...`);
const name = basename(file).replace('main.', '');
const { url } = await put(`${version}.${name}`, data, {
await put(`rewrite/${pkg}/${version}.${name}`, data, {
access: 'public',
addRandomSuffix: false,
});
await pool.sql`insert into documentation (name, version, url) values (${name}, ${version}, ${url}) on conflict (name, version) do update set url = EXCLUDED.url`;
} catch (error) {
console.log(error);
}

View File

@@ -2,11 +2,11 @@ import { createTsupConfig } from '../../tsup.config.js';
export default createTsupConfig({
entry: [
'src/buildSplitDocumentation/index.ts',
'src/index.ts',
'src/formatTag/index.ts',
'src/uploadDocumentation/index.ts',
'src/uploadSearchIndices/index.ts',
'src/uploadSplitDocumentation/index.ts',
],
dts: false,
format: 'esm',

View File

@@ -36,14 +36,14 @@
},
"devDependencies": {
"@types/jest": "^29.5.12",
"@types/node": "^18.19.14",
"@types/node": "^18.19.19",
"cross-env": "^7.0.3",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"jest": "^29.7.0",
"prettier": "^3.2.5",
"tsup": "^8.0.1",
"turbo": "^1.12.2"
"tsup": "^8.0.2",
"turbo": "^1.12.4"
}
}

View File

@@ -51,12 +51,12 @@
"devDependencies": {
"@types/node": "18.18.8",
"cross-env": "^7.0.3",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"prettier": "^3.2.5",
"tsup": "^8.0.1",
"turbo": "^1.12.2",
"tsup": "^8.0.2",
"turbo": "^1.12.4",
"typescript": "^5.3.3"
},
"engines": {

View File

@@ -65,17 +65,17 @@
"devDependencies": {
"@types/jest": "^29.5.12",
"@types/lodash": "^4.14.202",
"@types/node": "^18.19.14",
"@types/node": "^18.19.19",
"@types/resolve": "^1.20.6",
"@types/semver": "^7.5.6",
"@types/semver": "^7.5.7",
"cpy-cli": "^5.0.0",
"cross-env": "^7.0.3",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"jest": "^29.7.0",
"prettier": "^3.2.5",
"tsup": "^8.0.1",
"turbo": "^1.12.2"
"tsup": "^8.0.2",
"turbo": "^1.12.4"
}
}

View File

@@ -75,17 +75,17 @@
"@discordjs/scripts": "workspace:^",
"@favware/cliff-jumper": "^2.2.3",
"@types/node": "18.18.8",
"@vitest/coverage-v8": "^1.2.2",
"@vitest/coverage-v8": "^1.3.1",
"cross-env": "^7.0.3",
"esbuild-plugin-version-injector": "^1.2.1",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"prettier": "^3.2.5",
"tsup": "^8.0.1",
"turbo": "^1.12.2",
"tsup": "^8.0.2",
"turbo": "^1.12.4",
"typescript": "^5.3.3",
"vitest": "^1.2.2"
"vitest": "^1.3.1"
},
"engines": {
"node": ">=18"

View File

@@ -69,7 +69,7 @@
"@sapphire/shapeshift": "^3.9.6",
"discord-api-types": "0.37.61",
"fast-deep-equal": "^3.1.3",
"ts-mixer": "^6.0.3",
"ts-mixer": "^6.0.4",
"tslib": "^2.6.2"
},
"devDependencies": {
@@ -77,18 +77,18 @@
"@discordjs/scripts": "workspace:^",
"@favware/cliff-jumper": "^2.2.3",
"@types/node": "16.18.60",
"@vitest/coverage-v8": "^1.2.2",
"@vitest/coverage-v8": "^1.3.1",
"cross-env": "^7.0.3",
"downlevel-dts": "^0.11.0",
"esbuild-plugin-version-injector": "^1.2.1",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"prettier": "^3.2.5",
"tsup": "^8.0.1",
"turbo": "^1.12.2",
"tsup": "^8.0.2",
"turbo": "^1.12.4",
"typescript": "^5.3.3",
"vitest": "^1.2.2"
"vitest": "^1.3.1"
},
"engines": {
"node": ">=16.11.0"

View File

@@ -64,17 +64,17 @@
"@discordjs/scripts": "workspace:^",
"@favware/cliff-jumper": "^2.2.3",
"@types/node": "18.18.8",
"@vitest/coverage-v8": "^1.2.2",
"@vitest/coverage-v8": "^1.3.1",
"cross-env": "^7.0.3",
"esbuild-plugin-version-injector": "^1.2.1",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"prettier": "^3.2.5",
"tsup": "^8.0.1",
"turbo": "^1.12.2",
"tsup": "^8.0.2",
"turbo": "^1.12.4",
"typescript": "^5.3.3",
"vitest": "^1.2.2"
"vitest": "^1.3.1"
},
"engines": {
"node": ">=18"

View File

@@ -76,17 +76,17 @@
"@discordjs/scripts": "workspace:^",
"@favware/cliff-jumper": "^2.2.3",
"@types/node": "18.18.8",
"@vitest/coverage-v8": "^1.2.2",
"@vitest/coverage-v8": "^1.3.1",
"cross-env": "^7.0.3",
"esbuild-plugin-version-injector": "^1.2.1",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"prettier": "^3.2.5",
"tsup": "^8.0.1",
"turbo": "^1.12.2",
"tsup": "^8.0.2",
"turbo": "^1.12.4",
"typescript": "^5.3.3",
"vitest": "^1.2.2"
"vitest": "^1.3.1"
},
"engines": {
"node": ">=18"

View File

@@ -48,7 +48,7 @@
},
"homepage": "https://discord.js.org",
"dependencies": {
"commander": "^11.1.0",
"commander": "^12.0.0",
"fast-glob": "^3.3.2",
"picocolors": "^1.0.0",
"prompts": "^2.4.2",
@@ -60,16 +60,16 @@
"@types/node": "18.18.8",
"@types/prompts": "^2.4.9",
"@types/validate-npm-package-name": "^4.0.2",
"@vitest/coverage-v8": "^1.2.2",
"@vitest/coverage-v8": "^1.3.1",
"cross-env": "^7.0.3",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"prettier": "^3.2.5",
"terser": "^5.27.0",
"tsup": "^8.0.1",
"terser": "^5.28.1",
"tsup": "^8.0.2",
"typescript": "^5.3.3",
"vitest": "^1.2.2"
"vitest": "^1.3.1"
},
"engines": {
"node": ">=18"

View File

@@ -76,7 +76,7 @@
"fast-deep-equal": "3.1.3",
"lodash.snakecase": "4.1.1",
"tslib": "2.6.2",
"undici": "6.6.1",
"undici": "6.6.2",
"ws": "8.16.0"
},
"devDependencies": {
@@ -85,17 +85,17 @@
"@discordjs/scripts": "workspace:^",
"@favware/cliff-jumper": "2.2.3",
"@types/node": "16.18.60",
"@typescript-eslint/eslint-plugin": "^6.21.0",
"@typescript-eslint/parser": "^6.21.0",
"@typescript-eslint/eslint-plugin": "^7.1.0",
"@typescript-eslint/parser": "^7.1.0",
"cross-env": "^7.0.3",
"dtslint": "4.2.1",
"eslint": "8.56.0",
"eslint": "8.57.0",
"eslint-formatter-pretty": "5.0.0",
"jest": "29.7.0",
"prettier": "3.2.5",
"tsd": "0.30.4",
"tsd": "0.30.7",
"tslint": "6.1.3",
"turbo": "^1.12.2",
"turbo": "^1.12.4",
"typescript": "5.3.3"
},
"engines": {

View File

@@ -59,22 +59,22 @@
},
"homepage": "https://discord.js.org",
"dependencies": {
"commander": "^11.1.0",
"commander": "^12.0.0",
"jsdoc-to-markdown": "^8.0.1",
"tslib": "^2.6.2",
"typedoc": "^0.25.7"
"typedoc": "^0.25.9"
},
"devDependencies": {
"@favware/cliff-jumper": "^2.2.3",
"@types/jsdoc-to-markdown": "^7.0.6",
"@types/node": "18.18.8",
"cross-env": "^7.0.3",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"prettier": "^3.2.5",
"tsup": "^8.0.1",
"turbo": "^1.12.2",
"tsup": "^8.0.2",
"turbo": "^1.12.4",
"typescript": "^5.3.3"
},
"engines": {

View File

@@ -61,17 +61,17 @@
"@discordjs/scripts": "workspace:^",
"@favware/cliff-jumper": "^2.2.3",
"@types/node": "16.18.60",
"@vitest/coverage-v8": "^1.2.2",
"@vitest/coverage-v8": "^1.3.1",
"cross-env": "^7.0.3",
"esbuild-plugin-version-injector": "^1.2.1",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"prettier": "^3.2.5",
"tsup": "^8.0.1",
"turbo": "^1.12.2",
"tsup": "^8.0.2",
"turbo": "^1.12.4",
"typescript": "^5.3.3",
"vitest": "^1.2.2"
"vitest": "^1.3.1"
},
"engines": {
"node": ">=16.11.0"

View File

@@ -78,17 +78,17 @@
"@discordjs/scripts": "workspace:^",
"@favware/cliff-jumper": "^2.2.3",
"@types/node": "18.18.8",
"@vitest/coverage-v8": "^1.2.2",
"@vitest/coverage-v8": "^1.3.1",
"cross-env": "^7.0.3",
"esbuild-plugin-version-injector": "^1.2.1",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"prettier": "^3.2.5",
"tsup": "^8.0.1",
"turbo": "^1.12.2",
"tsup": "^8.0.2",
"turbo": "^1.12.4",
"typescript": "^5.3.3",
"vitest": "^1.2.2"
"vitest": "^1.3.1"
},
"engines": {
"node": ">=18"

View File

@@ -51,12 +51,12 @@
"devDependencies": {
"@types/node": "18.18.8",
"cross-env": "^7.0.3",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"prettier": "^3.2.5",
"tsup": "^8.0.1",
"turbo": "^1.12.2",
"tsup": "^8.0.2",
"turbo": "^1.12.4",
"typescript": "^5.3.3"
},
"engines": {

View File

@@ -67,7 +67,7 @@
"@discordjs/rest": "workspace:^",
"@discordjs/util": "workspace:^",
"tslib": "^2.6.2",
"undici": "6.6.1"
"undici": "6.6.2"
},
"devDependencies": {
"@discordjs/api-extractor": "workspace:^",
@@ -75,18 +75,18 @@
"@favware/cliff-jumper": "^2.2.3",
"@types/node": "18.18.8",
"@types/supertest": "^6.0.2",
"@vitest/coverage-v8": "^1.2.2",
"@vitest/coverage-v8": "^1.3.1",
"cross-env": "^7.0.3",
"esbuild-plugin-version-injector": "^1.2.1",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"prettier": "^3.2.5",
"supertest": "^6.3.4",
"tsup": "^8.0.1",
"turbo": "^1.12.2",
"tsup": "^8.0.2",
"turbo": "^1.12.4",
"typescript": "^5.3.3",
"vitest": "^1.2.2"
"vitest": "^1.3.1"
},
"engines": {
"node": ">=18"

View File

@@ -90,24 +90,24 @@
"discord-api-types": "0.37.61",
"magic-bytes.js": "^1.8.0",
"tslib": "^2.6.2",
"undici": "6.6.1"
"undici": "6.6.2"
},
"devDependencies": {
"@discordjs/api-extractor": "workspace:^",
"@discordjs/scripts": "workspace:^",
"@favware/cliff-jumper": "^2.2.3",
"@types/node": "18.17.9",
"@vitest/coverage-v8": "^1.2.2",
"@vitest/coverage-v8": "^1.3.1",
"cross-env": "^7.0.3",
"esbuild-plugin-version-injector": "^1.2.1",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"prettier": "^3.2.5",
"tsup": "^8.0.1",
"turbo": "^1.12.2",
"tsup": "^8.0.2",
"turbo": "^1.12.4",
"typescript": "^5.3.3",
"vitest": "^1.2.2"
"vitest": "^1.3.1"
},
"engines": {
"node": ">=16.11.0"

View File

@@ -17,6 +17,10 @@ pids
# Dist
dist
# Docs
docs/**/*
!docs/README.md
# Miscellaneous
.turbo
.tmp

View File

@@ -7,25 +7,24 @@ import packageFile from '../package.json';
import { generateSplitDocumentation } from '../src/index.js';
export interface CLIOptions {
custom: string;
input: string[];
newOutput: string;
output: string;
root: string;
typescript: boolean;
all: boolean;
}
const command = createCommand().version(packageFile.version);
const command = createCommand().version(packageFile.version).option('-A, --all', 'Build all available versions', false);
const program = command.parse(process.argv);
program.opts<CLIOptions>();
const opts = program.opts<CLIOptions>();
console.log('Generating split documentation...');
void generateSplitDocumentation({
fetchPackageVersions: async (_) => {
return ['main'];
},
fetchPackageVersionDocs: async (_, __) => {
return JSON.parse(await readFile(`${process.cwd()}/docs/docs.api.json`, 'utf8'));
},
}).then(() => console.log('Generated split documentation.'));
void generateSplitDocumentation(
opts.all
? {}
: {
fetchPackageVersions: async (_) => {
return ['main'];
},
fetchPackageVersionDocs: async (_, __) => {
return JSON.parse(await readFile(`${process.cwd()}/docs/docs.api.json`, 'utf8'));
},
},
).then(() => console.log('Generated split documentation.'));

View File

@@ -63,27 +63,27 @@
"@discordjs/api-extractor-utils": "workspace:^",
"@microsoft/tsdoc": "0.14.2",
"@microsoft/tsdoc-config": "0.16.2",
"@vercel/blob": "^0.20.0",
"@vercel/blob": "^0.22.1",
"@vercel/postgres": "^0.7.2",
"commander": "^11.1.0",
"commander": "^12.0.0",
"tslib": "^2.6.2",
"undici": "6.6.1",
"yaml": "2.3.4"
"undici": "6.6.2",
"yaml": "2.4.0"
},
"devDependencies": {
"@turbo/gen": "^1.12.2",
"@turbo/gen": "^1.12.4",
"@types/node": "18.18.8",
"@vitest/coverage-v8": "^1.2.2",
"@vitest/coverage-v8": "^1.3.1",
"cross-env": "^7.0.3",
"env-cmd": "^10.1.0",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"prettier": "^3.2.5",
"tsup": "^8.0.1",
"turbo": "^1.12.2",
"tsup": "^8.0.2",
"turbo": "^1.12.4",
"typescript": "^5.3.3",
"vitest": "^1.2.2"
"vitest": "^1.3.1"
},
"engines": {
"node": ">=18"

View File

@@ -35,6 +35,7 @@ import {
ApiStaticMixin,
ExcerptTokenKind,
ExcerptToken,
ApiOptionalMixin,
} from '@discordjs/api-extractor-model';
import { DocNodeKind, SelectorKind, StandardTags } from '@microsoft/tsdoc';
import type {
@@ -276,7 +277,7 @@ function itemExcerptText(excerpt: Excerpt, apiPackage: ApiPackage) {
}
return {
text: token.text,
text: token.text.replace(/import\("discord-api-types(?:\/v\d+)?"\)\./, ''),
};
});
}
@@ -304,19 +305,19 @@ function itemTsDoc(item: DocNode, apiItem: ApiItem) {
const { codeDestination, urlDestination, linkText } = node as DocLinkTag;
if (codeDestination) {
if (
!codeDestination.importPath &&
!codeDestination.packageName &&
codeDestination.memberReferences.length === 1 &&
codeDestination.memberReferences[0]!.memberIdentifier
) {
const typeName = codeDestination.memberReferences[0]!.memberIdentifier.identifier;
// if (
// !codeDestination.importPath &&
// !codeDestination.packageName &&
// codeDestination.memberReferences.length === 1 &&
// codeDestination.memberReferences[0]!.memberIdentifier
// ) {
// const typeName = codeDestination.memberReferences[0]!.memberIdentifier.identifier;
return {
kind: DocNodeKind.LinkTag,
text: typeName,
};
}
// return {
// kind: DocNodeKind.LinkTag,
// text: typeName,
// };
// }
const declarationReference = apiItem
.getAssociatedModel()
@@ -359,7 +360,7 @@ function itemTsDoc(item: DocNode, apiItem: ApiItem) {
text: linkText ?? foundItem?.displayName ?? resolved!.item.displayName,
uri: resolveItemURI(foundItem ?? resolved!.item),
resolvedPackage: {
packageName: resolved?.package ?? apiItem.getAssociatedPackage()?.displayName,
packageName: resolved?.package ?? apiItem.getAssociatedPackage()?.displayName.replace('@discordjs/', ''),
version: resolved?.package
? apiItem.getAssociatedPackage()?.dependencies?.[resolved.package] ?? null
: null,
@@ -413,13 +414,37 @@ function itemTsDoc(item: DocNode, apiItem: ApiItem) {
return {
kind: DocNodeKind.Comment,
deprecatedBlock: comment.deprecatedBlock ? createNode(comment.deprecatedBlock.content) : null,
summarySection: comment.summarySection ? createNode(comment.summarySection) : null,
remarksBlock: comment.remarksBlock ? createNode(comment.remarksBlock.content) : null,
defaultValueBlock: defaultValueBlock ? createNode(defaultValueBlock.content) : null,
returnsBlock: comment.returnsBlock ? createNode(comment.returnsBlock.content) : null,
exampleBlocks: exampleBlocks.map((block) => createNode(block.content)),
seeBlocks: comment.seeBlocks.map((block) => createNode(block.content)),
deprecatedBlock: comment.deprecatedBlock
? createNode(comment.deprecatedBlock.content)
.flat(1)
.filter((val: any) => val.kind !== DocNodeKind.SoftBreak)
: [],
summarySection: comment.summarySection
? createNode(comment.summarySection)
.flat(1)
.filter((val: any) => val.kind !== DocNodeKind.SoftBreak)
: [],
remarksBlock: comment.remarksBlock
? createNode(comment.remarksBlock.content)
.flat(1)
.filter((val: any) => val.kind !== DocNodeKind.SoftBreak)
: [],
defaultValueBlock: defaultValueBlock
? createNode(defaultValueBlock.content)
.flat(1)
.filter((val: any) => val.kind !== DocNodeKind.SoftBreak)
: [],
returnsBlock: comment.returnsBlock
? createNode(comment.returnsBlock.content)
.flat(1)
.filter((val: any) => val.kind !== DocNodeKind.SoftBreak)
: [],
exampleBlocks: exampleBlocks
.flatMap((block) => createNode(block.content).flat(1))
.filter((val: any) => val.kind !== DocNodeKind.SoftBreak),
seeBlocks: comment.seeBlocks
.flatMap((block) => createNode(block.content).flat(1))
.filter((val: any) => val.kind !== DocNodeKind.SoftBreak),
};
}
@@ -429,7 +454,9 @@ function itemTsDoc(item: DocNode, apiItem: ApiItem) {
};
return item.kind === DocNodeKind.Paragraph || item.kind === DocNodeKind.Section
? (item as DocNodeContainer).nodes.flatMap((node) => createNode(node))
? (item as DocNodeContainer).nodes
.flatMap((node) => createNode(node))
.filter((val: any) => val.kind !== DocNodeKind.SoftBreak)
: createNode(item);
}
@@ -440,6 +467,7 @@ function itemInfo(item: ApiDeclaredItem) {
const isProtected = ApiProtectedMixin.isBaseClassOf(item) && item.isProtected;
const isReadonly = ApiReadonlyMixin.isBaseClassOf(item) && item.isReadonly;
const isAbstract = ApiAbstractMixin.isBaseClassOf(item) && item.isAbstract;
const isOptional = ApiOptionalMixin.isBaseClassOf(item) && item.isOptional;
const isDeprecated = Boolean(item.tsdocComment?.deprecatedBlock);
const hasSummary = Boolean(item.tsdocComment?.summarySection);
@@ -450,12 +478,13 @@ function itemInfo(item: ApiDeclaredItem) {
sourceURL: item.sourceLocation.fileUrl,
sourceLine: item.sourceLocation.fileLine,
sourceExcerpt,
summary: hasSummary ? itemTsDoc(item.tsdocComment!.summarySection!, item) : null,
summary: hasSummary ? itemTsDoc(item.tsdocComment!, item) : null,
isStatic,
isProtected,
isReadonly,
isAbstract,
isDeprecated,
isOptional,
};
}
@@ -505,7 +534,7 @@ function itemTypeParameters(item: ApiTypeParameterListMixin) {
return item.typeParameters.map((typeParam) => ({
name: typeParam.name,
constraintsExcerpt: itemExcerptText(typeParam.constraintExcerpt, item.getAssociatedPackage()!),
optional: typeParam.isOptional,
isOptional: typeParam.isOptional,
defaultExcerpt: itemExcerptText(typeParam.defaultTypeExcerpt, item.getAssociatedPackage()!),
description: typeParam.tsdocTypeParamBlock ? itemTsDoc(typeParam.tsdocTypeParamBlock.content, item) : null,
}));
@@ -524,7 +553,7 @@ function itemParameters(item: ApiDocumentedItem & ApiParameterListMixin) {
return params.map((param) => ({
name: param.isRest ? `...${param.name}` : param.name,
typeExcerpt: itemExcerptText(param.parameterTypeExcerpt, item.getAssociatedPackage()!),
optional: param.isOptional,
isOptional: param.isOptional,
description: param.description ? itemTsDoc(param.description, item) : null,
}));
}
@@ -535,6 +564,7 @@ function itemConstructor(item: ApiConstructor) {
name: item.displayName,
sourceURL: item.sourceLocation.fileUrl,
sourceLine: item.sourceLocation.fileLine,
parametersString: parametersString(item),
summary: item.tsdocComment ? itemTsDoc(item.tsdocComment, item) : null,
parameters: itemParameters(item),
};
@@ -552,7 +582,7 @@ function itemEvent(item: ApiItemContainerMixin) {
return {
...itemInfo(event.item),
inheritedFrom: event.inherited?.displayName,
inheritedFrom: event.inherited ? resolveItemURI(event.inherited) : null,
summary: hasSummary ? itemTsDoc(event.item.tsdocComment!, event.item) : null,
parameters: itemParameters(event.item),
};
@@ -571,7 +601,7 @@ function itemProperty(item: ApiItemContainerMixin) {
return {
...itemInfo(property.item),
inheritedFrom: property.inherited?.displayName,
inheritedFrom: property.inherited ? resolveItemURI(property.inherited) : null,
typeExcerpt: itemExcerptText(property.item.propertyTypeExcerpt, property.item.getAssociatedPackage()!),
summary: hasSummary ? itemTsDoc(property.item.tsdocComment!, property.item) : null,
};
@@ -598,24 +628,40 @@ function isMethodLike(item: ApiItem): item is ApiMethod | ApiMethodSignature {
function itemMethod(item: ApiItemContainerMixin) {
const members = resolveMembers(item, isMethodLike);
return members.map((method) => {
const parent = method.item.parent as ApiDeclaredItem;
const firstOverload = method.item
.getMergedSiblings()
.find(
(meth): meth is ApiMethod => meth.kind === ApiItemKind.Method && (meth as ApiMethod).overloadIndex === 1,
)?.tsdocComment;
const hasSummary = Boolean(method.item.tsdocComment?.summarySection ?? firstOverload?.summarySection);
const methodItem = (method: {
inherited?: ApiItemContainerMixin | undefined;
item: ApiMethod | ApiMethodSignature;
}) => {
const hasSummary = Boolean(method.item.tsdocComment?.summarySection);
return {
...itemInfo(method.item),
overloadIndex: method.item.overloadIndex,
parametersString: parametersString(method.item),
returnTypeExcerpt: itemExcerptText(method.item.returnTypeExcerpt, method.item.getAssociatedPackage()!),
inheritedFrom: parent ? method.inherited?.displayName : null,
inheritedFrom: method.inherited ? resolveItemURI(method.inherited) : null,
typeParameters: itemTypeParameters(method.item),
parameters: itemParameters(method.item),
summary: hasSummary ? itemTsDoc(method.item.tsdocComment ?? firstOverload!, method.item) : null,
summary: hasSummary ? itemTsDoc(method.item.tsdocComment!, method.item) : null,
};
};
return members.map((method) => {
// const parent = method.item.parent as ApiDeclaredItem;
const hasOverload =
method.item
.getMergedSiblings()
.filter((sibling) => sibling.kind === ApiItemKind.Method || sibling.kind === ApiItemKind.MethodSignature)
.length > 1;
const overloads = method.item
.getMergedSiblings()
.filter((sibling) => sibling.kind === ApiItemKind.Method || sibling.kind === ApiItemKind.MethodSignature)
.map((sibling) => methodItem({ item: sibling as ApiMethod | ApiMethodSignature }));
return {
...methodItem(method),
overloads: hasOverload ? overloads : [],
};
});
}
@@ -709,10 +755,21 @@ function itemClass(item: ApiClass) {
}
function itemFunction(item: ApiFunction) {
const functionItem = (item: ApiFunction) => {
return {
...itemInfo(item),
overloadIndex: item.overloadIndex,
typeParameters: itemTypeParameters(item),
parameters: itemParameters(item),
};
};
const hasOverloads = item.getMergedSiblings().length > 1;
const overloads = item.getMergedSiblings().map((sibling) => functionItem(sibling as ApiFunction));
return {
...itemInfo(item),
typeParameters: itemTypeParameters(item),
parameters: itemParameters(item),
...functionItem(item),
overloads: hasOverloads ? overloads : [],
};
}
@@ -769,6 +826,7 @@ function itemUnion(item: ApiTypeAlias) {
function itemTypeAlias(item: ApiTypeAlias) {
return {
...itemInfo(item),
typeParameters: itemTypeParameters(item),
unionMembers: itemUnion(item).map((member) =>
itemExcerptText(new Excerpt(member, { startIndex: 0, endIndex: member.length }), item.getAssociatedPackage()!),
),
@@ -835,17 +893,33 @@ function memberKind(member: ApiItem | null) {
}
}
async function writeSplitDocsToFileSystem(member: Record<string, any>, tag = 'main') {
async function writeSplitDocsToFileSystem({
member,
packageName,
tag = 'main',
overrideName,
}: {
member: Record<string, any>;
overrideName?: string;
packageName: string;
tag: string;
}) {
const dir = 'split';
try {
(await stat(join(cwd(), 'docs', dir))).isDirectory();
(await stat(join(cwd(), 'docs', packageName, dir))).isDirectory();
} catch {
await mkdir(join(cwd(), 'docs', dir));
await mkdir(join(cwd(), 'docs', packageName, dir), { recursive: true });
}
await writeFile(
join(cwd(), 'docs', dir, `${tag}.${member.displayName}.${member.kind}.api.json`),
join(
cwd(),
'docs',
packageName,
dir,
`${tag}.${overrideName ?? `${member.displayName.toLowerCase()}.${member.kind.toLowerCase()}`}.api.json`,
),
JSON.stringify(member),
);
}
@@ -868,14 +942,33 @@ export async function generateSplitDocumentation({
continue;
}
const members = entry.members.map((item) => ({
kind: item.kind,
name: item.displayName,
href: resolveItemURI(item),
overloadIndex: 'overloadIndex' in item ? (item.overloadIndex as number) : undefined,
}));
await writeSplitDocsToFileSystem({
member: pkg.dependencies ?? [],
packageName: pkgName,
tag: version,
overrideName: 'dependencies',
});
// await writeSplitDocsToFileSystem(members, version);
const members = entry.members
.filter((item) => {
if (item.kind !== 'Function') {
return true;
}
return (item as ApiFunction).overloadIndex === 1;
})
.map((item) => ({
kind: item.kind,
name: item.displayName,
href: resolveItemURI(item),
}));
await writeSplitDocsToFileSystem({
member: members,
packageName: pkgName,
tag: version,
overrideName: 'sitemap',
});
for (const member of members) {
const item = `${member.name}:${member.kind}`;
@@ -895,7 +988,7 @@ export async function generateSplitDocumentation({
continue;
}
await writeSplitDocsToFileSystem(returnValue, version);
await writeSplitDocsToFileSystem({ member: returnValue, packageName: pkgName, tag: version });
}
}
}

View File

@@ -59,35 +59,35 @@
"devDependencies": {
"@favware/cliff-jumper": "^2.2.3",
"@react-icons/all-files": "^4.1.0",
"@storybook/addon-essentials": "^7.6.12",
"@storybook/addon-interactions": "^7.6.12",
"@storybook/addon-links": "^7.6.12",
"@storybook/addon-essentials": "^7.6.17",
"@storybook/addon-interactions": "^7.6.17",
"@storybook/addon-links": "^7.6.17",
"@storybook/addon-styling": "^1.3.7",
"@storybook/blocks": "^7.6.12",
"@storybook/react": "^7.6.12",
"@storybook/react-vite": "^7.6.12",
"@storybook/blocks": "^7.6.17",
"@storybook/react": "^7.6.17",
"@storybook/react-vite": "^7.6.17",
"@storybook/testing-library": "^0.2.2",
"@types/node": "18.18.8",
"@types/react": "^18.2.54",
"@types/react-dom": "^18.2.18",
"@types/react": "^18.2.60",
"@types/react-dom": "^18.2.19",
"@unocss/eslint-plugin": "^0.58.5",
"@unocss/reset": "^0.58.5",
"@vitejs/plugin-react": "^4.2.1",
"@vitest/coverage-v8": "^1.2.2",
"chromatic": "^10.7.1",
"@vitest/coverage-v8": "^1.3.1",
"chromatic": "^11.0.0",
"cross-env": "^7.0.3",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"prettier": "^3.2.5",
"prop-types": "^15.8.1",
"storybook": "^7.6.12",
"turbo": "^1.12.2",
"storybook": "^7.6.17",
"turbo": "^1.12.4",
"typescript": "^5.3.3",
"unocss": "^0.58.5",
"vite": "^5.0.12",
"vite-plugin-dts": "^3.7.2",
"vitest": "^1.2.2"
"vite": "^5.1.4",
"vite-plugin-dts": "^3.7.3",
"vitest": "^1.3.1"
},
"engines": {
"node": ">=18"

View File

@@ -65,18 +65,18 @@
"@discordjs/scripts": "workspace:^",
"@favware/cliff-jumper": "^2.2.3",
"@types/node": "16.18.60",
"@vitest/coverage-v8": "^1.2.2",
"@vitest/coverage-v8": "^1.3.1",
"cross-env": "^7.0.3",
"esbuild-plugin-version-injector": "^1.2.1",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"prettier": "^3.2.5",
"tsd": "^0.30.4",
"tsup": "^8.0.1",
"turbo": "^1.12.2",
"tsd": "^0.30.7",
"tsup": "^8.0.2",
"turbo": "^1.12.4",
"typescript": "^5.3.3",
"vitest": "^1.2.2"
"vitest": "^1.3.1"
},
"engines": {
"node": ">=16.11.0"

View File

@@ -79,15 +79,15 @@
"@types/node": "16.18.60",
"cross-env": "^7.0.3",
"esbuild-plugin-version-injector": "^1.2.1",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"jest": "^29.7.0",
"jest-websocket-mock": "^2.5.0",
"mock-socket": "^9.3.1",
"prettier": "^3.2.5",
"tsup": "^8.0.1",
"turbo": "^1.12.2",
"tsup": "^8.0.2",
"turbo": "^1.12.4",
"tweetnacl": "^1.0.3",
"typescript": "^5.3.3"
},

View File

@@ -87,20 +87,20 @@
"@discordjs/scripts": "workspace:^",
"@favware/cliff-jumper": "^2.2.3",
"@types/node": "18.17.9",
"@vitest/coverage-v8": "^1.2.2",
"@vitest/coverage-v8": "^1.3.1",
"cross-env": "^7.0.3",
"esbuild-plugin-version-injector": "^1.2.1",
"eslint": "^8.56.0",
"eslint-config-neon": "^0.1.58",
"eslint": "^8.57.0",
"eslint-config-neon": "^0.1.59",
"eslint-formatter-pretty": "^6.0.1",
"mock-socket": "^9.3.1",
"prettier": "^3.2.5",
"tsd": "^0.30.4",
"tsup": "^8.0.1",
"turbo": "^1.12.2",
"tsd": "^0.30.7",
"tsup": "^8.0.2",
"turbo": "^1.12.4",
"typescript": "^5.3.3",
"undici": "6.6.1",
"vitest": "^1.2.2",
"undici": "6.6.2",
"vitest": "^1.3.1",
"zlib-sync": "^0.1.9"
},
"engines": {