refactor: typescript projects & docs generation (#2804)
This commit is contained in:
Родитель
0695f34d58
Коммит
412327a252
|
@ -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"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
|
@ -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 }}
|
||||
|
|
|
@ -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
|
|
@ -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
|
29
package.json
29
package.json
|
@ -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);
|
||||
}
|
||||
})();
|
|
@ -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);
|
|
@ -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);
|
|
@ -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"]
|
||||
}
|
|
@ -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"]
|
||||
}
|
||||
}
|
59
yarn.lock
59
yarn.lock
|
@ -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"
|
||||
|
|
Загрузка…
Ссылка в новой задаче