diff --git a/.eslintrc.json b/.eslintrc.json index 6a19dc3d..8d46978f 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -36,6 +36,7 @@ ], "rules": { "no-use-before-define": "off", + "no-useless-constructor": "off", "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-use-before-define": "warn", "prettier/prettier": "error", diff --git a/docker/package.json b/docker/package.json index 43895911..df63fe5c 100644 --- a/docker/package.json +++ b/docker/package.json @@ -21,11 +21,11 @@ "dependencies": { "@rediagram/aws": "^0.4.2", "@rediagram/cli": "^0.1.5", - "@ts-graphviz/react": "^0.7.0", + "@ts-graphviz/react": "^0.9.1", "react": "^16.13.1", "react-dom": "^16.13.1", "rediagram": "^0.2.5", - "ts-graphviz": "^0.13.1" + "ts-graphviz": "^0.16.0" }, "devDependencies": { "@types/react": "^16.9.41", diff --git a/examples/gallery/img/AppEngineAndCloudEndpoints.rediagram.png b/examples/gallery/img/AppEngineAndCloudEndpoints.rediagram.png index 0e9827a6..8f8d0d32 100644 Binary files a/examples/gallery/img/AppEngineAndCloudEndpoints.rediagram.png and b/examples/gallery/img/AppEngineAndCloudEndpoints.rediagram.png differ diff --git a/examples/gallery/img/ChefAutomateArchitectureOnAWS.rediagram.png b/examples/gallery/img/ChefAutomateArchitectureOnAWS.rediagram.png index c913271b..43637e5d 100644 Binary files a/examples/gallery/img/ChefAutomateArchitectureOnAWS.rediagram.png and b/examples/gallery/img/ChefAutomateArchitectureOnAWS.rediagram.png differ diff --git a/examples/gallery/img/ContentManagement.rediagram.png b/examples/gallery/img/ContentManagement.rediagram.png index fd7e0d20..c94ac04e 100644 Binary files a/examples/gallery/img/ContentManagement.rediagram.png and b/examples/gallery/img/ContentManagement.rediagram.png differ diff --git a/examples/gallery/img/GitToS3WebHooks.rediagram.png b/examples/gallery/img/GitToS3WebHooks.rediagram.png index 00d4fd85..389e2dfc 100644 Binary files a/examples/gallery/img/GitToS3WebHooks.rediagram.png and b/examples/gallery/img/GitToS3WebHooks.rediagram.png differ diff --git a/examples/gallery/img/HighPerformanceComputing.rediagram.png b/examples/gallery/img/HighPerformanceComputing.rediagram.png index ee343fde..ddb33725 100644 Binary files a/examples/gallery/img/HighPerformanceComputing.rediagram.png and b/examples/gallery/img/HighPerformanceComputing.rediagram.png differ diff --git a/examples/gallery/img/MyInfra.rediagram.png b/examples/gallery/img/MyInfra.rediagram.png index 0b4a7acf..52410365 100644 Binary files a/examples/gallery/img/MyInfra.rediagram.png and b/examples/gallery/img/MyInfra.rediagram.png differ diff --git a/examples/gallery/img/firebase.rediagram.png b/examples/gallery/img/firebase.rediagram.png index d02c0c94..3e4c56c4 100644 Binary files a/examples/gallery/img/firebase.rediagram.png and b/examples/gallery/img/firebase.rediagram.png differ diff --git a/examples/gallery/package.json b/examples/gallery/package.json index 3ced450c..8e4af4d1 100644 --- a/examples/gallery/package.json +++ b/examples/gallery/package.json @@ -1,9 +1,9 @@ { "name": "@rediagram/gallery", "version": "0.1.10", - "main": "index.js", "license": "MIT", "private": true, + "type": "module", "scripts": { "start": "rediagramc" }, @@ -12,12 +12,12 @@ "@rediagram/cli": "^0.1.5", "@rediagram/firebase": "^0.0.1", "@rediagram/gcp": "^0.3.1", - "@ts-graphviz/react": "^0.7.0", + "@ts-graphviz/react": "^0.9.1", "prop-types": "^15.7.2", "react": "^16.13.1", "react-dom": "^16.13.1", "rediagram": "^0.2.5", - "ts-graphviz": "^0.13.1" + "ts-graphviz": "^0.16.0" }, "devDependencies": { "@types/node": "^16.4.5", diff --git a/package.json b/package.json index ae5e8723..a512b3ba 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,6 @@ { "name": "rediagram", "version": "0.0.0", - "main": "index.js", "license": "MIT", "private": true, "workspaces": [ @@ -14,7 +13,7 @@ "lerna": "lerna", "test": "jest", "prebuild": "lerna run --parallel clean", - "build": "yarn workspace @rediagram/common build && yarn workspace create-rediagram-project build && yarn workspace @rediagram/cdk build && yarn workspace @rediagram/cli build && yarn workspace rediagram build && yarn workspace @rediagram/aws build && yarn workspace @rediagram/gcp build && yarn workspace @rediagram/firebase build", + "build": "yarn workspace @rediagram/common build && yarn workspace create-rediagram-project build && yarn workspace @rediagram/cdk build && yarn workspace rediagram build && yarn workspace @rediagram/cli build && yarn workspace @rediagram/aws build && yarn workspace @rediagram/gcp build && yarn workspace @rediagram/firebase build", "prewatch": "yarn build", "watch": "lerna run --parallel watch", "rediagram": "yarn workspace @rediagram/cli start", diff --git a/packages/aws/package.json b/packages/aws/package.json index 90e221b0..1ad19224 100644 --- a/packages/aws/package.json +++ b/packages/aws/package.json @@ -1,7 +1,10 @@ { "name": "@rediagram/aws", "version": "0.4.2", - "main": "lib/index.js", + "type": "module", + "exports": { + "import": "./lib/index.js" + }, "types": "lib/index.d.ts", "license": "MIT", "description": "Components for drawing AWS diagrams.", @@ -31,12 +34,12 @@ "@rediagram/cdk": "^0.3.1" }, "peerDependencies": { - "@ts-graphviz/react": "^0.7.0", + "@ts-graphviz/react": "^0.9.1", "prop-types": "^15.7.2", "react": "^16.13.1", "react-dom": "^16.13.1", "rediagram": "*", - "ts-graphviz": "^0.13.1" + "ts-graphviz": "^0.16.0" }, "devDependencies": { "@types/node": "^16.4.5", diff --git a/packages/aws/rollup.config.js b/packages/aws/rollup.config.js index c1b45cd8..e041aa3f 100644 --- a/packages/aws/rollup.config.js +++ b/packages/aws/rollup.config.js @@ -8,11 +8,11 @@ const options = [ input: './src/index.ts', output: [ { - format: 'cjs', + format: 'module', file: './lib/index.js', }, ], - external: ['@rediagram/cdk', 'react', '@ts-graphviz/react', 'prop-types', 'path'], + external: ['@rediagram/cdk', 'react', '@ts-graphviz/react', 'prop-types', 'node:path', 'node:url'], plugins: [typescript()], }, { diff --git a/packages/aws/src/assets.ts b/packages/aws/src/assets.ts index 73dfbcca..984c6837 100644 --- a/packages/aws/src/assets.ts +++ b/packages/aws/src/assets.ts @@ -1,4 +1,8 @@ -import path from 'path'; +import path from 'node:path'; +import url from 'node:url'; + +// eslint-disable-next-line no-underscore-dangle +const __dirname = path.dirname(url.fileURLToPath(import.meta.url)); export function resolveAsset(...paths: string[]): string { return path.resolve(__dirname, '../assets', ...paths); diff --git a/packages/cdk/package.json b/packages/cdk/package.json index f37115cd..9ac1263f 100644 --- a/packages/cdk/package.json +++ b/packages/cdk/package.json @@ -1,7 +1,10 @@ { "name": "@rediagram/cdk", "version": "0.3.1", - "main": "lib/index.js", + "type": "module", + "exports": { + "import": "./lib/index.js" + }, "types": "lib/index.d.ts", "author": "kamiazya ", "description": "Component Development Kit for rediagram library.", @@ -28,10 +31,10 @@ "watch": "tsc --watch" }, "peerDependencies": { - "@ts-graphviz/react": "^0.7.0", + "@ts-graphviz/react": "^0.9.1", "prop-types": "^15.7.2", "react": "^16.13.1", - "ts-graphviz": "^0.13.1" + "ts-graphviz": "^0.16.0" }, "devDependencies": { "@types/prop-types": "^15.7.3", diff --git a/packages/cdk/rollup.config.js b/packages/cdk/rollup.config.js index 86499bba..e6594125 100644 --- a/packages/cdk/rollup.config.js +++ b/packages/cdk/rollup.config.js @@ -8,7 +8,7 @@ const options = [ input: './src/index.ts', output: [ { - format: 'cjs', + format: 'module', file: './lib/index.js', }, ], diff --git a/packages/cli/bin/rediagramc.js b/packages/cli/bin/rediagramc.js index 36d89278..91f2045f 100755 --- a/packages/cli/bin/rediagramc.js +++ b/packages/cli/bin/rediagramc.js @@ -1,2 +1,2 @@ -#!/usr/bin/env node -require('../lib/rediagramc'); +#!/usr/bin/env -S node --experimental-loader esbuild-node-loader +import '../lib/rediagramc.js'; diff --git a/packages/cli/package.json b/packages/cli/package.json index e91b7335..bb4ef4d5 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -5,6 +5,7 @@ "description": "CLI for rediagram.", "author": "kamiazya ", "homepage": "https://github.com/kamiazya/rediagram", + "type": "module", "repository": { "type": "git", "url": "https://github.com/kamiazya/rediagram.git", @@ -32,26 +33,26 @@ "dependencies": { "@rediagram/aws": "^0.4.2", "@rediagram/common": "^0.0.3", - "@ts-graphviz/react": "^0.7.0", + "@ts-graphviz/react": "^0.9.1", "@types/node": "^16.4.5", "@types/prop-types": "^15.7.3", "@types/react": "^16.9.35", "@types/react-dom": "^16.9.8", "chokidar": "^3.4.3", "commander": "^6.1.0", + "esbuild-node-loader": "^0.6.3", "fast-glob": "^3.2.4", "prop-types": "^15.7.2", "react": "^16.13.1", "react-dom": "^16.13.1", "rediagram": "^0.2.5", - "sucrase": "^3.16.0", - "ts-graphviz": "^0.13.1", + "ts-graphviz": "^0.16.0", "typescript": "^4.0.2" }, "devDependencies": { "rimraf": "^3.0.2", "rollup": "^2.55.0", "rollup-plugin-typescript2": "^0.30.0", - "ts-node": "^9.0.0" + "rollup-plugin-version-injector": "^1.3.3" } } diff --git a/packages/cli/rollup.config.js b/packages/cli/rollup.config.js index a2fc29d8..54b69b89 100644 --- a/packages/cli/rollup.config.js +++ b/packages/cli/rollup.config.js @@ -1,13 +1,19 @@ import typescript from 'rollup-plugin-typescript2'; +import versionInjector from 'rollup-plugin-version-injector'; -export default { - input: './src/rediagramc.ts', - output: [ - { - format: 'cjs', - file: './lib/rediagramc.js', - }, - ], - external: ['commander', 'fast-glob', 'path', 'fs', 'sucrase/dist/register', '@rediagram/common', 'chokidar'], - plugins: [typescript()], -}; +/** @type {import('rollup').RollupOptions[]} */ +const options = [ + { + input: './src/rediagramc.ts', + output: [ + { + format: 'module', + file: './lib/rediagramc.js', + }, + ], + external: ['commander', 'fast-glob', 'path', 'fs', 'rediagram', 'chokidar'], + plugins: [typescript(), versionInjector()], + }, +]; + +export default options; diff --git a/packages/cli/src/pkg.ts b/packages/cli/src/pkg.ts deleted file mode 100644 index 0f5c58b7..00000000 --- a/packages/cli/src/pkg.ts +++ /dev/null @@ -1,10 +0,0 @@ -import path from 'path'; -import fs from 'fs'; - -type PKG = { - version: string; -}; - -const pkg: PKG = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf-8')); - -export default pkg; diff --git a/packages/cli/src/rediagramc.ts b/packages/cli/src/rediagramc.ts index 52d8c628..445ae1bb 100644 --- a/packages/cli/src/rediagramc.ts +++ b/packages/cli/src/rediagramc.ts @@ -1,44 +1,47 @@ import cmd from 'commander'; import glob from 'fast-glob'; import chokidar from 'chokidar'; -import { CONFIG } from '@rediagram/common'; -import { registerAll } from 'sucrase/dist/register'; -import path from 'path'; -import pkg from './pkg'; +import { Rediagram } from 'rediagram'; type Options = { watch: boolean; }; -function runRediagram(src: string) { - // eslint-disable-next-line no-console - console.log(src); - const resolved = path.resolve(src); - // eslint-disable-next-line global-require, import/no-dynamic-require - require(resolved); - delete require.cache[resolved]; -} +const NAME = 'rediagramc'; + +const logger = Rediagram.logger.getChildLogger({ name: NAME }); cmd - .name('rediagramc') - .version(pkg.version) + .name(NAME) + .version('[VI]{version}[/VI]') .arguments('[pattarns...]') .option('-w, --watch', 'Watch files for changes and rerun rediagram related to changed files.', false) .action(async function rediagramc(this: Options, pattarns: string[]): Promise { - registerAll(); const paths = pattarns.length >= 1 ? pattarns - : [...CONFIG.scope.getIncludesPattarns(), ...CONFIG.scope.getExcludesPattarns().map((p) => `!${p}`)]; + : [...Rediagram.config.scope.includes, ...Rediagram.config.scope.excludes.map((p) => `!${p}`)]; if (this.watch) { - chokidar.watch(paths).on('add', runRediagram).on('change', runRediagram); + chokidar + .watch(paths) + .on('add', async (src) => { + logger.info('Added', src); + await Rediagram.run(src); + }) + .on('change', async (src) => { + logger.info('Changed', src); + await Rediagram.run(src); + }); } else { const sources = await glob(paths, { dot: true, extglob: true, onlyFiles: true, }); - sources.forEach(runRediagram); + sources.forEach(async (src) => { + logger.info('Start', src); + await Rediagram.run(src); + }); } }) .parse(process.argv); diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index 2737e15b..339f3fe9 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -3,7 +3,7 @@ "compilerOptions": { "outDir": "lib", "rootDir": "src", - "declaration": false + "declaration": true }, "include": [ "src/**/*.ts", diff --git a/packages/common/package.json b/packages/common/package.json index ae25ffd7..70ab6e8c 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,7 +1,10 @@ { "name": "@rediagram/common", "version": "0.0.3", - "main": "lib/index.js", + "type": "module", + "exports": { + "import": "./lib/index.js" + }, "types": "lib/index.d.ts", "author": "kamiazya ", "description": "Common config and utility for rediagram.", @@ -27,14 +30,23 @@ "build": "rollup -c && prettier --write './lib/*'", "watch": "tsc --watch" }, + "dependencies": { + "@ts-graphviz/node": "^0.4.0", + "@ts-graphviz/react": "^0.9.1", + "cosmiconfig": "^7.0.1", + "fs-extra": "^10.0.0", + "sharp": "^0.29.1", + "svgo": "^2.7.0", + "svgson": "^5.2.1", + "tslog": "^3.2.1" + }, "devDependencies": { + "@types/sharp": "^0.29.2", + "@types/svgo": "^2.4.2", "rollup": "^2.55.0", "rollup-plugin-delete": "^2.0.0", "rollup-plugin-dts": "^3.0.2", "rollup-plugin-typescript2": "^0.30.0", "typescript": "^4.0.2" - }, - "dependencies": { - "cosmiconfig": "^7.0.0" } } diff --git a/packages/common/rollup.config.js b/packages/common/rollup.config.js index 096b0384..7fb9d4e3 100644 --- a/packages/common/rollup.config.js +++ b/packages/common/rollup.config.js @@ -8,11 +8,21 @@ const options = [ input: './src/index.ts', output: [ { - format: 'cjs', + format: 'module', file: './lib/index.js', }, ], - external: ['path', 'cosmiconfig'], + external: [ + 'path', + 'cosmiconfig', + 'fs-extra', + 'tslog', + 'sharp', + '@ts-graphviz/react', + '@ts-graphviz/node', + 'node:path', + 'rehype', + ], plugins: [typescript()], }, { diff --git a/packages/common/src/config/beta1.ts b/packages/common/src/config/beta1.ts new file mode 100644 index 00000000..4b9f0182 --- /dev/null +++ b/packages/common/src/config/beta1.ts @@ -0,0 +1,42 @@ +/* eslint-disable @typescript-eslint/no-namespace */ +import path from 'node:path'; +import { Format } from '@ts-graphviz/node'; +import { RediagramConfig } from '../types'; + +export namespace beta1 { + export const version = 'beta1'; + + interface Config { + version: typeof version; + includes?: string[]; + excludes?: string[]; + output?: { + dir?: string; + type?: Format; + }; + dot?: { + timeout?: number; + }; + plugins?: { name: string; [key: string]: unknown }[]; + } + + export function load(filepath: string, data: Config): RediagramConfig { + return { + filepath, + output: { + dir: path.resolve(path.dirname(filepath), data.output?.dir ?? '.'), + format: data.output?.type ?? 'png', + }, + options: { + dot: data.dot ?? {}, + }, + scope: { + includes: data.includes ?? ['**/*.rediagram.{jsx,tsx}'], + excludes: data.excludes ?? ['**/node_modules/**/*'], + }, + // dot: { + // timeout: data.dot?.timeout ?? 10_000, + // }, + }; + } +} diff --git a/packages/common/src/config/default.ts b/packages/common/src/config/default.ts new file mode 100644 index 00000000..26c92ee6 --- /dev/null +++ b/packages/common/src/config/default.ts @@ -0,0 +1,18 @@ +import { RediagramConfig } from '../types'; + +export function createDefaultConfig(): RediagramConfig { + return { + filepath: null, + output: { + format: 'png', + }, + options: {}, + scope: { + includes: ['**/*.rediagram.{jsx,tsx}'], + excludes: ['**/node_modules/**/*'], + }, + // dot: { + // timeout: 10_000, + // }, + }; +} diff --git a/packages/common/src/config/index.ts b/packages/common/src/config/index.ts index 385c52cd..f3c66ae8 100644 --- a/packages/common/src/config/index.ts +++ b/packages/common/src/config/index.ts @@ -1,99 +1,2 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ -/* eslint-disable import/no-dynamic-require */ -/* eslint-disable global-require */ -/* eslint-disable @typescript-eslint/ban-types */ -/* eslint-disable @typescript-eslint/no-namespace */ -/* eslint-disable no-useless-constructor */ -/* eslint-disable max-classes-per-file */ -import path from 'path'; -import { cosmiconfigSync } from 'cosmiconfig'; -import { Beta1 } from './version'; - -export class OutputConfig { - constructor(private readonly data?: { dir?: string }) {} - - public getDir(): string { - return this.data?.dir ?? process.cwd(); - } -} - -export class ScopeConfig { - constructor(private readonly data?: { includes?: string[]; excludes?: string[] }) {} - - public getIncludesPattarns(): string[] { - return this.data?.includes ?? ['**/*.rediagram.{jsx,tsx}']; - } - - public getExcludesPattarns(): string[] { - return this.data?.excludes ?? ['**/node_modules/**/*']; - } -} - -export class DotConfig { - constructor(private readonly data?: { timeout?: number }) {} - - public getTimeout(): number { - return this.data?.timeout ?? 10_000; - } -} - -export type RediagramGlobalConfig = { - readonly filepath: string | null; - readonly output: OutputConfig; - readonly scope: ScopeConfig; - readonly dot: DotConfig; -}; - -const MODULE_NAME = 'rediagram'; - -function createDefaultConfig(): RediagramGlobalConfig { - return { - filepath: null, - scope: new ScopeConfig(), - output: new OutputConfig(), - dot: new DotConfig(), - }; -} - -namespace beta1 { - type Config = { - version: Beta1; - includes?: string[]; - excludes?: string[]; - output?: { - dir?: string; - }; - dot?: { - timeout?: number; - }; - }; - - export function load(filepath: string, data: Config): RediagramGlobalConfig { - return { - filepath, - output: new OutputConfig({ - dir: path.resolve(path.dirname(filepath), data.output?.dir ?? '.'), - }), - scope: new ScopeConfig({ - includes: data.includes, - excludes: data.excludes, - }), - dot: new DotConfig({ - timeout: data.dot?.timeout, - }), - }; - } -} - -function loadConfig(): RediagramGlobalConfig { - const { search } = cosmiconfigSync(MODULE_NAME); - const result = search(); - if (result !== null) { - if (result.config.version === 'beta1') { - return beta1.load(result.filepath, result.config); - } - } - return createDefaultConfig(); -} - -export const CONFIG = loadConfig(); +export * from './beta1'; +export * from './default'; diff --git a/packages/common/src/core.ts b/packages/common/src/core.ts new file mode 100644 index 00000000..696f4452 --- /dev/null +++ b/packages/common/src/core.ts @@ -0,0 +1,75 @@ +import path from 'node:path'; +import { ensureDir } from 'fs-extra'; +import { ReactElement } from 'react'; +import { parse, stringify } from 'svgson'; +import { RediagramConfig, Logger, ExportOption, RediagramCore, RediagramRootComponent } from './types'; +import { PluginManager } from './plugin-manager'; + +export class Core implements RediagramCore { + private plugins: PluginManager; + + public readonly logger: Logger; + + public readonly config: Readonly; + + constructor(config: RediagramConfig, logger: Logger, plugins: PluginManager) { + this.config = Object.freeze({ ...config }); + this.logger = logger; + this.plugins = plugins; + } + + public async render(element: ReactElement): Promise { + const render = this.plugins.getRenderer(element.type.renderer); + const svg = await render(element); + const ast = await parse(svg); + // eslint-disable-next-line no-restricted-syntax + for (const [name, transform] of this.plugins.getTransformers()) { + this.logger.debug(`transformer "${name}": start`); + // eslint-disable-next-line no-await-in-loop + await transform(ast); + this.logger.debug(`transformer "${name}": end`); + } + return stringify(ast); + } + + public async export(svg: string, option: ExportOption): Promise { + const dir = + option.dir ?? + this.config.output.dir ?? + (this.config.filepath ? path.dirname(this.config.filepath) : process.cwd()); + const format = option.format ?? this.config.output.format; + const output = path.format({ + dir, + name: option.name, + ext: `.${format}`, + }); + if (dir !== undefined) { + await ensureDir(dir); + } + const exportFunc = this.plugins.getExporter(format); + await exportFunc(svg, { + dir, + name: option.name, + format, + }); + return output; + } + + public async process(element: ReactElement, options: ExportOption): Promise { + const svg = await this.render(element); + const output = await this.export(svg, options); + return output; + } + + public async run(src: string): Promise { + try { + this.logger.info('Runing', src); + const resolved = path.resolve(src); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + await import(`${resolved}?${Date.now()}`); + } catch (err) { + this.logger.error(err); + } + } +} diff --git a/packages/common/src/create-rediagram-core.ts b/packages/common/src/create-rediagram-core.ts new file mode 100644 index 00000000..15f24128 --- /dev/null +++ b/packages/common/src/create-rediagram-core.ts @@ -0,0 +1,34 @@ +import { RediagramCore } from './types'; +import { Core } from './core'; +import { ROOT_LOGGER } from './root-logger'; +import { loadConfig } from './load-config'; +import { PluginManager } from './plugin-manager'; +import { DotPluginModule } from './plugins/dot-plugin'; +import { ImagePluginModule } from './plugins/image-plugin'; +import { SVGPluginModule } from './plugins/svg-plugin'; +import { InternalPluginModule } from './plugins/internal-plugin'; + +const MODULE_NAME = 'rediagram'; + +/** + * Load the config file and create an instance of RediagramCore. + */ +export async function createRediagramCore(): Promise { + const logger = ROOT_LOGGER.getChildLogger({ name: MODULE_NAME }); + const config = loadConfig(MODULE_NAME); + const plugins = PluginManager.createWithPresetModules(logger.getChildLogger({ name: 'rediagram/PluginManager' }), [ + DotPluginModule, + ImagePluginModule, + SVGPluginModule, + InternalPluginModule, + ]); + await Promise.all([ + plugins.init(DotPluginModule.name, config.options.dot), + plugins.init(ImagePluginModule.name), + plugins.init(SVGPluginModule.name), + plugins.init(InternalPluginModule.name), + ]); + + const core = new Core(config, logger, plugins); + return core; +} diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index f03c2281..caea84db 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -1 +1,3 @@ +export * from './types'; export * from './config'; +export * from './create-rediagram-core'; diff --git a/packages/common/src/load-config.ts b/packages/common/src/load-config.ts new file mode 100644 index 00000000..6ca62d72 --- /dev/null +++ b/packages/common/src/load-config.ts @@ -0,0 +1,15 @@ +import { cosmiconfigSync } from 'cosmiconfig'; +import { RediagramConfig } from './types'; +import { beta1 } from './config/beta1'; +import { createDefaultConfig } from './config/default'; + +export function loadConfig(name: string): RediagramConfig { + const { search } = cosmiconfigSync(name); + const result = search(); + switch (result?.config.version) { + case beta1.version: + return beta1.load(result.filepath, result.config); + default: + return createDefaultConfig(); + } +} diff --git a/packages/common/src/plugin-manager.ts b/packages/common/src/plugin-manager.ts new file mode 100644 index 00000000..ff44f033 --- /dev/null +++ b/packages/common/src/plugin-manager.ts @@ -0,0 +1,107 @@ +import { + Logger, + RediagramExporter, + RediagramPlugin, + RediagramPluginModule, + RediagramRenderer, + RediagramTransformer, +} from './types'; + +export class PluginManager { + private static assertsPluginModule(obj: any): asserts obj is RediagramPluginModule { + if (typeof obj.name !== 'string') { + throw new Error('name is reqired'); + } + if (obj.name.length === 0) { + throw new Error('name must be more then 1 charactor'); + } + if (typeof obj.setup !== 'function') { + throw new Error('setup function is reqired'); + } + } + + public static createWithPresetModules(logger: Logger, pluginModules: RediagramPluginModule[]): PluginManager { + const plugins = new PluginManager(logger); + pluginModules.forEach((pluginModule) => { + plugins.loadPreset(pluginModule); + }); + return plugins; + } + + private preloads = new Map(); + + private transformers = new Map(); + + private renderers = new Map(); + + private exporters = new Map(); + + constructor(private readonly logger: Logger) {} + + public loadPreset(pluginModule: RediagramPluginModule): void { + this.logger.debug(`"${pluginModule.name}" seted to preloads`); + this.preloads.set(pluginModule.name, pluginModule); + } + + private async importPlugin(nameOrKey: string): Promise { + let pluginModule = this.preloads.get(nameOrKey); + if (pluginModule) { + return pluginModule; + } + pluginModule = await import(nameOrKey); + PluginManager.assertsPluginModule(pluginModule); + return pluginModule; + } + + public async createPlugin(name: string, option: T): Promise { + const pluginModule = await this.importPlugin(name); + return pluginModule.setup({ option: option ?? {}, logger: this.logger.getChildLogger({ name }) }); + } + + public async init(name: string, option?: Record): Promise { + this.load(await this.createPlugin(name, option)); + } + + public load(plugin: RediagramPlugin): void { + if (plugin.renderers) { + Object.entries(plugin.renderers).forEach(([name, renderer]) => { + this.logger.debug(`"${name}" seted to renderers`); + this.renderers.set(name, renderer); + }); + } + + if (plugin.exporters) { + Object.entries(plugin.exporters).forEach(([name, exporter]) => { + this.logger.debug(`"${name}" seted to exporters`); + this.exporters.set(name, exporter); + }); + } + + if (plugin.transformers) { + Object.entries(plugin.transformers).forEach(([name, transformer]) => { + this.logger.debug(`"${name}" seted to transformers`); + this.transformers.set(name, transformer); + }); + } + } + + public getRenderer(name: string): RediagramRenderer { + const func = this.renderers.get(name); + if (!func) { + throw new Error(`"${name}" renderer not found.`); + } + return func; + } + + public getExporter(name: string): RediagramExporter { + const exporter = this.exporters.get(name); + if (!exporter) { + throw new Error(`"${name}" exporter not found.`); + } + return exporter; + } + + public getTransformers(): IterableIterator<[string, RediagramTransformer]> { + return this.transformers.entries(); + } +} diff --git a/packages/common/src/plugins/dot-plugin.ts b/packages/common/src/plugins/dot-plugin.ts new file mode 100644 index 00000000..58906874 --- /dev/null +++ b/packages/common/src/plugins/dot-plugin.ts @@ -0,0 +1,28 @@ +import { exportToBuffer } from '@ts-graphviz/node'; +import { renderToDot } from '@ts-graphviz/react'; +import { RediagramPlugin, RediagramPluginModule } from '../types'; + +interface DotPluginOption { + timeout?: number; +} + +export const DotPluginModule: RediagramPluginModule = { + name: 'dot', + setup({ option: { timeout = 10_000 } }): RediagramPlugin { + return { + renderers: { + async dot(element) { + const dot = renderToDot(element); + const buf = await exportToBuffer(dot, { + format: 'svg', + suppressWarnings: true, + childProcessOptions: { + timeout, + }, + }); + return buf.toString('utf-8'); + }, + }, + }; + }, +}; diff --git a/packages/common/src/plugins/image-plugin.ts b/packages/common/src/plugins/image-plugin.ts new file mode 100644 index 00000000..e87696b2 --- /dev/null +++ b/packages/common/src/plugins/image-plugin.ts @@ -0,0 +1,33 @@ +import path from 'node:path'; +import sharp from 'sharp'; +import { RediagramExporter, RediagramPluginModule } from '../types'; + +function toFormat(type: keyof sharp.FormatEnum): RediagramExporter { + return async (svg, option) => { + const output = path.format({ + dir: option.dir, + name: option.name, + ext: `.${option.format}`, + }); + await sharp(Buffer.from(svg), { + density: 96, + }) + .toFormat(type) + .toFile(output); + return output; + }; +} + +export const ImagePluginModule: RediagramPluginModule = { + name: 'image', + setup() { + return { + exporters: { + png: toFormat('png'), + jpg: toFormat('jpg'), + jpeg: toFormat('jpeg'), + webp: toFormat('webp'), + }, + }; + }, +}; diff --git a/packages/common/src/plugins/internal-plugin.ts b/packages/common/src/plugins/internal-plugin.ts new file mode 100644 index 00000000..90f7f9a5 --- /dev/null +++ b/packages/common/src/plugins/internal-plugin.ts @@ -0,0 +1,35 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { RediagramPluginModule, SVGNode } from '../types'; + +function encode(data: Buffer, mediaType: string) { + const dataBase64 = Buffer.isBuffer(data) ? data.toString('base64') : Buffer.from(data).toString('base64'); + const dataImgBase64 = `data:${mediaType};base64,${dataBase64}`; + + return dataImgBase64; +} + +async function emmbedImage(node: SVGNode): Promise { + if (node.type === 'element' && node.name === 'image') { + const imagePath = node.attributes['xlink:href']; + if (imagePath) { + const imgFormat = path.extname(imagePath).slice(1); + const image = fs.readFileSync(imagePath, { flag: 'r' }); + const imageSrc = encode(image, `image/${imgFormat}`); + // eslint-disable-next-line no-param-reassign + node.attributes['xlink:href'] = imageSrc; + } + } + node.children.forEach(emmbedImage); +} + +export const InternalPluginModule: RediagramPluginModule = { + name: 'internal', + setup() { + return { + transformers: { + emmbedImage, + }, + }; + }, +}; diff --git a/packages/common/src/plugins/svg-plugin.ts b/packages/common/src/plugins/svg-plugin.ts new file mode 100644 index 00000000..ab706fc6 --- /dev/null +++ b/packages/common/src/plugins/svg-plugin.ts @@ -0,0 +1,24 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { optimize } from 'svgo'; +import { ExportOption, RediagramPluginModule } from '../types'; + +export const SVGPluginModule: RediagramPluginModule = { + name: 'svg', + setup() { + return { + exporters: { + async svg(svg: string, option: Required): Promise { + const output = path.format({ + dir: option.dir, + name: option.name, + ext: '.svg', + }); + const { data } = optimize(svg); + await fs.promises.writeFile(output, data); + return output; + }, + }, + }; + }, +}; diff --git a/packages/common/src/root-logger.ts b/packages/common/src/root-logger.ts new file mode 100644 index 00000000..5dfd606f --- /dev/null +++ b/packages/common/src/root-logger.ts @@ -0,0 +1,9 @@ +import { Logger as TSLogLogger } from 'tslog'; + +export const ROOT_LOGGER = new TSLogLogger({ + type: 'pretty', + name: 'root', + displayDateTime: false, + displayFilePath: 'hidden', + displayFunctionName: false, +}); diff --git a/packages/common/src/types.ts b/packages/common/src/types.ts new file mode 100644 index 00000000..81a20e36 --- /dev/null +++ b/packages/common/src/types.ts @@ -0,0 +1,94 @@ +/* eslint-disable @typescript-eslint/ban-types */ +import { ReactElement, FC } from 'react'; +import { INode } from 'svgson'; +import { Logger as TSLogLogger } from 'tslog'; + +export type Logger = TSLogLogger; + +export type SVGNode = INode; + +export type RediagramConfig = { + filepath: string | null; + output: Readonly<{ + dir?: string; + format: string; + }>; + options: { + [name: string]: Record; + }; + scope: Readonly<{ + includes: ReadonlyArray; + excludes: ReadonlyArray; + }>; + // dot: Readonly<{ + // timeout: number; + // }>; +}; + +export interface ExportOption { + /** + * Output destination directory. + */ + dir?: string; + /** + * Output file name. + */ + name: string; + /** + * Output file format. + */ + format?: string; +} + +export type RediagramRootComponent

= FC

& { + renderer: string; +}; +export type RRC

= RediagramRootComponent

; + +export interface RediagramRenderer { + (element: ReactElement): Promise; +} + +export interface RediagramTransformer { + (node: SVGNode): Promise; +} + +export interface RediagramExporter { + (svg: string, option: Required): Promise; +} + +// TODO +export interface RediagramPlugin { + renderers?: { + [name: string]: RediagramRenderer; + }; + exporters?: { + [name: string]: RediagramExporter; + }; + transformers?: { + [name: string]: RediagramTransformer; + }; +} + +export interface RediagramPluginContext { + logger: Logger; + option: T; +} + +export interface RediagramPluginModule { + name: string; + setup(context: RediagramPluginContext): RediagramPlugin; +} + +export interface RediagramPluginManager { + create(name: string, context: RediagramPluginContext, option: T): RediagramPlugin; +} + +export interface RediagramCore { + config: Readonly; + logger: Logger; + render(element: ReactElement, options: ExportOption): Promise; + export(svg: string, options: ExportOption): Promise; + process(element: ReactElement, options: ExportOption): Promise; + run(src: string): Promise; +} diff --git a/packages/create-rediagram-project/bin/create-rediagram-project.js b/packages/create-rediagram-project/bin/create-rediagram-project.js index 60355a4b..9ad11927 100755 --- a/packages/create-rediagram-project/bin/create-rediagram-project.js +++ b/packages/create-rediagram-project/bin/create-rediagram-project.js @@ -1,2 +1,2 @@ #!/usr/bin/env node -require('../lib/main'); +import '../lib/main.js'; diff --git a/packages/create-rediagram-project/package.json b/packages/create-rediagram-project/package.json index 180cea7a..393d3c8e 100644 --- a/packages/create-rediagram-project/package.json +++ b/packages/create-rediagram-project/package.json @@ -4,6 +4,7 @@ "version": "0.2.2", "author": "kamiazya ", "description": "Starter kit for rediagram.", + "type": "module", "bin": { "create-rediagram-project": "bin/create-rediagram-project.js" }, @@ -49,6 +50,7 @@ "rimraf": "^3.0.2", "rollup": "^2.55.0", "rollup-plugin-typescript2": "^0.30.0", + "rollup-plugin-version-injector": "^1.3.3", "typescript": "^4.0.2" } } diff --git a/packages/create-rediagram-project/rollup.config.js b/packages/create-rediagram-project/rollup.config.js index e85bbf19..9c37c2af 100644 --- a/packages/create-rediagram-project/rollup.config.js +++ b/packages/create-rediagram-project/rollup.config.js @@ -1,10 +1,11 @@ import typescript from 'rollup-plugin-typescript2'; +import versionInjector from 'rollup-plugin-version-injector'; export default { input: './src/main.ts', output: [ { - format: 'cjs', + format: 'module', file: './lib/main.js', }, ], @@ -12,14 +13,14 @@ export default { 'chalk', 'commander', 'fs-extra', - 'fs', 'ncp', - 'path', 'replacestream', 'cross-spawn', 'dedent', 'validate-npm-package-name', 'which', + 'node:url', + 'node:path', ], - plugins: [typescript()], + plugins: [typescript(), versionInjector()], }; diff --git a/packages/create-rediagram-project/src/assert-args.ts b/packages/create-rediagram-project/src/assert-args.ts index 124c5b3f..66a0c1fb 100644 --- a/packages/create-rediagram-project/src/assert-args.ts +++ b/packages/create-rediagram-project/src/assert-args.ts @@ -1,5 +1,5 @@ import { CommanderError } from 'commander'; -import path from 'path'; +import path from 'node:path'; import fs from 'fs-extra'; import validate from 'validate-npm-package-name'; diff --git a/packages/create-rediagram-project/src/command.ts b/packages/create-rediagram-project/src/command.ts index 13178b45..74bd04ae 100644 --- a/packages/create-rediagram-project/src/command.ts +++ b/packages/create-rediagram-project/src/command.ts @@ -1,22 +1,25 @@ /* eslint-disable @typescript-eslint/no-unused-vars, func-names, no-console */ +import url from 'node:url'; +import path from 'node:path'; import { createCommand } from 'commander'; import fs from 'fs-extra'; import chalk from 'chalk'; import { ncp } from 'ncp'; -import path from 'path'; import which from 'which'; import replacestream from 'replacestream'; import spawn from 'cross-spawn'; import dedent from 'dedent'; -import pkg from './pkg'; import { assertArgs } from './assert-args'; +// eslint-disable-next-line no-underscore-dangle +const __dirname = path.dirname(url.fileURLToPath(import.meta.url)); + type Options = { packageManager: string; }; -export const command = createCommand(pkg.name) - .version(pkg.version) +export const command = createCommand('create-rediagram-project') + .version('[VI]{version}[/VI]') .arguments('') .option('-p, --package-manager ', 'select a package manager, yarn or npm.', 'yarn') .action(function (name: string, { packageManager }: Options) { diff --git a/packages/create-rediagram-project/src/pkg.ts b/packages/create-rediagram-project/src/pkg.ts deleted file mode 100644 index cd1419ef..00000000 --- a/packages/create-rediagram-project/src/pkg.ts +++ /dev/null @@ -1,11 +0,0 @@ -import path from 'path'; -import fs from 'fs'; - -type PKG = { - name: string; - version: string; -}; - -const pkg: PKG = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf-8')); - -export default pkg; diff --git a/packages/create-rediagram-project/templates/typescript/package.json b/packages/create-rediagram-project/templates/typescript/package.json index 4d92e4e0..90293ad3 100644 --- a/packages/create-rediagram-project/templates/typescript/package.json +++ b/packages/create-rediagram-project/templates/typescript/package.json @@ -1,7 +1,6 @@ { "name": "{{name}}", "version": "0.0.0", - "main": "index.js", "private": true, "scripts": { "start": "rediagramc", @@ -10,11 +9,11 @@ "dependencies": { "@rediagram/aws": "^0.2.4", "@rediagram/gcp": "^0.1.3", - "@ts-graphviz/react": "^0.7.0", + "@ts-graphviz/react": "^0.9.1", "react": "^16.14.0", "react-dom": "^16.14.0", "rediagram": "^0.2.2", - "ts-graphviz": "^0.13.2" + "ts-graphviz": "^0.16.0" }, "devDependencies": { "@rediagram/cli": "^0.1.0", diff --git a/packages/firebase/package.json b/packages/firebase/package.json index dcc7859d..1bc2a885 100644 --- a/packages/firebase/package.json +++ b/packages/firebase/package.json @@ -1,7 +1,10 @@ { "name": "@rediagram/firebase", "version": "0.0.1", - "main": "lib/index.js", + "type": "module", + "exports": { + "import": "./lib/index.js" + }, "types": "lib/index.d.ts", "license": "MIT", "description": "Components for drawing Firebase diagrams.", @@ -31,12 +34,12 @@ "@rediagram/cdk": "^0.3.1" }, "peerDependencies": { - "@ts-graphviz/react": "^0.7.0", + "@ts-graphviz/react": "^0.9.1", "prop-types": "^15.7.2", "react": "^16.13.1", "react-dom": "^16.13.1", "rediagram": "*", - "ts-graphviz": "^0.13.1" + "ts-graphviz": "^0.16.0" }, "devDependencies": { "@types/node": "^16.4.5", diff --git a/packages/firebase/rollup.config.js b/packages/firebase/rollup.config.js index c1b45cd8..e041aa3f 100644 --- a/packages/firebase/rollup.config.js +++ b/packages/firebase/rollup.config.js @@ -8,11 +8,11 @@ const options = [ input: './src/index.ts', output: [ { - format: 'cjs', + format: 'module', file: './lib/index.js', }, ], - external: ['@rediagram/cdk', 'react', '@ts-graphviz/react', 'prop-types', 'path'], + external: ['@rediagram/cdk', 'react', '@ts-graphviz/react', 'prop-types', 'node:path', 'node:url'], plugins: [typescript()], }, { diff --git a/packages/firebase/src/assets.ts b/packages/firebase/src/assets.ts index 73dfbcca..984c6837 100644 --- a/packages/firebase/src/assets.ts +++ b/packages/firebase/src/assets.ts @@ -1,4 +1,8 @@ -import path from 'path'; +import path from 'node:path'; +import url from 'node:url'; + +// eslint-disable-next-line no-underscore-dangle +const __dirname = path.dirname(url.fileURLToPath(import.meta.url)); export function resolveAsset(...paths: string[]): string { return path.resolve(__dirname, '../assets', ...paths); diff --git a/packages/gcp/package.json b/packages/gcp/package.json index af84ed24..f682ac67 100644 --- a/packages/gcp/package.json +++ b/packages/gcp/package.json @@ -1,7 +1,10 @@ { "name": "@rediagram/gcp", "version": "0.3.1", - "main": "lib/index.js", + "type": "module", + "exports": { + "import": "./lib/index.js" + }, "types": "lib/index.d.ts", "license": "MIT", "description": "Components for drawing GCP diagrams.", @@ -31,12 +34,12 @@ "@rediagram/cdk": "^0.3.1" }, "peerDependencies": { - "@ts-graphviz/react": "^0.7.0", + "@ts-graphviz/react": "^0.9.1", "prop-types": "^15.7.2", "react": "^16.13.1", "react-dom": "^16.13.1", "rediagram": "*", - "ts-graphviz": "^0.13.1" + "ts-graphviz": "^0.16.0" }, "devDependencies": { "@types/node": "^16.4.5", diff --git a/packages/gcp/rollup.config.js b/packages/gcp/rollup.config.js index c1b45cd8..e041aa3f 100644 --- a/packages/gcp/rollup.config.js +++ b/packages/gcp/rollup.config.js @@ -8,11 +8,11 @@ const options = [ input: './src/index.ts', output: [ { - format: 'cjs', + format: 'module', file: './lib/index.js', }, ], - external: ['@rediagram/cdk', 'react', '@ts-graphviz/react', 'prop-types', 'path'], + external: ['@rediagram/cdk', 'react', '@ts-graphviz/react', 'prop-types', 'node:path', 'node:url'], plugins: [typescript()], }, { diff --git a/packages/gcp/src/assets.ts b/packages/gcp/src/assets.ts index 73dfbcca..984c6837 100644 --- a/packages/gcp/src/assets.ts +++ b/packages/gcp/src/assets.ts @@ -1,4 +1,8 @@ -import path from 'path'; +import path from 'node:path'; +import url from 'node:url'; + +// eslint-disable-next-line no-underscore-dangle +const __dirname = path.dirname(url.fileURLToPath(import.meta.url)); export function resolveAsset(...paths: string[]): string { return path.resolve(__dirname, '../assets', ...paths); diff --git a/packages/rediagram/package.json b/packages/rediagram/package.json index 037de986..2849de7a 100644 --- a/packages/rediagram/package.json +++ b/packages/rediagram/package.json @@ -1,7 +1,10 @@ { "name": "rediagram", "version": "0.2.5", - "main": "lib/index.js", + "type": "module", + "exports": { + "import": "./lib/index.js" + }, "types": "lib/index.d.ts", "author": "kamiazya ", "description": "Prototyping system architectures by using React.", @@ -25,11 +28,11 @@ "watch": "tsc --watch" }, "peerDependencies": { - "@ts-graphviz/react": "^0.7.0", + "@ts-graphviz/react": "^0.9.1", "prop-types": "^15.7.2", "react": "^16.13.1", "react-dom": "^16.13.1", - "ts-graphviz": "^0.13.1" + "ts-graphviz": "^0.16.0" }, "devDependencies": { "@types/caller": "^1.0.0", diff --git a/packages/rediagram/rollup.config.js b/packages/rediagram/rollup.config.js index 15eaa4d4..dc27edea 100644 --- a/packages/rediagram/rollup.config.js +++ b/packages/rediagram/rollup.config.js @@ -8,7 +8,7 @@ const options = [ input: './src/index.ts', output: [ { - format: 'cjs', + format: 'module', file: './lib/index.js', }, ], @@ -17,12 +17,13 @@ const options = [ 'ts-graphviz', '@ts-graphviz/node', 'fs-extra', - 'path', 'caller', '@rediagram/common', '@ts-graphviz/react', 'react', 'prop-types', + 'node:path', + 'node:url', ], plugins: [typescript()], }, diff --git a/packages/rediagram/src/assets.ts b/packages/rediagram/src/assets.ts index 73dfbcca..984c6837 100644 --- a/packages/rediagram/src/assets.ts +++ b/packages/rediagram/src/assets.ts @@ -1,4 +1,8 @@ -import path from 'path'; +import path from 'node:path'; +import url from 'node:url'; + +// eslint-disable-next-line no-underscore-dangle +const __dirname = path.dirname(url.fileURLToPath(import.meta.url)); export function resolveAsset(...paths: string[]): string { return path.resolve(__dirname, '../assets', ...paths); diff --git a/packages/rediagram/src/components/Diagram.tsx b/packages/rediagram/src/components/Diagram.tsx index 79c445a1..696bad87 100644 --- a/packages/rediagram/src/components/Diagram.tsx +++ b/packages/rediagram/src/components/Diagram.tsx @@ -1,7 +1,8 @@ -import React, { FC, ReactElement } from 'react'; +import React, { ReactElement } from 'react'; import { Digraph } from '@ts-graphviz/react'; import { attribute } from 'ts-graphviz'; import t from 'prop-types'; +import { RRC } from '@rediagram/common'; export type DiagramProps = { title?: ReactElement | string; @@ -9,7 +10,7 @@ export type DiagramProps = { rankdir?: 'TB' | 'BT' | 'RL' | 'LR'; }; -export const Diagram: FC = ({ title, children, dpi, rankdir }) => { +export const Diagram: RRC = ({ title, children, dpi, rankdir }) => { return ( = ({ title, children, dpi, rankdir }) => ); }; +Diagram.renderer = 'dot'; + Diagram.propTypes = { // eslint-disable-next-line react/require-default-props title: t.oneOfType([t.string.isRequired, t.element.isRequired]), diff --git a/packages/rediagram/src/core.ts b/packages/rediagram/src/core.ts new file mode 100644 index 00000000..241731d3 --- /dev/null +++ b/packages/rediagram/src/core.ts @@ -0,0 +1,3 @@ +import { createRediagramCore } from '@rediagram/common'; + +export const Rediagram = await createRediagramCore(); diff --git a/packages/rediagram/src/formats.ts b/packages/rediagram/src/formats.ts index 5d5eab1e..462cbc41 100644 --- a/packages/rediagram/src/formats.ts +++ b/packages/rediagram/src/formats.ts @@ -1,10 +1,8 @@ import { ReactElement } from 'react'; -import { renderToDot } from '@ts-graphviz/react'; -import { ChildProcessOptions, exportToFile, Format } from '@ts-graphviz/node'; -import { CONFIG } from '@rediagram/common'; -import { ensureDir } from 'fs-extra'; -import path from 'path'; +import path from 'node:path'; import caller from 'caller'; +import { RediagramRootComponent } from '@rediagram/common'; +import { Rediagram } from './core'; export type RenderOption = { /** @@ -26,83 +24,65 @@ type InternalRenderOption = RenderOption & { _caller?: string; }; -async function render( - element: ReactElement, - { - name, - dir, - format, - dotOptions, - }: Required & { - format: Format; - dotOptions: ChildProcessOptions; - }, -): Promise { - const dot = renderToDot(element); - const output = path.format({ dir, name, ext: `.${format}` }); - if (dir !== undefined) { - await ensureDir(dir); - } - await exportToFile(dot, { - format, - output, - childProcessOptions: dotOptions, - }); -} - /** * Output PNG image. */ -export function PNG(element: ReactElement, options?: RenderOption): Promise; +export function PNG(element: ReactElement, options?: RenderOption): Promise; export async function PNG( - element: ReactElement, + element: ReactElement, { name, dir, _caller = caller() }: InternalRenderOption = {}, ): Promise { - const p = path.parse(_caller); - await render(element, { - format: 'png', - name: name ?? p.name, - dir: dir ?? CONFIG.output.getDir() ?? p.dir, - dotOptions: { - timeout: CONFIG.dot?.getTimeout(), - }, - }); + try { + const p = path.parse(_caller); + const output = await Rediagram.process(element, { + format: 'png', + name: name ?? p.name, + dir: dir ?? Rediagram.config.output.dir ?? p.dir, + }); + Rediagram.logger.info('Output', path.relative(process.cwd(), output)); + } catch (err) { + Rediagram.logger.error(err); + } } /** * Output SVG file. */ -export function SVG(element: ReactElement, options?: RenderOption): Promise; +export function SVG(element: ReactElement, options?: RenderOption): Promise; export async function SVG( - element: ReactElement, + element: ReactElement, { name, dir, _caller = caller() }: InternalRenderOption = {}, ): Promise { - const p = path.parse(_caller); - await render(element, { - format: 'svg', - name: name ?? p.name, - dir: dir ?? CONFIG.output.getDir() ?? p.dir, - dotOptions: { - timeout: CONFIG.dot?.getTimeout(), - }, - }); + try { + const p = path.parse(_caller); + const output = await Rediagram.process(element, { + format: 'svg', + name: name ?? p.name, + dir: dir ?? Rediagram.config.output.dir ?? p.dir, + }); + Rediagram.logger.info('Output', path.relative(process.cwd(), output)); + } catch (err) { + Rediagram.logger.error(err); + } } /** * Output PDF file. */ -export function PDF(element: ReactElement, options?: RenderOption): Promise; +export function PDF(element: ReactElement, options?: RenderOption): Promise; export async function PDF( - element: ReactElement, + element: ReactElement, { name, dir, _caller = caller() }: InternalRenderOption = {}, ): Promise { - const p = path.parse(_caller); - await render(element, { - format: 'pdf', - name: name ?? p.name, - dir: dir ?? CONFIG.output.getDir() ?? p.dir, - dotOptions: { - timeout: CONFIG.dot?.getTimeout(), - }, - }); + try { + const p = path.parse(_caller); + const output = await Rediagram.process(element, { + format: 'pdf', + name: name ?? p.name, + dir: dir ?? Rediagram.config.output.dir ?? p.dir, + }); + Rediagram.logger.info('Output', path.relative(process.cwd(), output)); + } catch (err) { + Rediagram.logger.error(err); + } } diff --git a/packages/rediagram/src/index.ts b/packages/rediagram/src/index.ts index a5e03481..fb42ec40 100644 --- a/packages/rediagram/src/index.ts +++ b/packages/rediagram/src/index.ts @@ -2,3 +2,4 @@ export * from './components/Diagram'; export * from './components/TextBox'; export * from './components/GeneralIcon'; export * from './formats'; +export * from './core'; diff --git a/packages/tsconfig/tsconfig.json b/packages/tsconfig/tsconfig.json index fe04cbef..78317946 100644 --- a/packages/tsconfig/tsconfig.json +++ b/packages/tsconfig/tsconfig.json @@ -2,7 +2,7 @@ "$schema": "https://json.schemastore.org/tsconfig", "display": "rediagram", "compilerOptions": { - "jsx": "react", + "jsx": "react-jsx", "strict": true, "resolveJsonModule": true, "moduleResolution": "node", diff --git a/tsconfig.json b/tsconfig.json index 7632a99b..1831b3c3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,7 @@ { "compilerOptions": { - "target": "ES2015", + "target": "ESNext", + "module": "ESNext", "jsx": "react", "strict": true, "moduleResolution": "node", diff --git a/yarn.lock b/yarn.lock index 85901492..fbbc2387 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2887,6 +2887,11 @@ resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.1.1.tgz#3348564048e7a2d7398c935d466c0414ebb6a669" integrity sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow== +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + "@ts-graphviz/node@^0.4.0": version "0.4.0" resolved "https://registry.yarnpkg.com/@ts-graphviz/node/-/node-0.4.0.tgz#08597d80b4834bc7ba25c8e2eb5bc2f165a1b719" @@ -2894,13 +2899,15 @@ dependencies: tmp-promise "^3.0.2" -"@ts-graphviz/react@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@ts-graphviz/react/-/react-0.7.0.tgz#0064750078dc0f4c1cf2531525a74a588d01f9ac" - integrity sha512-qcsTulwhUob8V8pvTp2SIEWyWiAYddvIfr3eyohDqZFzg2C1Jz9LCmkoeI1k4DftWsedrf+aWVGiUphyqiz3SQ== +"@ts-graphviz/react@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@ts-graphviz/react/-/react-0.9.1.tgz#3e03543ebff2f2263fdc21bb10d4ff3b146cc810" + integrity sha512-Off14BKFXXhFXSnOoVA2hQEnFThPTMZWgIHLZ3SI8l//LZSBFNCkXraeWOPFk08r+/d9nQwaPByy2xzeQ0WQRg== dependencies: prop-types "^15.7.2" - react-reconciler "^0.25.1" + react-dom "^17.0.2" + react-reconciler "^0.26.2" + ts-graphviz "^0.16.0" "@tsconfig/docusaurus@^1.0.2": version "1.0.2" @@ -3210,11 +3217,25 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== +"@types/sharp@^0.29.2": + version "0.29.2" + resolved "https://registry.yarnpkg.com/@types/sharp/-/sharp-0.29.2.tgz#b4e932e982e258d1013236c8b4bcc14f9883c9a3" + integrity sha512-tIbMvtPa8kMyFMKNhpsPT1HO3CgXLuiCAA8bxHAGAZLyALpYvYc4hUu3pu0+3oExQA5LwvHrWp+OilgXCYVQgg== + dependencies: + "@types/node" "*" + "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== +"@types/svgo@^2.4.2": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@types/svgo/-/svgo-2.4.2.tgz#545f1e838a883d5e6006a458e07dddf47ca504ca" + integrity sha512-z/S0Ot40/oKEVmJnf9aS6Nk7nqH14KpAjAwR1qVGG08lZmH0LkNu7OHW1791tkHtsNW6sQl/OoWTfwWbosNArA== + dependencies: + "@types/node" "*" + "@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": version "2.0.6" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" @@ -3672,11 +3693,6 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -4080,6 +4096,11 @@ base16@^1.0.0: resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" integrity sha1-4pf2DX7BAUp6lxo568ipjAtoHnA= +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -4132,6 +4153,15 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + bluebird@^3.7.1: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -4265,6 +4295,14 @@ buffer-indexof@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + builtins@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" @@ -4697,11 +4735,27 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@~1.1.4: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-string@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.6.0.tgz#c3915f61fe267672cb7e1e064c9d692219f6c312" + integrity sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/color/-/color-4.0.1.tgz#21df44cd10245a91b1ccf5ba031609b0e10e7d67" + integrity sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA== + dependencies: + color-convert "^2.0.1" + color-string "^1.6.0" + colord@^2.0.1: version "2.4.0" resolved "https://registry.yarnpkg.com/colord/-/colord-2.4.0.tgz#21a7b969ded0f7131bbf38fc64fc038c3b592de5" @@ -4747,7 +4801,7 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^4.0.0, commander@^4.1.1: +commander@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== @@ -4762,7 +4816,7 @@ commander@^6.1.0, commander@^6.2.0: resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== -commander@^7.1.0: +commander@^7.1.0, commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== @@ -5034,6 +5088,17 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" +cosmiconfig@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" @@ -5161,7 +5226,7 @@ css-tree@1.0.0-alpha.37: mdn-data "2.0.4" source-map "^0.6.1" -css-tree@^1.1.2: +css-tree@^1.1.2, css-tree@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== @@ -5311,6 +5376,11 @@ dateformat@^3.0.0: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== +dateformat@^4.2.1: + version "4.6.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" + integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== + debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -5367,6 +5437,13 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +decompress-response@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" + integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== + dependencies: + mimic-response "^2.0.0" + dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" @@ -5394,6 +5471,14 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +deep-rename-keys@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/deep-rename-keys/-/deep-rename-keys-0.2.1.tgz#ede78537d7a66a2be61517e2af956d7f58a3f1d8" + integrity sha1-7eeFN9emaivmFRfir5Vtf1ij8dg= + dependencies: + kind-of "^3.0.2" + rename-keys "^1.1.2" + deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" @@ -5531,6 +5616,11 @@ detect-indent@^6.0.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -5811,7 +5901,7 @@ encoding@^0.1.12: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.1.0: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -5908,6 +5998,121 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +esbuild-android-arm64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.15.tgz#3fc3ff0bab76fe35dd237476b5d2b32bb20a3d44" + integrity sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg== + +esbuild-darwin-64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz#8e9169c16baf444eacec60d09b24d11b255a8e72" + integrity sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ== + +esbuild-darwin-arm64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.15.tgz#1b07f893b632114f805e188ddfca41b2b778229a" + integrity sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ== + +esbuild-freebsd-64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.15.tgz#0b8b7eca1690c8ec94c75680c38c07269c1f4a85" + integrity sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA== + +esbuild-freebsd-arm64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.15.tgz#2e1a6c696bfdcd20a99578b76350b41db1934e52" + integrity sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ== + +esbuild-linux-32@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.13.15.tgz#6fd39f36fc66dd45b6b5f515728c7bbebc342a69" + integrity sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g== + +esbuild-linux-64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.13.15.tgz#9cb8e4bcd7574e67946e4ee5f1f1e12386bb6dd3" + integrity sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA== + +esbuild-linux-arm64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.15.tgz#3891aa3704ec579a1b92d2a586122e5b6a2bfba1" + integrity sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA== + +esbuild-linux-arm@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.15.tgz#8a00e99e6a0c6c9a6b7f334841364d8a2b4aecfe" + integrity sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA== + +esbuild-linux-mips64le@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.15.tgz#36b07cc47c3d21e48db3bb1f4d9ef8f46aead4f7" + integrity sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg== + +esbuild-linux-ppc64le@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.15.tgz#f7e6bba40b9a11eb9dcae5b01550ea04670edad2" + integrity sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ== + +esbuild-netbsd-64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.15.tgz#a2fedc549c2b629d580a732d840712b08d440038" + integrity sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w== + +esbuild-node-loader@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/esbuild-node-loader/-/esbuild-node-loader-0.6.3.tgz#3b90012f8bc2fcbb2ef76a659482c2c99840c5e8" + integrity sha512-Bf6o8SiMMh5+r20jsjAThNOtzo3t8Ye4Qdzz+twWHnxu28SdkGUr5ahq8iX0qbd+I9ge8sLNX7oQoNW1YzHlqA== + dependencies: + esbuild "^0.13.12" + +esbuild-openbsd-64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.15.tgz#b22c0e5806d3a1fbf0325872037f885306b05cd7" + integrity sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g== + +esbuild-sunos-64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.15.tgz#d0b6454a88375ee8d3964daeff55c85c91c7cef4" + integrity sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw== + +esbuild-windows-32@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.13.15.tgz#c96d0b9bbb52f3303322582ef8e4847c5ad375a7" + integrity sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw== + +esbuild-windows-64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz#1f79cb9b1e1bb02fb25cd414cb90d4ea2892c294" + integrity sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ== + +esbuild-windows-arm64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.15.tgz#482173070810df22a752c686509c370c3be3b3c3" + integrity sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA== + +esbuild@^0.13.12: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.13.15.tgz#db56a88166ee373f87dbb2d8798ff449e0450cdf" + integrity sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw== + optionalDependencies: + esbuild-android-arm64 "0.13.15" + esbuild-darwin-64 "0.13.15" + esbuild-darwin-arm64 "0.13.15" + esbuild-freebsd-64 "0.13.15" + esbuild-freebsd-arm64 "0.13.15" + esbuild-linux-32 "0.13.15" + esbuild-linux-64 "0.13.15" + esbuild-linux-arm "0.13.15" + esbuild-linux-arm64 "0.13.15" + esbuild-linux-mips64le "0.13.15" + esbuild-linux-ppc64le "0.13.15" + esbuild-netbsd-64 "0.13.15" + esbuild-openbsd-64 "0.13.15" + esbuild-sunos-64 "0.13.15" + esbuild-windows-32 "0.13.15" + esbuild-windows-64 "0.13.15" + esbuild-windows-arm64 "0.13.15" + escalade@^3.0.2, escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -6207,6 +6412,11 @@ eval@^0.1.4: dependencies: require-like ">= 0.1.1" +eventemitter3@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba" + integrity sha1-teEHm1n7XhuidxwKmTvgYKWMmbo= + eventemitter3@^4.0.0, eventemitter3@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -6275,6 +6485,11 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + expect@^27.0.6: version "27.0.6" resolved "https://registry.yarnpkg.com/expect/-/expect-27.0.6.tgz#a4d74fbe27222c718fff68ef49d78e26a8fd4c05" @@ -6662,6 +6877,11 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -6870,6 +7090,11 @@ gitconfiglocal@^1.0.0: dependencies: ini "^1.3.2" +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= + github-slugger@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.3.0.tgz#9bd0a95c5efdfc46005e82a906ef8e2a059124c9" @@ -6904,18 +7129,6 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" @@ -7508,6 +7721,11 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore-walk@^3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" @@ -7726,6 +7944,11 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + is-bigint@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" @@ -7989,7 +8212,7 @@ is-plain-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== @@ -9456,6 +9679,11 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +mimic-response@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== + min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" @@ -9499,7 +9727,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.2.0, minimist@^1.2.3, 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== @@ -9589,6 +9817,11 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + mkdirp-infer-owner@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" @@ -9669,20 +9902,16 @@ mute-stream@0.0.8, mute-stream@~0.0.4: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - nan@^2.12.1: version "2.14.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== +nanocolors@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/nanocolors/-/nanocolors-0.1.12.tgz#8577482c58cbd7b5bb1681db4cf48f11a87fd5f6" + integrity sha512-2nMHqg1x5PU+unxX7PGY7AuYxl2qDx7PSrTRjizr8sxdd3l/3hBuWWaki62qmtYm2U5i4Z5E7GbjlyDFhs9/EQ== + nanoid@^3.1.23: version "3.1.23" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" @@ -9705,6 +9934,11 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -9738,6 +9972,18 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-abi@^2.21.0: + version "2.30.1" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" + integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w== + dependencies: + semver "^5.4.1" + +node-addon-api@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.2.0.tgz#117cbb5a959dff0992e1c586ae0393573e4d2a87" + integrity sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q== + node-emoji@^1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" @@ -9967,7 +10213,7 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npmlog@^4.1.2: +npmlog@^4.0.1, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -10109,6 +10355,14 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== +omit-deep@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/omit-deep/-/omit-deep-0.3.0.tgz#21c8af3499bcadd29651a232cbcacbc52445ebec" + integrity sha1-IcivNJm8rdKWUaIyy8rLxSRF6+w= + dependencies: + is-plain-object "^2.0.1" + unset-value "^0.1.1" + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -10942,6 +11196,25 @@ postcss@^8.2.15, postcss@^8.2.4, postcss@^8.3.5: nanoid "^3.1.23" source-map-js "^0.6.2" +prebuild-install@^6.1.4: + version "6.1.4" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-6.1.4.tgz#ae3c0142ad611d58570b89af4986088a4937e00f" + integrity sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ== + dependencies: + detect-libc "^1.0.3" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^2.21.0" + npmlog "^4.0.1" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^3.0.3" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -11223,7 +11496,7 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.2.8: +rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -11283,6 +11556,15 @@ react-dom@^16.13.1, react-dom@^16.8.4: prop-types "^15.6.2" scheduler "^0.19.1" +react-dom@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.2" + react-error-boundary@^3.1.0: version "3.1.3" resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-3.1.3.tgz#276bfa05de8ac17b863587c9e0647522c25e2a0b" @@ -11349,15 +11631,14 @@ react-loadable@^5.5.0: dependencies: prop-types "^15.5.0" -react-reconciler@^0.25.1: - version "0.25.1" - resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.25.1.tgz#f9814d59d115e1210762287ce987801529363aaa" - integrity sha512-R5UwsIvRcSs3w8n9k3tBoTtUHdVhu9u84EG7E5M0Jk9F5i6DA1pQzPfUZd6opYWGy56MJOtV3VADzy6DRwYDjw== +react-reconciler@^0.26.2: + version "0.26.2" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.26.2.tgz#bbad0e2d1309423f76cf3c3309ac6c96e05e9d91" + integrity sha512-nK6kgY28HwrMNwDnMui3dvm3rCFjZrcGiuwLc5COUipBK5hWHLOxMJhSnSomirqWwjPBJKV1QcbkI0VJr7Gl1Q== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.19.1" + scheduler "^0.20.2" react-router-config@^5.1.1: version "5.1.1" @@ -11513,7 +11794,7 @@ read@1, read@~1.0.1: dependencies: mute-stream "~0.0.4" -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1: +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -11756,6 +12037,11 @@ remove-trailing-separator@^1.0.1: resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= +rename-keys@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/rename-keys/-/rename-keys-1.2.0.tgz#be602fb0b750476b513ebe85ba4465d03254f0a3" + integrity sha512-U7XpAktpbSgHTRSNRrjKSrjYkZKuhUukfoBlXWXUExCAqhzh1TU3BDRAfJmarcl5voKS+pbKU9MvyLWKZ4UEEg== + renderkid@^2.0.6: version "2.0.7" resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" @@ -11973,6 +12259,15 @@ rollup-plugin-typescript2@^0.30.0: resolve "1.20.0" tslib "2.1.0" +rollup-plugin-version-injector@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-version-injector/-/rollup-plugin-version-injector-1.3.3.tgz#df1f8d371bc127592c29aeda6914745db4013a48" + integrity sha512-+Rrf0xIFHkwFGuMfphVlAOtd9FlhHFh3vrDwamJ6+YR3IxebRHGVT879qwWzZ1CpWMCLlngb2MmHW5wC5EJqvg== + dependencies: + chalk "^4.1.0" + dateformat "^4.2.1" + lodash "^4.17.20" + rollup@^2.55.0: version "2.55.1" resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.55.1.tgz#66a444648e2fb603d8e329e77a61c608a6510fda" @@ -12057,6 +12352,14 @@ scheduler@^0.19.1: loose-envify "^1.1.0" object-assign "^4.1.1" +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" @@ -12233,6 +12536,20 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" +sharp@^0.29.1: + version "0.29.1" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.29.1.tgz#f60b50f24f399464a24187c86bd2da41aae50b85" + integrity sha512-DpgdAny9TuS+oWCQ7MRS8XyY9x6q1+yW3a5wNx0J3HrGuB/Jot/8WcT+lElHY9iJu2pwtegSGxqMaqFiMhs4rQ== + dependencies: + color "^4.0.1" + detect-libc "^1.0.3" + node-addon-api "^4.1.0" + prebuild-install "^6.1.4" + semver "^7.3.5" + simple-get "^3.1.0" + tar-fs "^2.1.1" + tunnel-agent "^0.6.0" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -12285,6 +12602,27 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^3.0.3, simple-get@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" + integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== + dependencies: + decompress-response "^4.2.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + sirv@^1.0.7: version "1.0.12" resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.12.tgz#d816c882b35489b3c63290e2f455ae3eccd5f652" @@ -12441,7 +12779,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.17, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19: +source-map-support@^0.5.17, source-map-support@^0.5.19, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -12813,18 +13151,6 @@ stylehacks@^5.0.1: browserslist "^4.16.0" postcss-selector-parser "^6.0.4" -sucrase@^3.16.0: - version "3.20.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.20.0.tgz#a80e865830e27d66a912c938491d474164b06205" - integrity sha512-Rsp+BX7DRuCleJvBAHN7gQ3ddk7U0rJev19XlIBF6dAq9vX4Tr5mHk4E7+ig/I7BM3DLYotCmm20lfBElT2XtQ== - dependencies: - commander "^4.0.0" - glob "7.1.6" - lines-and-columns "^1.1.6" - mz "^2.7.0" - pirates "^4.0.1" - ts-interface-checker "^0.1.9" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -12898,6 +13224,28 @@ svgo@^2.3.0: csso "^4.2.0" stable "^0.1.8" +svgo@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.7.0.tgz#e164cded22f4408fe4978f082be80159caea1e2d" + integrity sha512-aDLsGkre4fTDCWvolyW+fs8ZJFABpzLXbtdK1y71CKnHzAnpDxKXPj2mNKj+pyOXUCzFHzuxRJ94XOFygOWV3w== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + nanocolors "^0.1.12" + stable "^0.1.8" + +svgson@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/svgson/-/svgson-5.2.1.tgz#7481fb1af4a58be542a6bd2020c168c6b71381cb" + integrity sha512-nbM6QuyZiKzQ0Uo51VDta93YJAr96ikyT40PsgJRrzynOGsOlnmJ6zAK5hUFyE5gnxcg7yuOPUWbUlmV9K0+Dg== + dependencies: + deep-rename-keys "^0.2.1" + omit-deep "0.3.0" + xml-reader "2.4.3" + symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -12925,6 +13273,27 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== +tar-fs@^2.0.0, tar-fs@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + tar@^4.4.12: version "4.4.15" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.15.tgz#3caced4f39ebd46ddda4d6203d48493a919697f8" @@ -13023,20 +13392,6 @@ text-table@0.2.0, text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - throat@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" @@ -13214,17 +13569,10 @@ ts-essentials@^2.0.3: resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-2.0.12.tgz#c9303f3d74f75fa7528c3d49b80e089ab09d8745" integrity sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w== -ts-graphviz@^0.13.1: - version "0.13.2" - resolved "https://registry.yarnpkg.com/ts-graphviz/-/ts-graphviz-0.13.2.tgz#b96c680466b427ae8e0d42a45cbf476ce6fc4e27" - integrity sha512-ykQpHPT1RVNzv/ZN/zwawDIFHi8eiEl+H3x3B+ZOQ9eMUaosVMd1ePaf/CA9b15iix48cTa7RcXcWvI/ZgoNKw== - dependencies: - tslib "^2.0.0" - -ts-interface-checker@^0.1.9: - version "0.1.13" - resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" - integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== +ts-graphviz@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/ts-graphviz/-/ts-graphviz-0.16.0.tgz#7a6e6b5434854bc90ab861e70d5af0d6d20729a7" + integrity sha512-3fTPO+G6bSQNvMh/XQQzyiahVLMMj9kqYO99ivUraNJ3Wp05HZOOVtRhi6w9hq7+laP1MKHjLBtGWqTeb1fcpg== ts-jest@^27.0.4: version "27.0.4" @@ -13273,11 +13621,18 @@ tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0: +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== +tslog@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/tslog/-/tslog-3.2.1.tgz#37df1301211901eb65fd61b9ad7c8554264a7699" + integrity sha512-m8wAtox9wt+h6UDcN1WAQnYwRDOGhMIOp+GAuuufo8T8qKuu726i2W3r47BrA69goVOwgUkp5YwDTvAxTktvPg== + dependencies: + source-map-support "^0.5.19" + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -13584,6 +13939,14 @@ unquote@~1.1.1: resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= +unset-value@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-0.1.2.tgz#506810b867f27c2a5a6e9b04833631f6de58d310" + integrity sha1-UGgQuGfyfCpabpsEgzYx9t5Y0xA= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -14214,11 +14577,26 @@ xml-js@^1.6.11: dependencies: sax "^1.2.4" +xml-lexer@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/xml-lexer/-/xml-lexer-0.2.2.tgz#518193a4aa334d58fc7d248b549079b89907e046" + integrity sha1-UYGTpKozTVj8fSSLVJB5uJkH4EY= + dependencies: + eventemitter3 "^2.0.0" + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xml-reader@2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/xml-reader/-/xml-reader-2.4.3.tgz#9f810caf7c425a5aafb848b1c45103c9e71d7530" + integrity sha1-n4EMr3xCWlqvuEixxFEDyecddTA= + dependencies: + eventemitter3 "^2.0.0" + xml-lexer "^0.2.2" + xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"