diff --git a/.gitignore b/.gitignore index 4b2266583f5..cc1d13e0a62 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ node_modules +.varlet .idea .vscode *.log diff --git a/packages/varlet-cli-playground/docs/home.en-US.md b/packages/varlet-cli-playground/docs/home.en-US.md index 9201eab9f06..74da831571e 100644 --- a/packages/varlet-cli-playground/docs/home.en-US.md +++ b/packages/varlet-cli-playground/docs/home.en-US.md @@ -1,5 +1,4 @@ ### Intro -123123 Varlet is a Material design mobile component library developed based on `Vue3`, developed and maintained by partners in the community. ### Features diff --git a/packages/varlet-cli-playground/varlet.config.js b/packages/varlet-cli-playground/varlet.config.js index c7d0a00e8a3..1f1be1029ed 100644 --- a/packages/varlet-cli-playground/varlet.config.js +++ b/packages/varlet-cli-playground/varlet.config.js @@ -1,5 +1,5 @@ module.exports = { - useMobile: true, + useMobile: false, pc: { menu: [ { diff --git a/packages/varlet-cli/package.json b/packages/varlet-cli/package.json index d40e20b6101..975a835ff3d 100644 --- a/packages/varlet-cli/package.json +++ b/packages/varlet-cli/package.json @@ -44,6 +44,7 @@ "babel-jest": "^26.6.3", "babel-loader": "^8.1.0", "chalk": "^4.1.0", + "chokidar": "^3.5.2", "clean-webpack-plugin": "^3.0.0", "clipboard": "^2.0.6", "commander": "^6.2.0", diff --git a/packages/varlet-cli/src/commands/build.ts b/packages/varlet-cli/src/commands/build.ts index 85d637e43e6..7313f84df98 100644 --- a/packages/varlet-cli/src/commands/build.ts +++ b/packages/varlet-cli/src/commands/build.ts @@ -1,20 +1,13 @@ import webpack from 'webpack' import logger from '../shared/logger' import { ensureDirSync } from 'fs-extra' -import { buildMobileSiteRoutes, buildPcSiteRoutes } from '../compiler/compileRoutes' import { getBuildConfig } from '../config/webpack.build.config' import { SRC_DIR } from '../shared/constant' -import { getVarletConfig } from '../config/varlet.config' -import { setAlias } from '../config/webpack.base.config' export async function build() { ensureDirSync(SRC_DIR) const config = getBuildConfig() - const [mobileRouteId, pcRouteId] = await Promise.all([buildMobileSiteRoutes(), buildPcSiteRoutes()]) - const { configId } = getVarletConfig() - - setAlias(config, { pcRouteId, mobileRouteId, configId }) webpack(config, (err, stats) => { err && logger.error(err.toString()) diff --git a/packages/varlet-cli/src/commands/create.ts b/packages/varlet-cli/src/commands/create.ts index b6e71437096..d1baf6be091 100644 --- a/packages/varlet-cli/src/commands/create.ts +++ b/packages/varlet-cli/src/commands/create.ts @@ -6,7 +6,7 @@ import { DOCS_DIR_NAME, EXAMPLE_DIR_NAME, SRC_DIR, TESTS_DIR_NAME } from '../sha import { getVarletConfig } from '../config/varlet.config' import { get } from 'lodash' -const { varletConfig } = getVarletConfig() +const varletConfig = getVarletConfig() export async function create(name: string) { const namespace = get(varletConfig, 'namespace') diff --git a/packages/varlet-cli/src/commands/dev.ts b/packages/varlet-cli/src/commands/dev.ts index 9ab47a07230..96d75fafcf3 100644 --- a/packages/varlet-cli/src/commands/dev.ts +++ b/packages/varlet-cli/src/commands/dev.ts @@ -4,10 +4,7 @@ import logger from '../shared/logger' import { getPort } from 'portfinder' import { ensureDirSync } from 'fs-extra' import { getDevConfig } from '../config/webpack.dev.config' -import { buildMobileSiteRoutes, buildPcSiteRoutes } from '../compiler/compileRoutes' import { SRC_DIR } from '../shared/constant' -import { setAlias } from '../config/webpack.base.config' -import { getVarletConfig } from '../config/varlet.config' export function runDevServer(port: number, config: any) { const { host } = config.devServer @@ -30,11 +27,6 @@ export async function dev() { ensureDirSync(SRC_DIR) const config = getDevConfig() - const [mobileRouteId, pcRouteId] = await Promise.all([buildMobileSiteRoutes(), buildPcSiteRoutes()]) - const { configId } = getVarletConfig() - - setAlias(config, { pcRouteId, mobileRouteId, configId }) - const { port } = config.devServer getPort( { diff --git a/packages/varlet-cli/src/compiler/compileRoutes.ts b/packages/varlet-cli/src/compiler/compileRoutes.ts index c35819de4b5..e88fa1ae16d 100644 --- a/packages/varlet-cli/src/compiler/compileRoutes.ts +++ b/packages/varlet-cli/src/compiler/compileRoutes.ts @@ -1,17 +1,23 @@ import slash from 'slash' -import hash from 'hash-sum' import { DOCS_DIR_NAME, EXAMPLE_DIR_INDEX, EXAMPLE_DIR_NAME, ROOT_DOCS_DIR, + SITE_DOCS_GLOB, + SITE_EXAMPLE_GLOB, + SITE_MOBILE_ROUTES, + SITE_PC_ROUTES, SRC_DIR, - SITE_PC, - SITE_MOBILE, + VARLET_CONFIG, } from '../shared/constant' -import { pathExistsSync, readdir, readdirSync, writeFile } from 'fs-extra' +import { pathExistsSync, readdir, readdirSync } from 'fs-extra' import { resolve } from 'path' -import { isMD } from '../shared/fsUtils' +import { isMD, outputFileSyncOnChange } from '../shared/fsUtils' +import { getVarletConfig } from '../config/varlet.config' +import chokidar from 'chokidar' +import type { Compiler } from 'webpack' +import type { FSWatcher } from 'chokidar' const EXAMPLE_COMPONENT_NAME_RE = /\/([-\w]+)\/example\/index.vue/ const COMPONENT_DOCS_RE = /\/([-\w]+)\/docs\/([-\w]+)\.md/ @@ -82,7 +88,7 @@ export async function findRootDocsPaths(): Promise { return dir.filter(existPath).map(slashPath) } -export async function buildMobileSiteRoutes(): Promise { +export async function buildMobileSiteRoutes() { const examplePaths: string[] = await findExamplePaths() const routes = examplePaths.map( @@ -98,16 +104,10 @@ export async function buildMobileSiteRoutes(): Promise { ${routes.join(',')} ]` - const mobileRouteId = hash(source) - - const path = resolve(SITE_MOBILE, `./${mobileRouteId}.routes.ts`) - - await writeFile(path, source) - - return mobileRouteId + await outputFileSyncOnChange(SITE_MOBILE_ROUTES, source) } -export async function buildPcSiteRoutes(): Promise { +export async function buildPcSiteRoutes() { const [componentDocsPaths, rootDocsPaths] = await Promise.all([findComponentDocsPaths(), findRootDocsPaths()]) const componentDocsRoutes = componentDocsPaths.map( @@ -134,11 +134,26 @@ export async function buildPcSiteRoutes(): Promise { ${[...componentDocsRoutes, rootDocsRoutes].join(',')} ]` - const pcRouteId = hash(source) - - const path = resolve(SITE_PC, `./${pcRouteId}.routes.ts`) + outputFileSyncOnChange(SITE_PC_ROUTES, source) +} - await writeFile(path, source) +export async function buildSiteEntry() { + getVarletConfig() + await Promise.all([buildMobileSiteRoutes(), buildPcSiteRoutes()]) +} - return pcRouteId +const PLUGIN_NAME = 'VarletSitePlugin' + +export class VarletSitePlugin { + apply(compiler: Compiler) { + if (process.env.NODE_ENV === 'production') { + compiler.hooks.beforeCompile.tapPromise('VarletSitePlugin', buildSiteEntry) + } else { + const watcher: FSWatcher = chokidar.watch([SITE_EXAMPLE_GLOB, SITE_DOCS_GLOB, VARLET_CONFIG]) + compiler.hooks.watchRun.tapPromise(PLUGIN_NAME, async () => { + watcher.on('add', buildSiteEntry).on('unlink', buildSiteEntry).on('change', buildSiteEntry) + await buildSiteEntry() + }) + } + } } diff --git a/packages/varlet-cli/src/compiler/compileTemplateHighlight.ts b/packages/varlet-cli/src/compiler/compileTemplateHighlight.ts index 15b7187c3ac..0e2c2acd88b 100644 --- a/packages/varlet-cli/src/compiler/compileTemplateHighlight.ts +++ b/packages/varlet-cli/src/compiler/compileTemplateHighlight.ts @@ -17,7 +17,7 @@ import { isDir, isMD } from '../shared/fsUtils' import { get } from 'lodash' import { getVarletConfig } from '../config/varlet.config' -const { varletConfig } = getVarletConfig() +const varletConfig = getVarletConfig() const TABLE_HEAD_RE = /\s*\|.*\|\s*\n\s*\|.*---+\s*\|\s*\n+/ const TABLE_FOOT_RE = /(\|\s*$)|(\|\s*\n(?!\s*\|))/ diff --git a/packages/varlet-cli/src/config/varlet.config.ts b/packages/varlet-cli/src/config/varlet.config.ts index 15c9d2a7202..0b04a6eaa8e 100644 --- a/packages/varlet-cli/src/config/varlet.config.ts +++ b/packages/varlet-cli/src/config/varlet.config.ts @@ -1,21 +1,19 @@ -import { pathExistsSync, writeFileSync } from 'fs-extra' -import hash from 'hash-sum' -import { resolve } from 'path' +import { pathExistsSync } from 'fs-extra' import { merge } from 'lodash' -import { VARLET_CONFIG, SITE } from '../shared/constant' +import { VARLET_CONFIG, SITE_CONFIG } from '../shared/constant' +import { outputFileSyncOnChange } from '../shared/fsUtils' export function getVarletConfig() { - const config = (pathExistsSync(VARLET_CONFIG) && require(VARLET_CONFIG)) || {} - const mergedConfig = merge(require('../../varlet.default.config.js'), config) - const source = JSON.stringify(mergedConfig, null, 2) + let config = {} - const configId = hash(source) - const path = resolve(SITE, `./${configId}.site.config.json`) + if (pathExistsSync(VARLET_CONFIG)) { + delete require.cache[require.resolve(VARLET_CONFIG)] + config = require(VARLET_CONFIG) + } - writeFileSync(path, source) + const mergedConfig = merge(require('../../varlet.default.config.js'), config) + const source = JSON.stringify(mergedConfig, null, 2) + outputFileSyncOnChange(SITE_CONFIG, source) - return { - varletConfig: mergedConfig, - configId, - } + return mergedConfig } diff --git a/packages/varlet-cli/src/config/webpack.base.config.ts b/packages/varlet-cli/src/config/webpack.base.config.ts index 781cbf73008..2985af621b9 100644 --- a/packages/varlet-cli/src/config/webpack.base.config.ts +++ b/packages/varlet-cli/src/config/webpack.base.config.ts @@ -1,18 +1,17 @@ import { EXTENSIONS, POSTCSS_CONFIG, - SITE, - SITE_MOBILE, + SITE_CONFIG, SITE_MOBILE_MAIN, - SITE_PC, + SITE_MOBILE_ROUTES, SITE_PC_MAIN, + SITE_PC_ROUTES, TS_CONFIG, } from '../shared/constant' import { ForkTsCheckerWebpackPlugin } from 'fork-ts-checker-webpack-plugin/lib/ForkTsCheckerWebpackPlugin' import { VueLoaderPlugin } from 'vue-loader' import { pathExistsSync } from 'fs-extra' import { WebpackPluginInstance } from 'webpack' -import { resolve } from 'path' import { createPostcssOptions } from './postcss.config' export const CSS_LOADERS = [ @@ -48,89 +47,85 @@ export function createBasePlugins(): WebpackPluginInstance[] { return plugins } -export function getBaseConfig() { - return { - entry: { - pc: SITE_PC_MAIN, - mobile: SITE_MOBILE_MAIN, - }, - resolve: { - extensions: EXTENSIONS, - alias: {}, +export const BASE_CONFIG = { + entry: { + pc: SITE_PC_MAIN, + mobile: SITE_MOBILE_MAIN, + }, + resolve: { + extensions: EXTENSIONS, + alias: { + '@config': SITE_CONFIG, + '@pc-routes': SITE_PC_ROUTES, + '@mobile-routes': SITE_MOBILE_ROUTES, }, - module: { - rules: [ - { - test: /\.vue$/, - use: ['vue-loader'], - }, - { - test: /\.(js|ts)$/, - use: [ - { - loader: 'babel-loader', - options: { - presets: ['@babel/preset-env', '@babel/preset-typescript'], - plugins: ['@babel/plugin-transform-runtime', '@babel/plugin-transform-typescript'], - }, + }, + module: { + rules: [ + { + test: /\.vue$/, + use: ['vue-loader'], + }, + { + test: /\.(js|ts)$/, + use: [ + { + loader: 'babel-loader', + options: { + presets: ['@babel/preset-env', '@babel/preset-typescript'], + plugins: ['@babel/plugin-transform-runtime', '@babel/plugin-transform-typescript'], }, - ], - exclude: /node_modules/, - }, - { - test: /\.md$/, - use: ['vue-loader', '@varlet/markdown-loader'], - }, - { - test: /\.(png|jpg|gif|jpeg|svg)$/, - type: 'asset', - generator: { - filename: 'images/[hash][ext][query]', - }, - }, - { - test: /\.(eot|ttf|woff|woff2)$/, - type: 'asset', - generator: { - filename: 'fonts/[hash][ext][query]', - }, - }, - { - test: /\.(mp3|wav|ogg|acc)$/, - type: 'asset/resource', - generator: { - filename: 'audio/[hash][ext][query]', }, + ], + exclude: /node_modules/, + }, + { + test: /\.md$/, + use: ['vue-loader', '@varlet/markdown-loader'], + }, + { + test: /\.(png|jpg|gif|jpeg|svg)$/, + type: 'asset', + generator: { + filename: 'images/[hash][ext][query]', }, - { - test: /\.(mp4|webm)$/, - type: 'asset/resource', - generator: { - filename: 'video/[hash][ext][query]', - }, + }, + { + test: /\.(eot|ttf|woff|woff2)$/, + type: 'asset', + generator: { + filename: 'fonts/[hash][ext][query]', }, - { - test: /\.css$/, - use: CSS_LOADERS, + }, + { + test: /\.(mp3|wav|ogg|acc)$/, + type: 'asset/resource', + generator: { + filename: 'audio/[hash][ext][query]', }, - { - test: /\.less$/, - use: [...CSS_LOADERS, 'less-loader'], + }, + { + test: /\.(mp4|webm)$/, + type: 'asset/resource', + generator: { + filename: 'video/[hash][ext][query]', }, - ], - }, - cache: { - type: 'filesystem', - buildDependencies: { - config: [__filename], }, + { + test: /\.css$/, + use: CSS_LOADERS, + }, + { + test: /\.less$/, + use: [...CSS_LOADERS, 'less-loader'], + }, + ], + }, + cache: { + type: 'filesystem', + buildDependencies: { + config: [__filename], }, - plugins: createBasePlugins(), - } -} - -export function setAlias(config: any, { pcRouteId, mobileRouteId, configId }: Record) { - config.resolve.alias['@pc-routes'] = resolve(SITE_PC, `./${pcRouteId}.routes.ts`) - config.resolve.alias['@mobile-routes'] = resolve(SITE_MOBILE, `./${mobileRouteId}.routes.ts`) - config.resolve.alias['@config'] = resolve(SITE, `./${configId}.site.config.json`) -} + }, + plugins: createBasePlugins(), +} as any diff --git a/packages/varlet-cli/src/config/webpack.build.config.ts b/packages/varlet-cli/src/config/webpack.build.config.ts index fac1526a5b8..86ce61f921f 100644 --- a/packages/varlet-cli/src/config/webpack.build.config.ts +++ b/packages/varlet-cli/src/config/webpack.build.config.ts @@ -1,13 +1,14 @@ import merge from 'webpack-merge' import WebpackBarPlugin from 'webpackbar' import CopyWebpackPlugin from 'copy-webpack-plugin' -import { getBaseConfig } from './webpack.base.config' +import { BASE_CONFIG } from './webpack.base.config' import { SITE_OUTPUT_PATH, PRIMARY_COLOR, SITE_PUBLIC_PATH } from '../shared/constant' import { CleanWebpackPlugin } from 'clean-webpack-plugin' import { HTML_WEBPACK_PLUGINS } from './webpack.dev.config' +import { VarletSitePlugin } from '../compiler/compileRoutes' export function getBuildConfig() { - return merge(getBaseConfig() as any, { + return merge(BASE_CONFIG, { mode: 'production', output: { publicPath: './', @@ -24,6 +25,7 @@ export function getBuildConfig() { new CopyWebpackPlugin({ patterns: [{ from: SITE_PUBLIC_PATH, to: SITE_OUTPUT_PATH }], }), + new VarletSitePlugin(), ...HTML_WEBPACK_PLUGINS, ], }) diff --git a/packages/varlet-cli/src/config/webpack.dev.config.ts b/packages/varlet-cli/src/config/webpack.dev.config.ts index 08f083ca0bc..1bd1b3ee256 100644 --- a/packages/varlet-cli/src/config/webpack.dev.config.ts +++ b/packages/varlet-cli/src/config/webpack.dev.config.ts @@ -1,13 +1,14 @@ import merge from 'webpack-merge' import WebpackBarPlugin from 'webpackbar' import HtmlWebpackPlugin from 'html-webpack-plugin' -import { getBaseConfig } from './webpack.base.config' +import { BASE_CONFIG } from './webpack.base.config' import { PRIMARY_COLOR } from '../shared/constant' import { resolve } from 'path' import { get } from 'lodash' import { getVarletConfig } from './varlet.config' +import { VarletSitePlugin } from '../compiler/compileRoutes' -const { varletConfig } = getVarletConfig() +const varletConfig = getVarletConfig() export function createHtmlPluginOptions(type: 'pc' | 'mobile') { return { @@ -36,7 +37,7 @@ export const HTML_WEBPACK_PLUGINS = [ ] export function getDevConfig() { - return merge(getBaseConfig() as any, { + return merge(BASE_CONFIG, { mode: 'development', devtool: 'source-map', devServer: { @@ -64,6 +65,7 @@ export function getDevConfig() { name: 'Site development building', color: PRIMARY_COLOR, }), + new VarletSitePlugin(), ...HTML_WEBPACK_PLUGINS, ], }) diff --git a/packages/varlet-cli/src/config/webpack.umd.config.ts b/packages/varlet-cli/src/config/webpack.umd.config.ts index 52188cbb86c..5ac168eb751 100644 --- a/packages/varlet-cli/src/config/webpack.umd.config.ts +++ b/packages/varlet-cli/src/config/webpack.umd.config.ts @@ -1,15 +1,15 @@ import merge from 'webpack-merge' import { resolve } from 'path' -import { getBaseConfig } from './webpack.base.config' +import { BASE_CONFIG } from './webpack.base.config' import { ES_DIR, UMD_DIR } from '../shared/constant' import { getVarletConfig } from './varlet.config' import { get } from 'lodash' export function getUmdConfig() { - const { varletConfig } = getVarletConfig() + const varletConfig = getVarletConfig() const name: string = get(varletConfig, 'name') - return merge(getBaseConfig() as any, { + return merge(BASE_CONFIG, { mode: 'production', entry: resolve(ES_DIR, 'umdIndex.js'), output: { diff --git a/packages/varlet-cli/src/shared/constant.ts b/packages/varlet-cli/src/shared/constant.ts index 9210e4c3e9f..1bce8488abe 100644 --- a/packages/varlet-cli/src/shared/constant.ts +++ b/packages/varlet-cli/src/shared/constant.ts @@ -20,12 +20,15 @@ export const PRIMARY_COLOR = '#3a7afe' // site export const SITE_MOBILE_MAIN = resolve(__dirname, '../../site/mobile/main.ts') -export const SITE_MOBILE = resolve(__dirname, '../../site/mobile') export const SITE_PC_MAIN = resolve(__dirname, '../../site/pc/main.ts') -export const SITE_PC = resolve(__dirname, '../../site/pc') export const SITE = resolve(__dirname, '../../site') export const SITE_OUTPUT_PATH = resolve(CWD, 'site') export const SITE_PUBLIC_PATH = resolve(CWD, 'public') +export const SITE_PC_ROUTES = resolve(CWD, '.varlet/pc.routes.ts') +export const SITE_MOBILE_ROUTES = resolve(CWD, '.varlet/mobile.routes.ts') +export const SITE_CONFIG = resolve(CWD, '.varlet/site.config.json') +export const SITE_DOCS_GLOB = resolve(CWD, './docs/**') +export const SITE_EXAMPLE_GLOB = resolve(CWD, './src/**/example/**') // template highlight export const HL_COMPONENT_NAME_RE = /.*(\/|\\)(.+)(\/|\\)docs(\/|\\)/ diff --git a/packages/varlet-cli/src/shared/fsUtils.ts b/packages/varlet-cli/src/shared/fsUtils.ts index 20201c4b80c..49ede38b754 100644 --- a/packages/varlet-cli/src/shared/fsUtils.ts +++ b/packages/varlet-cli/src/shared/fsUtils.ts @@ -1,5 +1,14 @@ import { parse, extname, resolve } from 'path' -import { lstatSync, pathExistsSync, readdir, readdirSync } from 'fs-extra' +import { + ensureDirSync, + ensureFileSync, + lstatSync, + outputFileSync, + pathExistsSync, + readdir, + readdirSync, + readFileSync, +} from 'fs-extra' import { EXAMPLE_DIR_NAME, SRC_DIR, TESTS_DIR_NAME } from './constant' export async function getComponentNames(): Promise { @@ -33,6 +42,14 @@ export function hasSFC(path: string): boolean { return dir.some((filename) => isSFC(resolve(path, filename))) } +export function outputFileSyncOnChange(path: string, code: string) { + ensureFileSync(path) + const content = readFileSync(path, 'utf-8') + if (content !== code) { + outputFileSync(path, code) + } +} + export function isScript(path: string): boolean { return (pathExistsSync(path) && extname(path) === '.js') || extname(path) === '.ts' } diff --git a/yarn.lock b/yarn.lock index 65dfb207037..7d4fc418ec6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3482,6 +3482,14 @@ anymatch@^3.0.3, anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -4291,6 +4299,21 @@ chokidar@^3.3.0: optionalDependencies: fsevents "~2.1.2" +chokidar@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chownr@^1.1.1, chownr@^1.1.2: version "1.1.4" resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -6558,6 +6581,11 @@ fsevents@~2.1.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -6765,7 +6793,7 @@ glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" -glob-parent@^5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -11042,6 +11070,13 @@ readdirp@~3.5.0: dependencies: picomatch "^2.2.1" +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"