refactor: typescript projects & docs generation (#2804)

This commit is contained in:
Calvin 2022-05-03 11:29:31 -06:00 коммит произвёл GitHub
Родитель 0695f34d58
Коммит 412327a252
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
24 изменённых файлов: 299 добавлений и 190 удалений

Просмотреть файл

@ -39,7 +39,9 @@
"files": ["packages/*/*/test/**/*_spec*.ts"],
"rules": {
"global-require": "off",
"import/no-dynamic-require": "off"
"import/no-dynamic-require": "off",
"node/no-unpublished-import": "off",
"node/no-unpublished-require": "off"
}
},
{

26
.github/workflows/ci.yml поставляемый
Просмотреть файл

@ -115,6 +115,8 @@ jobs:
npm install -g bolt@$BOLT_VERSION
- name: Install
run: bolt
- name: Build
run: bolt build
- name: Test
run: bolt coverage:slow
env:
@ -154,27 +156,3 @@ jobs:
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# docs:
# if: github.event_name == 'push' && github.ref == 'refs/heads/master'
# needs: [fast-tests, slow-tests]
# runs-on: [ubuntu-latest]
# steps:
# - uses: actions/checkout@v1
# - name: Use Node.js 12.x
# uses: actions/setup-node@v2.5.1
# with:
# node-version: 12.x
# cache: yarn
# - name: Install bolt
# shell: bash
# run: |
# case "$(uname -s)" in
# Windows*|CYGWIN*|MINGW*|MSYS*) BOLT_VERSION=0.21.2 ;;
# *) BOLT_VERSION=latest ;;
# esac
# npm install -g bolt@$BOLT_VERSION
# - name: Deploy docs
# run: ci/docs.sh
# env:
# NOW_TOKEN: ${{ secrets.NOW_TOKEN }}

45
.github/workflows/gh-pages.yml поставляемый Normal file
Просмотреть файл

@ -0,0 +1,45 @@
name: GitHub Pages
on:
push:
branches:
- master
pull_request:
jobs:
deploy:
runs-on: ubuntu-20.04
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
steps:
- uses: actions/checkout@v3
with:
submodules: true
fetch-depth: 0
- name: Use Node.js LTS
uses: actions/setup-node@v2.5.1
with:
node-version: 16.x
cache: yarn
- name: Install Bolt CLI
shell: bash
run: |
case "$(uname -s)" in
Windows*|CYGWIN*|MINGW*|MSYS*) BOLT_VERSION=0.21.2 ;;
*) BOLT_VERSION=latest ;;
esac
npm install -g bolt@$BOLT_VERSION
- name: Build
shell: bash
run: |
bolt
bolt docs
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docs

14
.gitignore поставляемый
Просмотреть файл

@ -7,15 +7,11 @@ docs
doc
node_modules
yarn-error.log
**/.npmignore
!/.npmignore
**/tsconfig.json
!/tsconfig.json
packages/**/.npmignore
packages/**/tsconfig.json
!packages/template/*/tmpl/tsconfig.json
**/tslint.json
!/tslint.json
**/yarn.lock
!/yarn.lock
packages/**/tslint.json
packages/**/yarn.lock
packages/*/*/index.ts
packages/.old
packages/utils/types/index.d.ts
@ -25,4 +21,6 @@ packages/plugin/**/README.md
packages/api/cli/README.md
!packages/**/base/README.md
!/README.md
packages/**/tsconfig.tsbuildinfo
packages/**/.swc
.webpack

Просмотреть файл

@ -2,8 +2,7 @@ const path = require('path');
module.exports = {
extension: ['ts'],
loader: 'ts-node/esm',
require: [path.join(__dirname, 'tools', 'test-setup.ts')],
require: ['ts-node/register', path.join(__dirname, 'tools', 'test-setup.ts')],
timeout: 800000,
recursive: true,
};

Просмотреть файл

@ -1,5 +0,0 @@
{
"name": "forge-docs",
"type": "static",
"alias": ["js.electronforge.io"]
}

Просмотреть файл

@ -1,7 +0,0 @@
#!/bin/bash -e
# Pinned due to https://github.com/zeit/now/issues/2941
yarn add --dev now@16.1.2
bolt
bolt build
yarn docs:deploy:ci

Просмотреть файл

@ -18,22 +18,19 @@
]
},
"scripts": {
"clean": "rimraf dist && bolt ws exec -- rimraf dist",
"prebuild": "bolt clean && ts-node tools/link-ts.ts && ts-node tools/copy-shared-types.ts && tsc --project ./tsconfig.packages.json --emitDeclarationOnly && ts-node tools/copy-types.ts",
"build": "yarn build:quick",
"build:quick": "bolt ws exec -- swc src --out-dir dist --quiet --extensions \".ts\" --config-file ../../../.swcrc",
"clean": "rimraf dist && bolt ws exec -- rimraf dist tsconfig.tsbuildinfo",
"build": "bolt ws exec -- tsc --emitDeclarationOnly && bolt ws exec -- swc src --out-dir dist --quiet --extensions \".ts\" --config-file ../../../.swcrc",
"build:full": "bolt ws exec -- tsc -b",
"postbuild": "ts-node tools/test-dist",
"coverage:fast": "xvfb-maybe cross-env INTEGRATION_TESTS=0 TS_NODE_FILES=true nyc mocha './tools/test-globber.ts' && nyc report --reporter=text-lcov > coverage.lcov",
"coverage:slow": "xvfb-maybe cross-env TS_NODE_FILES=true nyc mocha './tools/test-globber.ts' --integration && nyc report --reporter=text-lcov > coverage.lcov",
"docs": "bolt docs:generate && bolt docs:position",
"docs:generate": "bolt ws exec -- node_modules/.bin/typedoc --out doc --excludeExternals --ignoreCompilerErrors --mode file --excludePrivate --excludeProtected --hideGenerator",
"docs:position": "ts-node tools/position-docs.ts",
"docs:deploy": "ts-node tools/sync-readmes.ts && bolt docs && ts-node tools/copy-now.ts && cd docs && now && now alias",
"docs:deploy:ci": "ts-node tools/sync-readmes.ts && bolt docs && ts-node tools/copy-now.ts && cd docs && now --token $NOW_TOKEN && now alias --token $NOW_TOKEN",
"coverage:fast": "xvfb-maybe cross-env INTEGRATION_TESTS=0 TS_NODE_PROJECT='./tsconfig.test.json' TS_NODE_FILES=1 nyc mocha './tools/test-globber.ts' && nyc report --reporter=text-lcov > coverage.lcov",
"coverage:slow": "xvfb-maybe cross-env TS_NODE_PROJECT='./tsconfig.test.json' TS_NODE_FILES=1 nyc mocha './tools/test-globber.ts' --integration && nyc report --reporter=text-lcov > coverage.lcov",
"docs": "bolt build:full && bolt docs:generate",
"docs:generate": "node --max-old-space-size=8192 -r ts-node/register ./tools/gen-docs.ts",
"docs:deploy:build": "ts-node tools/sync-readmes.ts && bolt docs",
"lint": "prettier --check . && eslint .",
"test": "xvfb-maybe cross-env TS_NODE_FILES=true mocha './tools/test-globber.ts'",
"test:fast": "xvfb-maybe cross-env TEST_FAST_ONLY=1 TS_NODE_FILES=true mocha './tools/test-globber.ts'",
"postinstall": "rimraf node_modules/.bin/*.ps1 && ts-node tools/link-ts.ts"
"test": "xvfb-maybe cross-env TS_NODE_PROJECT='./tsconfig.test.json' TS_NODE_FILES=1 mocha './tools/test-globber.ts'",
"test:fast": "xvfb-maybe cross-env TS_NODE_PROJECT='./tsconfig.test.json' TEST_FAST_ONLY=1 TS_NODE_FILES=1 mocha './tools/test-globber.ts'",
"postinstall": "rimraf node_modules/.bin/*.ps1 && ts-node ./tools/gen-tsconfigs.ts && ts-node ./tools/gen-ts-glue.ts"
},
"dependencies": {
"@aws-sdk/abort-controller": "^3.29.0",
@ -141,8 +138,8 @@
"sinon": "^13.0.1",
"sinon-chai": "^3.6.0",
"ts-node": "^10.0.0",
"typedoc": "^0.22.0",
"typescript": "^4.5.4",
"typedoc": "^0.22.15",
"typescript": "^4.6.3",
"xvfb-maybe": "^0.2.1"
},
"optionalDependencies": {

Просмотреть файл

@ -1 +0,0 @@
../../../typings

Просмотреть файл

@ -27,7 +27,7 @@ export default abstract class InstallerDarwin extends InstallerBase {
if (writeAccess) {
await promisify(exec)(moveCommand);
} else {
await promisify(sudo.exec)(moveCommand, {
await (promisify(sudo.exec) as (cmd: string, opts: unknown) => Promise<unknown>)(moveCommand, {
name: 'Electron Forge',
});
}

Просмотреть файл

@ -6,7 +6,7 @@
"author": "Samuel Attard",
"license": "MIT",
"main": "dist/index.js",
"typings": "index.d.ts",
"typings": "dist/index.d.ts",
"dependencies": {
"@electron-forge/async-ora": "6.0.0-beta.63",
"electron-packager": "^15.4.0",

Просмотреть файл

@ -1,9 +0,0 @@
import fs from 'fs-extra';
import path from 'path';
const BASE_DIR = path.resolve(__dirname, '..');
const DOCS_DIR = path.resolve(BASE_DIR, 'docs');
(async () => {
await fs.copy(path.resolve(BASE_DIR, '.now.json'), path.resolve(DOCS_DIR, 'now.json'));
})();

Просмотреть файл

@ -1,10 +0,0 @@
import fs from 'fs-extra';
import path from 'path';
const BASE_DIR = path.resolve(__dirname, '..');
const SHARED_TYPES_DIR = path.resolve(BASE_DIR, 'packages', 'utils', 'types');
(async () => {
const content = await fs.readFile(path.resolve(SHARED_TYPES_DIR, 'src', 'index.ts'), 'utf8');
await fs.writeFile(path.resolve(SHARED_TYPES_DIR, 'index.d.ts'), content);
})();

Просмотреть файл

@ -1,22 +0,0 @@
import * as fs from 'fs-extra';
import * as path from 'path';
const BASE_DIR = path.resolve(__dirname, '..');
const DIST_DIR = path.resolve(BASE_DIR, 'dist');
const PACKAGES_DIR = path.resolve(BASE_DIR, 'packages');
(async () => {
const dirsToLink = [];
for (const subDir of await fs.readdir(PACKAGES_DIR)) {
for (const packageDir of await fs.readdir(path.resolve(PACKAGES_DIR, subDir))) {
dirsToLink.push(path.join(subDir, packageDir));
}
}
for (const dir of dirsToLink) {
const targetDir = path.resolve(BASE_DIR, 'packages', dir, 'dist');
await fs.mkdirp(targetDir);
await fs.copy(path.resolve(DIST_DIR, dir, 'src'), targetDir);
}
})();

24
tools/gen-docs.ts Normal file
Просмотреть файл

@ -0,0 +1,24 @@
import * as path from 'path';
import { getPackageInfo } from './utils';
import * as typedoc from 'typedoc';
(async () => {
const packages = await getPackageInfo();
const typedocApp = new typedoc.Application();
typedocApp.bootstrap({
entryPointStrategy: 'packages',
entryPoints: packages.map((pkg) => pkg.path),
excludeExternals: true,
excludePrivate: true,
excludeProtected: true,
hideGenerator: true,
});
const projReflection = typedocApp.convert();
if (projReflection === undefined) {
throw new Error('Failed to find package sources');
}
await typedocApp.generateDocs(projReflection, path.resolve(__dirname, '..', 'docs'));
})().catch(console.error);

68
tools/gen-ts-glue.ts Normal file
Просмотреть файл

@ -0,0 +1,68 @@
/**
* Mixing glue with lint is probably something you never want to do in real
* life, but in this project it helps the linter do its job. And sometimes the
* test suite too.
*
* This script creates `index.ts` files in each package directory that simply
* re-export the exports of the real main file. This is necessary for when all
* the packages are run under a common context (instead of each individually).
* This is because the symlinks bolt makes for each package are descendants of
* the context node is running in and therefore aren't treated as modules, only
* as directories. Therefore package.json isn't considered and we need an index
* file (like index.ts) to redirect to the right file.
*/
import { promises as fs } from 'fs';
import path from 'path';
import { getPackageInfo } from './utils';
// NOTE: this interface only defines the fields in the package.json that are
// used in this script
interface PartialPackageManifest {
main?: string;
}
/**
* A heuristic to convert the `main` value from the package.json from its output
* location to the source location (e.g. dist/ to src/ & .js to .ts).
*/
function convertMainToSrc(main: string): string {
return main.replace(/^dist\//, 'src/').replace(/\.js$/, '.ts');
}
(async () => {
const pkgs = await getPackageInfo();
// Run each package in parallel
await Promise.all(
pkgs.map(async (pkg) => {
// Extract the `main` field from the package.json
const { main } = pkg.manifest as PartialPackageManifest;
// Skip packages that have no main (e.g. the cli as of writing)
if (main === undefined) {
return;
}
// Read the main file
const srcMain = convertMainToSrc(main);
const srcMainFull = path.resolve(pkg.path, srcMain);
const srcMainContents = await fs.readFile(srcMainFull, { encoding: 'utf8' });
// Detect if the package has a default export
const hasDefault = /export\s+default/i.test(srcMainContents);
// Write the facade entry-point file
const importTarget = './' + srcMain.replace(/\.ts$/, '');
const facadeFilePath = path.resolve(pkg.path, 'index.ts');
let facadeFileContents =
'// ⚠️ AUTOGENERATED ⚠️ AUTOGENERATED ⚠️ AUTOGENERATED ⚠️\n' +
'// This file was automatically generated by `tools/gen-ts-glue.ts`. Do not modify directly if you want to keep your changes.\n' +
`export * from "${importTarget}";\n`;
if (hasDefault) {
facadeFileContents += `import defaultExport from "${importTarget}";\n` + `export default defaultExport;\n`;
}
await fs.writeFile(facadeFilePath, facadeFileContents);
})
);
})().catch(console.error);

73
tools/gen-tsconfigs.ts Normal file
Просмотреть файл

@ -0,0 +1,73 @@
import { promises as fs } from 'fs';
import * as path from 'path';
import { getPackageInfo } from './utils';
const BASE_TS_CONFIG = {
'//': '⚠️ AUTOGENERATED ⚠️ This file was automatically generated by tools/gen-tsconfigs.ts, do not edit manually.',
compilerOptions: {
module: 'commonjs',
target: 'es2019',
outDir: 'dist',
lib: ['dom', 'es2019'],
sourceMap: true,
rootDir: 'src',
experimentalDecorators: true,
strict: true,
esModuleInterop: true,
declaration: true,
composite: true,
declarationMap: true,
},
exclude: ['node_modules', 'dist', 'test', 'index.ts', 'tmpl'],
};
/**
* Filters out non-unique items in an array.
*/
function filterDupes<T>(arr: readonly T[]): T[] {
return Array.from(new Set(arr));
}
(async () => {
const packages = await getPackageInfo();
// Do each package in parallel
await Promise.all(
packages.map((pkg) => {
// Carve out a subset of types on the package manifest object
const pkgManifest = pkg.manifest as {
dependencies?: Record<string, string>;
devDependencies?: Record<string, string>;
};
// Figure out which other local packages this package references
const pkgDeps = [pkgManifest.dependencies, pkgManifest.devDependencies].flatMap((deps) => (deps === undefined ? [] : Object.keys(deps)));
const refs = filterDupes(
pkgDeps.flatMap((depName) => {
const depPkg = packages.find((maybeDepPkg) => maybeDepPkg.name === depName);
return depPkg === undefined ? [] : [depPkg];
})
);
// Map each package this package references to a typescript project reference
const tsRefs = refs.map((depPkg) => ({
path: path.relative(pkg.path, depPkg.path),
}));
// Create the typescript config object
const tsConfig = Object.assign({}, BASE_TS_CONFIG, {
references: tsRefs,
});
Object.assign(tsConfig.compilerOptions, {
typeRoots: [
path.relative(pkg.path, path.resolve(__dirname, '..', 'typings')),
path.relative(pkg.path, path.resolve(__dirname, '..', 'node_modules', '@types')),
],
});
// Write the typescript config to the package dir
const tsConfigPath = path.join(pkg.path, 'tsconfig.json');
return fs.writeFile(tsConfigPath, JSON.stringify(tsConfig, undefined, 2));
})
);
})().catch(console.error);

Просмотреть файл

@ -1,39 +0,0 @@
import * as fs from 'fs-extra';
import * as path from 'path';
const BASE_DIR = path.resolve(__dirname, '..');
const PACKAGES_DIR = path.resolve(BASE_DIR, 'packages');
async function copyTSConfig(packageDir: string): Promise<void> {
const relativeBaseDir = path.relative(packageDir, BASE_DIR);
const tsconfig = await fs.readJson(path.resolve(BASE_DIR, 'tsconfig.json'));
tsconfig.compilerOptions.typeRoots = [path.join(relativeBaseDir, 'node_modules', '@types'), path.join(relativeBaseDir, 'typings')];
await fs.writeJson(path.resolve(packageDir, 'tsconfig.json'), tsconfig, { spaces: 2 });
}
(async () => {
const dirsToLink = [];
for (const subDir of await fs.readdir(PACKAGES_DIR)) {
for (const packageDir of await fs.readdir(path.resolve(PACKAGES_DIR, subDir))) {
dirsToLink.push(path.resolve(PACKAGES_DIR, subDir, packageDir));
}
}
for (const dir of dirsToLink) {
await copyTSConfig(dir);
await fs.copy(path.resolve(BASE_DIR, '.npmignore'), path.resolve(dir, '.npmignore'));
const pj = await fs.readJson(path.resolve(dir, 'package.json'));
if (pj.main) {
const mainFile = pj.main.replace('dist', 'src').replace('.js', '.ts');
const importableFile = mainFile.replace('.ts', '');
const hasDefault = (await fs.readFile(path.resolve(dir, mainFile), 'utf8')).includes('export default');
if (hasDefault) {
await fs.writeFile(path.resolve(dir, 'index.ts'), `import d from './${importableFile}';\nexport default d;\nexport * from './${importableFile}';\n`);
} else {
await fs.writeFile(path.resolve(dir, 'index.ts'), `export * from './${importableFile}';\n`);
}
}
}
})();

Просмотреть файл

@ -7,6 +7,7 @@ const PACKAGES_DIR = path.resolve(BASE_DIR, 'packages');
export interface Package {
path: string;
name: string;
manifest: object; // the parsed package.json
}
export const getPackageInfo = async (): Promise<Package[]> => {
@ -15,9 +16,11 @@ export const getPackageInfo = async (): Promise<Package[]> => {
for (const subDir of await fs.readdir(PACKAGES_DIR)) {
for (const packageDir of await fs.readdir(path.resolve(PACKAGES_DIR, subDir))) {
const packagePath = path.resolve(PACKAGES_DIR, subDir, packageDir);
const pkg = await fs.readJson(path.resolve(packagePath, 'package.json'));
packages.push({
path: packagePath,
name: (await fs.readJson(path.resolve(packagePath, 'package.json'))).name,
name: pkg.name,
manifest: pkg,
});
}
}
@ -31,9 +34,11 @@ export const getPackageInfoSync = (): Package[] => {
for (const subDir of fs.readdirSync(PACKAGES_DIR)) {
for (const packageDir of fs.readdirSync(path.resolve(PACKAGES_DIR, subDir))) {
const packagePath = path.resolve(PACKAGES_DIR, subDir, packageDir);
const pkg = fs.readJsonSync(path.resolve(packagePath, 'package.json'));
packages.push({
path: packagePath,
name: fs.readJsonSync(path.resolve(packagePath, 'package.json')).name,
name: pkg.name,
manifest: pkg,
});
}
}

Просмотреть файл

@ -1,15 +0,0 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2019",
"outDir": "dist",
"lib": ["dom", "es2019"],
"sourceMap": true,
"rootDir": ".",
"experimentalDecorators": true,
"strict": true,
"esModuleInterop": true,
"declaration": true
},
"exclude": ["node_modules", "dist", "test", "index.ts"]
}

Просмотреть файл

@ -1,7 +0,0 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"rootDir": "packages"
},
"exclude": ["dist", "node_modules", "ci", "tools", "**/dist", "**/node_modules", "**/test", "**/tmpl"]
}

16
tsconfig.test.json Normal file
Просмотреть файл

@ -0,0 +1,16 @@
{
"//": "⚠️ NOTE: this file is only used for tests, individual packages have their own tsconfig.json files generated by `tools/gen-tsconfigs.ts`",
"compilerOptions": {
"module": "commonjs",
"target": "es2019",
"outDir": "dist",
"lib": ["dom", "es2019"],
"sourceMap": true,
"experimentalDecorators": true,
"strict": true,
"esModuleInterop": true,
"declaration": true,
"declarationMap": true,
"typeRoots": ["./typings", "./node_modules/@types"]
}
}

Просмотреть файл

Просмотреть файл

@ -2685,6 +2685,13 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
brace-expansion@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
dependencies:
balanced-match "^1.0.0"
braces@^3.0.1, braces@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
@ -6443,10 +6450,10 @@ map-obj@^1.0.0, map-obj@^1.0.1:
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
marked@^4.0.10:
version "4.0.12"
resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.12.tgz#2262a4e6fd1afd2f13557726238b69a48b982f7d"
integrity sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==
marked@^4.0.12:
version "4.0.14"
resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.14.tgz#7a3a5fa5c80580bac78c1ed2e3b84d7bd6fc3870"
integrity sha512-HL5sSPE/LP6U9qKgngIIPTthuxC0jrfxpYMZ3LdGDD3vTnLs59m2Z7r6+LNDR3ToqEQdkKd6YaaEfJhodJmijQ==
matcher@^3.0.0:
version "3.0.0"
@ -6583,7 +6590,19 @@ minimatch@^3.0.2, minimatch@^3.0.4:
dependencies:
brace-expansion "^1.1.7"
minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
minimatch@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b"
integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==
dependencies:
brace-expansion "^2.0.1"
minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
minimist@^1.2.6:
version "1.2.6"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
@ -8266,10 +8285,10 @@ shebang-regex@^3.0.0:
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
shiki@^0.10.0:
version "0.10.0"
resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.10.0.tgz#85f21ecfa95b377ff64db6c71442c22c220e9540"
integrity sha512-iczxaIYeBFHTFrQPb9DVy2SKgYxC4Wo7Iucm7C17cCh2Ge/refnvHscUOxM85u57MfLoNOtjoEFUWt9gBexblA==
shiki@^0.10.1:
version "0.10.1"
resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.10.1.tgz#6f9a16205a823b56c072d0f1a0bcd0f2646bef14"
integrity sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==
dependencies:
jsonc-parser "^3.0.0"
vscode-oniguruma "^1.6.1"
@ -9055,21 +9074,21 @@ typedarray-to-buffer@^3.1.5:
dependencies:
is-typedarray "^1.0.0"
typedoc@^0.22.0:
version "0.22.11"
resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.22.11.tgz#a3d7f4577eef9fc82dd2e8f4e2915e69f884c250"
integrity sha512-pVr3hh6dkS3lPPaZz1fNpvcrqLdtEvXmXayN55czlamSgvEjh+57GUqfhAI1Xsuu/hNHUT1KNSx8LH2wBP/7SA==
typedoc@^0.22.15:
version "0.22.15"
resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.22.15.tgz#c6ad7ed9d017dc2c3a06c9189cb392bd8e2d8c3f"
integrity sha512-CMd1lrqQbFvbx6S9G6fL4HKp3GoIuhujJReWqlIvSb2T26vGai+8Os3Mde7Pn832pXYemd9BMuuYWhFpL5st0Q==
dependencies:
glob "^7.2.0"
lunr "^2.3.9"
marked "^4.0.10"
minimatch "^3.0.4"
shiki "^0.10.0"
marked "^4.0.12"
minimatch "^5.0.1"
shiki "^0.10.1"
typescript@^4.5.4:
version "4.5.5"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3"
integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==
typescript@^4.6.3:
version "4.6.3"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c"
integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==
typescript@~4.2.4:
version "4.2.4"