From 6435db419ab8f79059102820f7eef5e7db3b7ba5 Mon Sep 17 00:00:00 2001 From: shulan Date: Tue, 2 Apr 2024 11:22:48 +0000 Subject: [PATCH 1/3] feat: improve tree shake traverse (#1118) * improve tree shake traverse * fix: remove unused reverse read variable * feat: disable treeShaking and lazyCompilation same time in development mode --- .changeset/cold-adults-flow.md | 6 + .../self-executed/class/static/foo.ts | 5 + .../self-executed/class/static/index.ts | 3 + .../self-executed/class/static/output.js | 30 ++++ .../decl/vars_reverse_read/dep.ts | 34 +++++ .../decl/vars_reverse_read/index.ts | 3 + .../decl/vars_reverse_read/output.js | 52 +++++++ crates/plugin_tree_shake/src/module.rs | 142 +++++++++++++++--- .../src/statement_graph/module_analyze.rs | 6 +- packages/core/src/config/index.ts | 10 ++ 10 files changed, 265 insertions(+), 26 deletions(-) create mode 100644 .changeset/cold-adults-flow.md create mode 100644 crates/compiler/tests/fixtures/tree_shake/self-executed/class/static/foo.ts create mode 100644 crates/compiler/tests/fixtures/tree_shake/self-executed/class/static/index.ts create mode 100644 crates/compiler/tests/fixtures/tree_shake/self-executed/class/static/output.js create mode 100644 crates/compiler/tests/fixtures/tree_shake/self-executed/decl/vars_reverse_read/dep.ts create mode 100644 crates/compiler/tests/fixtures/tree_shake/self-executed/decl/vars_reverse_read/index.ts create mode 100644 crates/compiler/tests/fixtures/tree_shake/self-executed/decl/vars_reverse_read/output.js diff --git a/.changeset/cold-adults-flow.md b/.changeset/cold-adults-flow.md new file mode 100644 index 000000000..f53a1582d --- /dev/null +++ b/.changeset/cold-adults-flow.md @@ -0,0 +1,6 @@ +--- +'@farmfe/core': patch +--- + +- remove unused reverse read variable +- disable treeShaking and lazyCompilation same time in development mode \ No newline at end of file diff --git a/crates/compiler/tests/fixtures/tree_shake/self-executed/class/static/foo.ts b/crates/compiler/tests/fixtures/tree_shake/self-executed/class/static/foo.ts new file mode 100644 index 000000000..802968363 --- /dev/null +++ b/crates/compiler/tests/fixtures/tree_shake/self-executed/class/static/foo.ts @@ -0,0 +1,5 @@ +export class Foo { + static bar() {} +} + +Foo.bar(); diff --git a/crates/compiler/tests/fixtures/tree_shake/self-executed/class/static/index.ts b/crates/compiler/tests/fixtures/tree_shake/self-executed/class/static/index.ts new file mode 100644 index 000000000..95dd45ab4 --- /dev/null +++ b/crates/compiler/tests/fixtures/tree_shake/self-executed/class/static/index.ts @@ -0,0 +1,3 @@ +import { Foo } from './foo'; + +console.log(Foo); \ No newline at end of file diff --git a/crates/compiler/tests/fixtures/tree_shake/self-executed/class/static/output.js b/crates/compiler/tests/fixtures/tree_shake/self-executed/class/static/output.js new file mode 100644 index 000000000..4288c115f --- /dev/null +++ b/crates/compiler/tests/fixtures/tree_shake/self-executed/class/static/output.js @@ -0,0 +1,30 @@ +//index.js: + (globalThis || window || global)['__farm_default_namespace__'] = {__FARM_TARGET_ENV__: 'browser'};(function(r,e){var t={};function n(r){return Promise.resolve(o(r))}function o(e){if(t[e])return t[e].exports;var i={id:e,exports:{}};r[e](i,i.exports,o,n);t[e]=i;return i.exports}o(e)})({"0b3bded0":function (module, exports, farmRequire, farmDynamicRequire) { + console.log("runtime/index.js")(globalThis || window || global)["__farm_default_namespace__"].__farm_module_system__.setPlugins([]); +} +,},"0b3bded0");(function(_){for(var r in _){_[r].__farm_resource_pot__='index_e094.js';(globalThis || window || global)['__farm_default_namespace__'].__farm_module_system__.register(r,_[r])}})({"6d686e48":function (module, exports, farmRequire, farmDynamicRequire) { + "use strict"; + Object.defineProperty(exports, "__esModule", { + value: true + }); + Object.defineProperty(exports, "Foo", { + enumerable: true, + get: function() { + return Foo; + } + }); + class Foo { + static bar() {} + } + Foo.bar(); +} +, +"b5d64806":function (module, exports, farmRequire, farmDynamicRequire) { + "use strict"; + Object.defineProperty(exports, "__esModule", { + value: true + }); + var _foo = farmRequire("6d686e48"); + console.log(_foo.Foo); +} +,});(globalThis || window || global)['__farm_default_namespace__'].__farm_module_system__.setInitialLoadedResources([]);(globalThis || window || global)['__farm_default_namespace__'].__farm_module_system__.setDynamicModuleResourcesMap({ });var farmModuleSystem = (globalThis || window || global)['__farm_default_namespace__'].__farm_module_system__;farmModuleSystem.bootstrap();var entry = farmModuleSystem.require("b5d64806"); \ No newline at end of file diff --git a/crates/compiler/tests/fixtures/tree_shake/self-executed/decl/vars_reverse_read/dep.ts b/crates/compiler/tests/fixtures/tree_shake/self-executed/decl/vars_reverse_read/dep.ts new file mode 100644 index 000000000..00e656dd2 --- /dev/null +++ b/crates/compiler/tests/fixtures/tree_shake/self-executed/decl/vars_reverse_read/dep.ts @@ -0,0 +1,34 @@ +const a1 = {}; + +const b1 = { a1 }; + +const c1 = { b1 }; + +const d1 = { c1 }; + +const e1 = { d1 }; + +export { a1 }; + +const a2 = {}; +const b2 = { a2 }; + +b2.a2.aaa = 2; + +export { a2 }; + +const a3 = {}; + +const b3 = { a3 }; + +console.log(b3); + +const c3 = { b3 }; + +console.log(c3); + +const d3 = { c3 }; + +const e3 = { d3 }; + +export { a3 }; diff --git a/crates/compiler/tests/fixtures/tree_shake/self-executed/decl/vars_reverse_read/index.ts b/crates/compiler/tests/fixtures/tree_shake/self-executed/decl/vars_reverse_read/index.ts new file mode 100644 index 000000000..794725253 --- /dev/null +++ b/crates/compiler/tests/fixtures/tree_shake/self-executed/decl/vars_reverse_read/index.ts @@ -0,0 +1,3 @@ +import { a1, a2, a3 } from './dep'; + +console.log(a1, a2, a3); diff --git a/crates/compiler/tests/fixtures/tree_shake/self-executed/decl/vars_reverse_read/output.js b/crates/compiler/tests/fixtures/tree_shake/self-executed/decl/vars_reverse_read/output.js new file mode 100644 index 000000000..62f47ed4a --- /dev/null +++ b/crates/compiler/tests/fixtures/tree_shake/self-executed/decl/vars_reverse_read/output.js @@ -0,0 +1,52 @@ +//index.js: + (globalThis || window || global)['__farm_default_namespace__'] = {__FARM_TARGET_ENV__: 'browser'};(function(r,e){var t={};function n(r){return Promise.resolve(o(r))}function o(e){if(t[e])return t[e].exports;var i={id:e,exports:{}};r[e](i,i.exports,o,n);t[e]=i;return i.exports}o(e)})({"0b3bded0":function (module, exports, farmRequire, farmDynamicRequire) { + console.log("runtime/index.js")(globalThis || window || global)["__farm_default_namespace__"].__farm_module_system__.setPlugins([]); +} +,},"0b3bded0");(function(_){for(var r in _){_[r].__farm_resource_pot__='index_ddf1.js';(globalThis || window || global)['__farm_default_namespace__'].__farm_module_system__.register(r,_[r])}})({"05ee5ec7":function (module, exports, farmRequire, farmDynamicRequire) { + "use strict"; + Object.defineProperty(exports, "__esModule", { + value: true + }); + function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); + } + _export(exports, { + a1: function() { + return a1; + }, + a2: function() { + return a2; + }, + a3: function() { + return a3; + } + }); + const a1 = {}; + const a2 = {}; + const b2 = { + a2 + }; + b2.a2.aaa = 2; + const a3 = {}; + const b3 = { + a3 + }; + console.log(b3); + const c3 = { + b3 + }; + console.log(c3); +} +, +"b5d64806":function (module, exports, farmRequire, farmDynamicRequire) { + "use strict"; + Object.defineProperty(exports, "__esModule", { + value: true + }); + var _dep = farmRequire("05ee5ec7"); + console.log(_dep.a1, _dep.a2, _dep.a3); +} +,});(globalThis || window || global)['__farm_default_namespace__'].__farm_module_system__.setInitialLoadedResources([]);(globalThis || window || global)['__farm_default_namespace__'].__farm_module_system__.setDynamicModuleResourcesMap({ });var farmModuleSystem = (globalThis || window || global)['__farm_default_namespace__'].__farm_module_system__;farmModuleSystem.bootstrap();var entry = farmModuleSystem.require("b5d64806"); \ No newline at end of file diff --git a/crates/plugin_tree_shake/src/module.rs b/crates/plugin_tree_shake/src/module.rs index e3b4dd791..912a8e330 100644 --- a/crates/plugin_tree_shake/src/module.rs +++ b/crates/plugin_tree_shake/src/module.rs @@ -1,4 +1,5 @@ use std::{ + borrow::Cow, collections::{HashMap, HashSet}, mem, }; @@ -44,6 +45,18 @@ pub enum UsedExports { Partial(HashMap>), } +#[derive(Debug)] +enum VisitedMode { + Normal, + Enforce, +} + +impl VisitedMode { + fn removable(&self) -> bool { + !matches!(self, VisitedMode::Enforce) + } +} + impl UsedExports { pub fn add_used_export(&mut self, module_id: &ModuleId, used_export: &dyn ToString) { match self { @@ -302,39 +315,93 @@ impl TreeShakeModule { entry: &'a ItemId, stack: &mut Vec<&'a ItemId>, result: &mut HashSet, - visited: &mut HashSet<&'a ItemId>, + visited: &mut HashMap<&'a ItemId, VisitedMode>, module_define_graph: &'a ModuleAnalyze, stmt_graph: &StatementGraph, - ) { - stack.push(entry); - - let edges = module_define_graph.reference_edges(entry); + reverse_terser_chain: &mut Vec, + ) -> bool { + let collection_result = |visited: &mut HashMap<&'a ItemId, VisitedMode>, + reverse_terser_chain: &mut Vec, + result: &mut HashSet, + stack: &mut Vec<&'a ItemId>| { + if !reverse_terser_chain.is_empty() { + if reverse_terser_chain + .iter() + .any(|mode| matches!(mode, Mode::Write)) + { + let collections = stack.iter().map(|item| (*item).clone()).collect::>(); + + for item in collections { + visited + .get_mut(&item) + .map(|item| *item = VisitedMode::Enforce); + result.insert(item); + } + true + } else { + false + } + } else { + result.extend(stack.iter().map(|item| (*item).clone()).collect::>()); + true + } + }; - let collection_result = |result: &mut HashSet, stack: &mut Vec<&'a ItemId>| { - result.extend(stack.iter().map(|item| (*item).clone()).collect::>()); - stack.clear(); + let break_tenser = |stack: &mut Vec<&'a ItemId>| { + stack.pop(); }; - if visited.contains(entry) || !module_define_graph.has_node(entry) { - collection_result(result, stack); - return; + if visited.contains_key(entry) { + return collection_result(visited, reverse_terser_chain, result, stack); + } + + stack.push(entry); + + if !module_define_graph.has_node(entry) { + let is_collected = collection_result(visited, reverse_terser_chain, result, stack); + break_tenser(stack); + return is_collected; } - if edges.is_empty() { - collection_result(result, stack); + let edges = module_define_graph.reference_edges(entry); + + if edges.is_empty() || edges.iter().all(|(source, target, _)| source == target) { + let is_collected = collection_result(visited, reverse_terser_chain, result, stack); + break_tenser(stack); + is_collected } else { - visited.insert(entry); + visited.insert(entry, VisitedMode::Normal); + let mut is_contain_reverse_edge = false; + let mut is_collected = false; + let push_reverse_terser_chain = + |reverse_terser_chain: &mut Vec, mode: Mode, create| { + if !reverse_terser_chain.is_empty() || create { + reverse_terser_chain.push(mode); + } + }; + + let pop_reverse_terser_chain = |reverse_terser_chain: &mut Vec| { + reverse_terser_chain.pop(); + }; + for (source, target, edge) in edges { + if source == target { + continue; + } + match (edge.mode, edge.nested) { (Mode::Read, _) => { - dfs( + push_reverse_terser_chain(reverse_terser_chain, Mode::Read, false); + is_collected = dfs( target, stack, result, visited, module_define_graph, stmt_graph, - ); + reverse_terser_chain, + ) || is_collected; + pop_reverse_terser_chain(reverse_terser_chain); // ignore nested // cache -> readCache { cache } @@ -367,48 +434,72 @@ impl TreeShakeModule { } ) { - dfs( + is_contain_reverse_edge = true; + push_reverse_terser_chain(reverse_terser_chain, Mode::Read, true); + is_collected = dfs( source, stack, result, visited, module_define_graph, stmt_graph, - ); + reverse_terser_chain, + ) || is_collected; + pop_reverse_terser_chain(reverse_terser_chain); } } (Mode::Write, false) => { - dfs( + push_reverse_terser_chain(reverse_terser_chain, Mode::Write, false); + is_collected = dfs( source, stack, result, visited, module_define_graph, stmt_graph, - ); + reverse_terser_chain, + ) || is_collected; + pop_reverse_terser_chain(reverse_terser_chain); } (Mode::Write, true) => { - dfs( + push_reverse_terser_chain(reverse_terser_chain, Mode::Write, false); + is_collected = dfs( target, stack, result, visited, module_define_graph, stmt_graph, - ); + reverse_terser_chain, + ) || is_collected; + pop_reverse_terser_chain(reverse_terser_chain); } } } - } - stack.pop(); + if is_contain_reverse_edge && !is_collected { + if let Some(mode) = visited.get(entry) { + if mode.removable() { + visited.remove(entry); + } + } + } + + break_tenser(stack); + + is_collected + } } - let mut visited = HashSet::new(); + let mut visited = HashMap::new(); let mut reference_chain = HashSet::new(); + let mut entries = entries.into_iter().collect::>(); + + entries.sort_by(|a, b| a.index().cmp(&b.index())); + for stmt in &entries { dfs( stmt, @@ -417,6 +508,7 @@ impl TreeShakeModule { &mut visited, &module_analyze, &self.stmt_graph, + &mut vec![], ); } diff --git a/crates/plugin_tree_shake/src/statement_graph/module_analyze.rs b/crates/plugin_tree_shake/src/statement_graph/module_analyze.rs index 08925fb0c..38accd091 100644 --- a/crates/plugin_tree_shake/src/statement_graph/module_analyze.rs +++ b/crates/plugin_tree_shake/src/statement_graph/module_analyze.rs @@ -347,10 +347,14 @@ impl ModuleAnalyze { } _ => { - let used_ids = collect_usage_ignore_nested(stmt, None); + let used_ids = collect_all_usage(stmt, None); + let data = ItemData { read_vars: used_ids.vars.read, write_vars: used_ids.vars.write, + nested_read_vars: used_ids.vars.nested_read, + nested_write_vars: used_ids.vars.nested_write, + side_effect_call: used_ids.call_reads, ..Default::default() }; diff --git a/packages/core/src/config/index.ts b/packages/core/src/config/index.ts index e2faa01e9..4a82bd444 100644 --- a/packages/core/src/config/index.ts +++ b/packages/core/src/config/index.ts @@ -423,6 +423,16 @@ export async function normalizeUserCompilationConfig( } } + // lazyCompilation should be disabled in production mode + // so, it only happens in development mode + // https://github.com/farm-fe/farm/issues/962 + if (config.treeShaking && config.lazyCompilation) { + logger.error( + 'treeShaking option is not supported in lazyCompilation mode, treeShaking will be disabled.' + ); + config.treeShaking = false; + } + if (config.minify === undefined) { if (isProduction) { config.minify = true; From f71b21ca9a6f01e4757f5cbe85253bfc3f2d5607 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 2 Apr 2024 21:28:53 +0800 Subject: [PATCH 2/3] Version Packages (#1109) Co-authored-by: github-actions[bot] --- .changeset/cold-adults-flow.md | 6 ------ .changeset/shy-cooks-unite.md | 5 ----- js-plugins/solid/package.json | 2 +- js-plugins/vue/package.json | 2 +- packages/core/CHANGELOG.md | 8 ++++++++ packages/core/package.json | 2 +- 6 files changed, 11 insertions(+), 14 deletions(-) delete mode 100644 .changeset/cold-adults-flow.md delete mode 100644 .changeset/shy-cooks-unite.md diff --git a/.changeset/cold-adults-flow.md b/.changeset/cold-adults-flow.md deleted file mode 100644 index f53a1582d..000000000 --- a/.changeset/cold-adults-flow.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@farmfe/core': patch ---- - -- remove unused reverse read variable -- disable treeShaking and lazyCompilation same time in development mode \ No newline at end of file diff --git a/.changeset/shy-cooks-unite.md b/.changeset/shy-cooks-unite.md deleted file mode 100644 index 40c00ce3b..000000000 --- a/.changeset/shy-cooks-unite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@farmfe/core': patch ---- - -feat: Optimize persistentCache when rendering modules diff --git a/js-plugins/solid/package.json b/js-plugins/solid/package.json index bcf37cb23..bc01fc709 100644 --- a/js-plugins/solid/package.json +++ b/js-plugins/solid/package.json @@ -41,7 +41,7 @@ "solid-js": "^1.7.8" }, "peerDependencies": { - "@farmfe/core": "workspace:^1.0.11" + "@farmfe/core": "workspace:^1.0.12" }, "files": [ "build" diff --git a/js-plugins/vue/package.json b/js-plugins/vue/package.json index a2b8d5fdd..8d5d32c59 100644 --- a/js-plugins/vue/package.json +++ b/js-plugins/vue/package.json @@ -52,7 +52,7 @@ "source-map": "^0.7.4" }, "peerDependencies": { - "@farmfe/core": "workspace:^1.0.11", + "@farmfe/core": "workspace:^1.0.12", "less": "*", "sass": "*", "stylus": "*" diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 9e40a76fc..fd336b57d 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,13 @@ # @farmfe/core +## 1.0.12 + +### Patch Changes + +- 6435db41: - remove unused reverse read variable + - disable treeShaking and lazyCompilation same time in development mode +- b1a5b8dd: feat: Optimize persistentCache when rendering modules + ## 1.0.11 ### Patch Changes diff --git a/packages/core/package.json b/packages/core/package.json index c27501b78..719b3283f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@farmfe/core", - "version": "1.0.11", + "version": "1.0.12", "main": "dist/index.js", "types": "dist/index.d.ts", "type": "module", From 423a5ad70ec689351070e742d67186ff659c00ba Mon Sep 17 00:00:00 2001 From: Ming07 Date: Wed, 3 Apr 2024 11:19:30 +0800 Subject: [PATCH 3/3] refactor: Renamed 'Record Viewer' to 'Visualizer' (#1059) * refactor: Renamed 'Record Viewer' to 'Visualizer' * doc: update readme * chore: change visualizer ver * chore: update changeset * chore: update cspell * refactor: rename as @farmfe/js-plugin-visualizer * chore: update lock file * chore: update changeset * Delete .changeset/popular-rings-train.md --------- Co-authored-by: ADNY <66500121+ErKeLost@users.noreply.github.com> Co-authored-by: brightwu <1521488775@qq.com> --- .changeset/neat-windows-nail.md | 5 + cspell.json | 1 + examples/vite-adapter-vue/farm.config.ts | 2 +- examples/vite-adapter-vue/package.json | 2 +- .../.eslintrc.json | 0 .../{record-viewer => visualizer}/.gitignore | 0 .../CHANGELOG.md | 0 .../{record-viewer => visualizer}/README.md | 21 +- .../farm.config.ts | 0 .../package.json | 4 +- .../src/client/.postcssrc | 0 .../src/client/farm.config.ts | 0 .../src/client/index.html | 0 .../src/client/src/App.vue | 0 .../src/client/src/api/index.ts | 0 .../src/client/src/assets/favicon.ico | Bin .../src/client/src/assets/logo.png | Bin .../src/client/src/assets/vue.svg | 0 .../src/components/AnalyzeDepsRecord.vue | 0 .../src/client/src/components/CodeDiff.vue | 0 .../src/client/src/components/CodeViewer.vue | 0 .../src/client/src/components/FileTree.vue | 0 .../src/client/src/components/ModuleList.vue | 0 .../client/src/components/ModuleRecords.vue | 0 .../src/client/src/components/NavBar.vue | 0 .../client/src/components/ProcessRecord.vue | 0 .../client/src/components/ResolveRecord.vue | 0 .../client/src/components/ResourcePots.vue | 0 .../client/src/components/TransformRecord.vue | 0 .../src/client/src/env.d.ts | 0 .../src/client/src/http.ts | 0 .../src/client/src/index.ts | 0 .../src/client/src/pages/Home.vue | 0 .../src/client/src/pages/analysis/Bundle.vue | 0 .../src/client/src/pages/analysis/Module.vue | 0 .../src/client/src/pages/analysis/Plugin.vue | 0 .../src/client/src/router.ts | 0 .../src/client/src/stores/resourcePot.ts | 0 .../src/client/src/style.css | 0 .../src/client/src/utils/file.ts | 0 .../src/client/src/utils/size.ts | 0 .../src/client/tailwind.config.js | 0 .../{record-viewer => visualizer}/src/dev.ts | 0 .../src/index.ts | 2 +- .../src/node/dataSource.ts | 0 .../src/node/server.ts | 0 .../src/node/utils/envinfo.ts | 0 .../src/types.ts | 0 .../tsconfig.build.json | 0 .../tsconfig.json | 0 pnpm-lock.yaml | 279 ++++++++++-------- 51 files changed, 181 insertions(+), 135 deletions(-) create mode 100644 .changeset/neat-windows-nail.md rename js-plugins/{record-viewer => visualizer}/.eslintrc.json (100%) rename js-plugins/{record-viewer => visualizer}/.gitignore (100%) rename js-plugins/{record-viewer => visualizer}/CHANGELOG.md (100%) rename js-plugins/{record-viewer => visualizer}/README.md (54%) rename js-plugins/{record-viewer => visualizer}/farm.config.ts (100%) rename js-plugins/{record-viewer => visualizer}/package.json (96%) rename js-plugins/{record-viewer => visualizer}/src/client/.postcssrc (100%) rename js-plugins/{record-viewer => visualizer}/src/client/farm.config.ts (100%) rename js-plugins/{record-viewer => visualizer}/src/client/index.html (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/App.vue (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/api/index.ts (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/assets/favicon.ico (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/assets/logo.png (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/assets/vue.svg (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/components/AnalyzeDepsRecord.vue (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/components/CodeDiff.vue (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/components/CodeViewer.vue (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/components/FileTree.vue (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/components/ModuleList.vue (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/components/ModuleRecords.vue (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/components/NavBar.vue (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/components/ProcessRecord.vue (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/components/ResolveRecord.vue (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/components/ResourcePots.vue (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/components/TransformRecord.vue (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/env.d.ts (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/http.ts (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/index.ts (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/pages/Home.vue (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/pages/analysis/Bundle.vue (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/pages/analysis/Module.vue (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/pages/analysis/Plugin.vue (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/router.ts (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/stores/resourcePot.ts (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/style.css (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/utils/file.ts (100%) rename js-plugins/{record-viewer => visualizer}/src/client/src/utils/size.ts (100%) rename js-plugins/{record-viewer => visualizer}/src/client/tailwind.config.js (100%) rename js-plugins/{record-viewer => visualizer}/src/dev.ts (100%) rename js-plugins/{record-viewer => visualizer}/src/index.ts (96%) rename js-plugins/{record-viewer => visualizer}/src/node/dataSource.ts (100%) rename js-plugins/{record-viewer => visualizer}/src/node/server.ts (100%) rename js-plugins/{record-viewer => visualizer}/src/node/utils/envinfo.ts (100%) rename js-plugins/{record-viewer => visualizer}/src/types.ts (100%) rename js-plugins/{record-viewer => visualizer}/tsconfig.build.json (100%) rename js-plugins/{record-viewer => visualizer}/tsconfig.json (100%) diff --git a/.changeset/neat-windows-nail.md b/.changeset/neat-windows-nail.md new file mode 100644 index 000000000..ddd3bf470 --- /dev/null +++ b/.changeset/neat-windows-nail.md @@ -0,0 +1,5 @@ +--- +'@farmfe/js-plugin-visualizer': major +--- + +rename as js-plugin-visualizer diff --git a/cspell.json b/cspell.json index 634ddc698..d95c1563e 100644 --- a/cspell.json +++ b/cspell.json @@ -157,6 +157,7 @@ "shulandmimi", "concurrentify", "pageerror", + "rsdoctor", "deepmerge", "Mergeable" ], diff --git a/examples/vite-adapter-vue/farm.config.ts b/examples/vite-adapter-vue/farm.config.ts index 0429f0283..4eac3bd9d 100644 --- a/examples/vite-adapter-vue/farm.config.ts +++ b/examples/vite-adapter-vue/farm.config.ts @@ -12,7 +12,7 @@ import UnpluginSvgComponent from 'unplugin-svg-component/vite'; import less from '@farmfe/js-plugin-less'; import postcss from '@farmfe/js-plugin-postcss'; -import viewer from '@farmfe/js-plugin-record-viewer'; +import viewer from '@farmfe/js-plugin-visualizer'; function configureVitePluginVue() { // return plugin and its filters diff --git a/examples/vite-adapter-vue/package.json b/examples/vite-adapter-vue/package.json index 8c0152a1a..80b910a49 100644 --- a/examples/vite-adapter-vue/package.json +++ b/examples/vite-adapter-vue/package.json @@ -16,7 +16,7 @@ "@farmfe/core": "workspace:*", "@farmfe/js-plugin-less": "workspace:^", "@farmfe/js-plugin-postcss": "workspace:^", - "@farmfe/js-plugin-record-viewer": "workspace:^", + "@farmfe/js-plugin-visualizer": "workspace:^", "@farmfe/js-plugin-sass": "workspace:^", "@farmfe/js-plugin-vue": "workspace:*", "@farmfe/plugin-sass": "workspace:^", diff --git a/js-plugins/record-viewer/.eslintrc.json b/js-plugins/visualizer/.eslintrc.json similarity index 100% rename from js-plugins/record-viewer/.eslintrc.json rename to js-plugins/visualizer/.eslintrc.json diff --git a/js-plugins/record-viewer/.gitignore b/js-plugins/visualizer/.gitignore similarity index 100% rename from js-plugins/record-viewer/.gitignore rename to js-plugins/visualizer/.gitignore diff --git a/js-plugins/record-viewer/CHANGELOG.md b/js-plugins/visualizer/CHANGELOG.md similarity index 100% rename from js-plugins/record-viewer/CHANGELOG.md rename to js-plugins/visualizer/CHANGELOG.md diff --git a/js-plugins/record-viewer/README.md b/js-plugins/visualizer/README.md similarity index 54% rename from js-plugins/record-viewer/README.md rename to js-plugins/visualizer/README.md index 914f9ce8b..9d3a5374e 100644 --- a/js-plugins/record-viewer/README.md +++ b/js-plugins/visualizer/README.md @@ -6,33 +6,33 @@ --- -# Record Viewer Plugin for Farm +# Visualizer Plugin for Farm ## Getting Started -To begin, you'll need to install `@farmfe/js-plugin-record-viewer`: +To begin, you'll need to install `@farmfe/visualizer`: ```console -npm install @farmfe/js-plugin-record-viewer --save-dev +npm install @farmfe/visualizer --save-dev ``` or ```console -yarn add -D @farmfe/js-plugin-record-viewer +yarn add -D @farmfe/visualizer ``` or ```console -pnpm add -D @farmfe/js-plugin-record-viewer +pnpm add -D @farmfe/visualizer ``` Configuring the plugin in `farm.config.ts`: ```ts import { defineFarmConfig } from '@farmfe/core/dist/config'; -import record from '@farmfe/js-plugin-record-viewer'; // import the plugin +import visualizer from '@farmfe/visualizer'; // import the plugin export default defineFarmConfig({ compilation: { @@ -44,8 +44,8 @@ export default defineFarmConfig({ } }, plugins: [ - // use the record viewer plugin. - record({ + // use the visualizer plugin. + visualizer({ // custom options here }) ] @@ -78,5 +78,10 @@ type RecordViewerOptions = { Default: undefined +## Credits +Thanks to: +- The [vite-plugin-inspect](https://github.com/antfu/vite-plugin-inspect) project created by [Anthony Fu](https://github.com/antfu), inspiring the module analysis feature in Farm's Visualizer. + +- The [rsdoctor](https://github.com/web-infra-dev/rsdoctor) project created by [web-infra](https://github.com/web-infra-dev), influencing the design of Farm's Visualizer. \ No newline at end of file diff --git a/js-plugins/record-viewer/farm.config.ts b/js-plugins/visualizer/farm.config.ts similarity index 100% rename from js-plugins/record-viewer/farm.config.ts rename to js-plugins/visualizer/farm.config.ts diff --git a/js-plugins/record-viewer/package.json b/js-plugins/visualizer/package.json similarity index 96% rename from js-plugins/record-viewer/package.json rename to js-plugins/visualizer/package.json index 4f731ce77..1377912b9 100644 --- a/js-plugins/record-viewer/package.json +++ b/js-plugins/visualizer/package.json @@ -1,6 +1,6 @@ { - "name": "@farmfe/js-plugin-record-viewer", - "version": "2.2.0", + "name": "@farmfe/js-plugin-visualizer", + "version": "1.0.0", "main": "./build/cjs/index.cjs", "types": "./build/cjs/index.d.ts", "type": "module", diff --git a/js-plugins/record-viewer/src/client/.postcssrc b/js-plugins/visualizer/src/client/.postcssrc similarity index 100% rename from js-plugins/record-viewer/src/client/.postcssrc rename to js-plugins/visualizer/src/client/.postcssrc diff --git a/js-plugins/record-viewer/src/client/farm.config.ts b/js-plugins/visualizer/src/client/farm.config.ts similarity index 100% rename from js-plugins/record-viewer/src/client/farm.config.ts rename to js-plugins/visualizer/src/client/farm.config.ts diff --git a/js-plugins/record-viewer/src/client/index.html b/js-plugins/visualizer/src/client/index.html similarity index 100% rename from js-plugins/record-viewer/src/client/index.html rename to js-plugins/visualizer/src/client/index.html diff --git a/js-plugins/record-viewer/src/client/src/App.vue b/js-plugins/visualizer/src/client/src/App.vue similarity index 100% rename from js-plugins/record-viewer/src/client/src/App.vue rename to js-plugins/visualizer/src/client/src/App.vue diff --git a/js-plugins/record-viewer/src/client/src/api/index.ts b/js-plugins/visualizer/src/client/src/api/index.ts similarity index 100% rename from js-plugins/record-viewer/src/client/src/api/index.ts rename to js-plugins/visualizer/src/client/src/api/index.ts diff --git a/js-plugins/record-viewer/src/client/src/assets/favicon.ico b/js-plugins/visualizer/src/client/src/assets/favicon.ico similarity index 100% rename from js-plugins/record-viewer/src/client/src/assets/favicon.ico rename to js-plugins/visualizer/src/client/src/assets/favicon.ico diff --git a/js-plugins/record-viewer/src/client/src/assets/logo.png b/js-plugins/visualizer/src/client/src/assets/logo.png similarity index 100% rename from js-plugins/record-viewer/src/client/src/assets/logo.png rename to js-plugins/visualizer/src/client/src/assets/logo.png diff --git a/js-plugins/record-viewer/src/client/src/assets/vue.svg b/js-plugins/visualizer/src/client/src/assets/vue.svg similarity index 100% rename from js-plugins/record-viewer/src/client/src/assets/vue.svg rename to js-plugins/visualizer/src/client/src/assets/vue.svg diff --git a/js-plugins/record-viewer/src/client/src/components/AnalyzeDepsRecord.vue b/js-plugins/visualizer/src/client/src/components/AnalyzeDepsRecord.vue similarity index 100% rename from js-plugins/record-viewer/src/client/src/components/AnalyzeDepsRecord.vue rename to js-plugins/visualizer/src/client/src/components/AnalyzeDepsRecord.vue diff --git a/js-plugins/record-viewer/src/client/src/components/CodeDiff.vue b/js-plugins/visualizer/src/client/src/components/CodeDiff.vue similarity index 100% rename from js-plugins/record-viewer/src/client/src/components/CodeDiff.vue rename to js-plugins/visualizer/src/client/src/components/CodeDiff.vue diff --git a/js-plugins/record-viewer/src/client/src/components/CodeViewer.vue b/js-plugins/visualizer/src/client/src/components/CodeViewer.vue similarity index 100% rename from js-plugins/record-viewer/src/client/src/components/CodeViewer.vue rename to js-plugins/visualizer/src/client/src/components/CodeViewer.vue diff --git a/js-plugins/record-viewer/src/client/src/components/FileTree.vue b/js-plugins/visualizer/src/client/src/components/FileTree.vue similarity index 100% rename from js-plugins/record-viewer/src/client/src/components/FileTree.vue rename to js-plugins/visualizer/src/client/src/components/FileTree.vue diff --git a/js-plugins/record-viewer/src/client/src/components/ModuleList.vue b/js-plugins/visualizer/src/client/src/components/ModuleList.vue similarity index 100% rename from js-plugins/record-viewer/src/client/src/components/ModuleList.vue rename to js-plugins/visualizer/src/client/src/components/ModuleList.vue diff --git a/js-plugins/record-viewer/src/client/src/components/ModuleRecords.vue b/js-plugins/visualizer/src/client/src/components/ModuleRecords.vue similarity index 100% rename from js-plugins/record-viewer/src/client/src/components/ModuleRecords.vue rename to js-plugins/visualizer/src/client/src/components/ModuleRecords.vue diff --git a/js-plugins/record-viewer/src/client/src/components/NavBar.vue b/js-plugins/visualizer/src/client/src/components/NavBar.vue similarity index 100% rename from js-plugins/record-viewer/src/client/src/components/NavBar.vue rename to js-plugins/visualizer/src/client/src/components/NavBar.vue diff --git a/js-plugins/record-viewer/src/client/src/components/ProcessRecord.vue b/js-plugins/visualizer/src/client/src/components/ProcessRecord.vue similarity index 100% rename from js-plugins/record-viewer/src/client/src/components/ProcessRecord.vue rename to js-plugins/visualizer/src/client/src/components/ProcessRecord.vue diff --git a/js-plugins/record-viewer/src/client/src/components/ResolveRecord.vue b/js-plugins/visualizer/src/client/src/components/ResolveRecord.vue similarity index 100% rename from js-plugins/record-viewer/src/client/src/components/ResolveRecord.vue rename to js-plugins/visualizer/src/client/src/components/ResolveRecord.vue diff --git a/js-plugins/record-viewer/src/client/src/components/ResourcePots.vue b/js-plugins/visualizer/src/client/src/components/ResourcePots.vue similarity index 100% rename from js-plugins/record-viewer/src/client/src/components/ResourcePots.vue rename to js-plugins/visualizer/src/client/src/components/ResourcePots.vue diff --git a/js-plugins/record-viewer/src/client/src/components/TransformRecord.vue b/js-plugins/visualizer/src/client/src/components/TransformRecord.vue similarity index 100% rename from js-plugins/record-viewer/src/client/src/components/TransformRecord.vue rename to js-plugins/visualizer/src/client/src/components/TransformRecord.vue diff --git a/js-plugins/record-viewer/src/client/src/env.d.ts b/js-plugins/visualizer/src/client/src/env.d.ts similarity index 100% rename from js-plugins/record-viewer/src/client/src/env.d.ts rename to js-plugins/visualizer/src/client/src/env.d.ts diff --git a/js-plugins/record-viewer/src/client/src/http.ts b/js-plugins/visualizer/src/client/src/http.ts similarity index 100% rename from js-plugins/record-viewer/src/client/src/http.ts rename to js-plugins/visualizer/src/client/src/http.ts diff --git a/js-plugins/record-viewer/src/client/src/index.ts b/js-plugins/visualizer/src/client/src/index.ts similarity index 100% rename from js-plugins/record-viewer/src/client/src/index.ts rename to js-plugins/visualizer/src/client/src/index.ts diff --git a/js-plugins/record-viewer/src/client/src/pages/Home.vue b/js-plugins/visualizer/src/client/src/pages/Home.vue similarity index 100% rename from js-plugins/record-viewer/src/client/src/pages/Home.vue rename to js-plugins/visualizer/src/client/src/pages/Home.vue diff --git a/js-plugins/record-viewer/src/client/src/pages/analysis/Bundle.vue b/js-plugins/visualizer/src/client/src/pages/analysis/Bundle.vue similarity index 100% rename from js-plugins/record-viewer/src/client/src/pages/analysis/Bundle.vue rename to js-plugins/visualizer/src/client/src/pages/analysis/Bundle.vue diff --git a/js-plugins/record-viewer/src/client/src/pages/analysis/Module.vue b/js-plugins/visualizer/src/client/src/pages/analysis/Module.vue similarity index 100% rename from js-plugins/record-viewer/src/client/src/pages/analysis/Module.vue rename to js-plugins/visualizer/src/client/src/pages/analysis/Module.vue diff --git a/js-plugins/record-viewer/src/client/src/pages/analysis/Plugin.vue b/js-plugins/visualizer/src/client/src/pages/analysis/Plugin.vue similarity index 100% rename from js-plugins/record-viewer/src/client/src/pages/analysis/Plugin.vue rename to js-plugins/visualizer/src/client/src/pages/analysis/Plugin.vue diff --git a/js-plugins/record-viewer/src/client/src/router.ts b/js-plugins/visualizer/src/client/src/router.ts similarity index 100% rename from js-plugins/record-viewer/src/client/src/router.ts rename to js-plugins/visualizer/src/client/src/router.ts diff --git a/js-plugins/record-viewer/src/client/src/stores/resourcePot.ts b/js-plugins/visualizer/src/client/src/stores/resourcePot.ts similarity index 100% rename from js-plugins/record-viewer/src/client/src/stores/resourcePot.ts rename to js-plugins/visualizer/src/client/src/stores/resourcePot.ts diff --git a/js-plugins/record-viewer/src/client/src/style.css b/js-plugins/visualizer/src/client/src/style.css similarity index 100% rename from js-plugins/record-viewer/src/client/src/style.css rename to js-plugins/visualizer/src/client/src/style.css diff --git a/js-plugins/record-viewer/src/client/src/utils/file.ts b/js-plugins/visualizer/src/client/src/utils/file.ts similarity index 100% rename from js-plugins/record-viewer/src/client/src/utils/file.ts rename to js-plugins/visualizer/src/client/src/utils/file.ts diff --git a/js-plugins/record-viewer/src/client/src/utils/size.ts b/js-plugins/visualizer/src/client/src/utils/size.ts similarity index 100% rename from js-plugins/record-viewer/src/client/src/utils/size.ts rename to js-plugins/visualizer/src/client/src/utils/size.ts diff --git a/js-plugins/record-viewer/src/client/tailwind.config.js b/js-plugins/visualizer/src/client/tailwind.config.js similarity index 100% rename from js-plugins/record-viewer/src/client/tailwind.config.js rename to js-plugins/visualizer/src/client/tailwind.config.js diff --git a/js-plugins/record-viewer/src/dev.ts b/js-plugins/visualizer/src/dev.ts similarity index 100% rename from js-plugins/record-viewer/src/dev.ts rename to js-plugins/visualizer/src/dev.ts diff --git a/js-plugins/record-viewer/src/index.ts b/js-plugins/visualizer/src/index.ts similarity index 96% rename from js-plugins/record-viewer/src/index.ts rename to js-plugins/visualizer/src/index.ts index 886d4b512..5f4b52692 100644 --- a/js-plugins/record-viewer/src/index.ts +++ b/js-plugins/visualizer/src/index.ts @@ -16,7 +16,7 @@ export default function farmRecorderPlugin( const recordViewerOptions: RecordViewerOptions = options; return { - name: 'farm-plugin-record-viewer', + name: 'farm-visualizer', config(config) { farmConfig = config.compilation || {}; farmConfig.record = true; diff --git a/js-plugins/record-viewer/src/node/dataSource.ts b/js-plugins/visualizer/src/node/dataSource.ts similarity index 100% rename from js-plugins/record-viewer/src/node/dataSource.ts rename to js-plugins/visualizer/src/node/dataSource.ts diff --git a/js-plugins/record-viewer/src/node/server.ts b/js-plugins/visualizer/src/node/server.ts similarity index 100% rename from js-plugins/record-viewer/src/node/server.ts rename to js-plugins/visualizer/src/node/server.ts diff --git a/js-plugins/record-viewer/src/node/utils/envinfo.ts b/js-plugins/visualizer/src/node/utils/envinfo.ts similarity index 100% rename from js-plugins/record-viewer/src/node/utils/envinfo.ts rename to js-plugins/visualizer/src/node/utils/envinfo.ts diff --git a/js-plugins/record-viewer/src/types.ts b/js-plugins/visualizer/src/types.ts similarity index 100% rename from js-plugins/record-viewer/src/types.ts rename to js-plugins/visualizer/src/types.ts diff --git a/js-plugins/record-viewer/tsconfig.build.json b/js-plugins/visualizer/tsconfig.build.json similarity index 100% rename from js-plugins/record-viewer/tsconfig.build.json rename to js-plugins/visualizer/tsconfig.build.json diff --git a/js-plugins/record-viewer/tsconfig.json b/js-plugins/visualizer/tsconfig.json similarity index 100% rename from js-plugins/record-viewer/tsconfig.json rename to js-plugins/visualizer/tsconfig.json diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 776cb61a5..6a5e54ad2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1225,12 +1225,12 @@ importers: '@farmfe/js-plugin-postcss': specifier: workspace:^ version: link:../../js-plugins/postcss - '@farmfe/js-plugin-record-viewer': - specifier: workspace:^ - version: link:../../js-plugins/record-viewer '@farmfe/js-plugin-sass': specifier: workspace:^ version: link:../../js-plugins/sass + '@farmfe/js-plugin-visualizer': + specifier: workspace:^ + version: link:../../js-plugins/visualizer '@farmfe/js-plugin-vue': specifier: workspace:* version: link:../../js-plugins/vue @@ -1500,91 +1500,6 @@ importers: specifier: ^10.1.3 version: 10.1.3(postcss@8.4.31) - js-plugins/record-viewer: - dependencies: - '@ant-design/icons-vue': - specifier: ^7.0.1 - version: 7.0.1(vue@3.3.7) - '@guolao/vue-monaco-editor': - specifier: ^1.5.1 - version: 1.5.1(vue@3.3.7) - '@types/ws': - specifier: ^8.5.4 - version: 8.5.8 - ant-design-vue: - specifier: ^4.1.2 - version: 4.1.2(vue@3.3.7) - axios: - specifier: ^1.5.0 - version: 1.6.0 - bufferutil: - specifier: ^4.0.8 - version: 4.0.8 - core-js: - specifier: ^3.30.1 - version: 3.33.2 - envinfo: - specifier: ^7.11.1 - version: 7.11.1 - pinia: - specifier: ^2.1.7 - version: 2.1.7(typescript@4.9.5)(vue@3.3.7) - sirv: - specifier: ^2.0.3 - version: 2.0.3 - utf-8-validate: - specifier: ^6.0.3 - version: 6.0.3 - vue: - specifier: ^3.3.4 - version: 3.3.7(typescript@4.9.5) - vue-router: - specifier: ^4.2.1 - version: 4.2.5(vue@3.3.7) - ws: - specifier: ^8.14.2 - version: 8.14.2(bufferutil@4.0.8)(utf-8-validate@6.0.3) - devDependencies: - '@farmfe/cli': - specifier: workspace:* - version: link:../../packages/cli - '@farmfe/core': - specifier: workspace:* - version: link:../../packages/core - '@farmfe/js-plugin-dts': - specifier: workspace:* - version: link:../dts - '@farmfe/js-plugin-less': - specifier: workspace:* - version: link:../less - '@farmfe/js-plugin-postcss': - specifier: workspace:* - version: link:../postcss - '@farmfe/js-plugin-vue': - specifier: workspace:* - version: link:../vue - '@types/envinfo': - specifier: ^7.8.3 - version: 7.8.3 - '@types/koa': - specifier: ^2.13.5 - version: 2.13.10 - '@vitejs/plugin-vue': - specifier: ^4.4.0 - version: 4.4.0(vite@4.5.0)(vue@3.3.7) - autoprefixer: - specifier: ^10.4.14 - version: 10.4.16(postcss@8.4.31) - koa: - specifier: ^2.13.4 - version: 2.14.2 - postcss: - specifier: ^8.4.31 - version: 8.4.31 - tailwindcss: - specifier: ^3.3.2 - version: 3.3.5 - js-plugins/sass: devDependencies: '@farmfe/cli': @@ -1659,6 +1574,91 @@ importers: specifier: workspace:^ version: link:../dts + js-plugins/visualizer: + dependencies: + '@ant-design/icons-vue': + specifier: ^7.0.1 + version: 7.0.1(vue@3.4.15) + '@guolao/vue-monaco-editor': + specifier: ^1.5.1 + version: 1.5.1(vue@3.4.15) + '@types/ws': + specifier: ^8.5.4 + version: 8.5.8 + ant-design-vue: + specifier: ^4.1.2 + version: 4.1.2(vue@3.4.15) + axios: + specifier: ^1.5.0 + version: 1.6.5 + bufferutil: + specifier: ^4.0.8 + version: 4.0.8 + core-js: + specifier: ^3.30.1 + version: 3.36.1 + envinfo: + specifier: ^7.11.1 + version: 7.11.1 + pinia: + specifier: ^2.1.7 + version: 2.1.7(typescript@4.9.5)(vue@3.4.15) + sirv: + specifier: ^2.0.3 + version: 2.0.3 + utf-8-validate: + specifier: ^6.0.3 + version: 6.0.3 + vue: + specifier: ^3.3.4 + version: 3.4.15(typescript@4.9.5) + vue-router: + specifier: ^4.2.1 + version: 4.2.5(vue@3.4.15) + ws: + specifier: ^8.14.2 + version: 8.14.2(bufferutil@4.0.8)(utf-8-validate@6.0.3) + devDependencies: + '@farmfe/cli': + specifier: workspace:* + version: link:../../packages/cli + '@farmfe/core': + specifier: workspace:* + version: link:../../packages/core + '@farmfe/js-plugin-dts': + specifier: workspace:* + version: link:../dts + '@farmfe/js-plugin-less': + specifier: workspace:* + version: link:../less + '@farmfe/js-plugin-postcss': + specifier: workspace:* + version: link:../postcss + '@farmfe/js-plugin-vue': + specifier: workspace:* + version: link:../vue + '@types/envinfo': + specifier: ^7.8.3 + version: 7.8.3 + '@types/koa': + specifier: ^2.13.5 + version: 2.13.10 + '@vitejs/plugin-vue': + specifier: ^4.4.0 + version: 4.6.2(vite@4.5.0)(vue@3.4.15) + autoprefixer: + specifier: ^10.4.14 + version: 10.4.16(postcss@8.4.35) + koa: + specifier: ^2.13.4 + version: 2.14.2 + postcss: + specifier: ^8.4.31 + version: 8.4.35 + tailwindcss: + specifier: ^3.3.2 + version: 3.3.5 + js-plugins/vue: devDependencies: '@farmfe/cli': @@ -2058,6 +2058,16 @@ packages: vue: 3.3.7(typescript@4.9.5) dev: false + /@ant-design/icons-vue@7.0.1(vue@3.4.15): + resolution: {integrity: sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==} + peerDependencies: + vue: '>=3.0.3' + dependencies: + '@ant-design/colors': 6.0.0 + '@ant-design/icons-svg': 4.3.1 + vue: 3.4.15(typescript@4.9.5) + dev: false + /@ant-design/icons@5.2.6(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-4wn0WShF43TrggskBJPRqCD0fcHbzTYjnaoskdiJrVHg86yxoZ8ZUqsXvyn4WUqehRiFKnaclOhqk9w4Ui2KVw==} engines: {node: '>=8'} @@ -4086,7 +4096,7 @@ packages: resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} dev: false - /@guolao/vue-monaco-editor@1.5.1(vue@3.3.7): + /@guolao/vue-monaco-editor@1.5.1(vue@3.4.15): resolution: {integrity: sha512-nhbQHDAwsxrdH/yitcrBgAkN8Cae0IEiYe/M3LWK8bSJRfapkbMyfTHE6Gcxsxa/6efSUZAPDo8dJWBDx5GZyA==} peerDependencies: '@vue/composition-api': ^1.7.1 @@ -4097,8 +4107,8 @@ packages: optional: true dependencies: '@monaco-editor/loader': 1.4.0 - vue: 3.3.7(typescript@4.9.5) - vue-demi: 0.14.7(vue@3.3.7) + vue: 3.4.15(typescript@4.9.5) + vue-demi: 0.14.7(vue@3.4.15) dev: false /@humanwhocodes/config-array@0.11.13: @@ -6411,18 +6421,18 @@ packages: vue: 3.3.12(typescript@4.9.5) dev: true - /@vitejs/plugin-vue@4.4.0(vite@4.5.0)(vue@3.3.7): - resolution: {integrity: sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==} + /@vitejs/plugin-vue@4.6.2(vite@4.5.0)(vue@3.3.7): + resolution: {integrity: sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: ^4.0.0 + vite: ^4.0.0 || ^5.0.0 vue: ^3.2.25 dependencies: vite: 4.5.0(@types/node@18.18.8) vue: 3.3.7(typescript@4.9.5) dev: true - /@vitejs/plugin-vue@4.6.2(vite@4.5.0)(vue@3.3.7): + /@vitejs/plugin-vue@4.6.2(vite@4.5.0)(vue@3.4.15): resolution: {integrity: sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -6430,7 +6440,7 @@ packages: vue: ^3.2.25 dependencies: vite: 4.5.0(@types/node@18.18.8) - vue: 3.3.7(typescript@4.9.5) + vue: 3.4.15(typescript@4.9.5) dev: true /@vitejs/plugin-vue@5.0.3(vite@4.5.0)(vue@3.4.15): @@ -6630,7 +6640,7 @@ packages: '@vue/shared': 3.3.12 estree-walker: 2.0.2 magic-string: 0.30.5 - postcss: 8.4.33 + postcss: 8.4.35 source-map-js: 1.0.2 /@vue/compiler-sfc@3.3.7: @@ -6644,7 +6654,7 @@ packages: '@vue/shared': 3.3.7 estree-walker: 2.0.2 magic-string: 0.30.5 - postcss: 8.4.32 + postcss: 8.4.35 source-map-js: 1.0.2 /@vue/compiler-sfc@3.4.15: @@ -6657,7 +6667,7 @@ packages: '@vue/shared': 3.4.15 estree-walker: 2.0.2 magic-string: 0.30.5 - postcss: 8.4.33 + postcss: 8.4.35 source-map-js: 1.0.2 /@vue/compiler-ssr@3.3.12: @@ -7019,14 +7029,14 @@ packages: warning: 4.0.3 dev: false - /ant-design-vue@4.1.2(vue@3.3.7): + /ant-design-vue@4.1.2(vue@3.4.15): resolution: {integrity: sha512-ynFkDJLlHgumeK6Hr1UZ7PvQNZ1uBcri/pmejBdS3kRqHeA5VRsxneYDwa8YxA+uYB5YfT2jpYsSHsiMiCjRGg==} engines: {node: '>=12.22.0'} peerDependencies: vue: '>=3.2.0' dependencies: '@ant-design/colors': 6.0.0 - '@ant-design/icons-vue': 7.0.1(vue@3.3.7) + '@ant-design/icons-vue': 7.0.1(vue@3.4.15) '@babel/runtime': 7.23.2 '@ctrl/tinycolor': 3.6.1 '@emotion/hash': 0.9.1 @@ -7045,8 +7055,8 @@ packages: shallow-equal: 1.2.1 stylis: 4.3.0 throttle-debounce: 5.0.0 - vue: 3.3.7(typescript@4.9.5) - vue-types: 3.0.2(vue@3.3.7) + vue: 3.4.15(typescript@4.9.5) + vue-types: 3.0.2(vue@3.4.15) warning: 4.0.3 dev: false @@ -7305,6 +7315,22 @@ packages: postcss-value-parser: 4.2.0 dev: true + /autoprefixer@10.4.16(postcss@8.4.35): + resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.22.1 + caniuse-lite: 1.0.30001561 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.35 + postcss-value-parser: 4.2.0 + dev: true + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} @@ -7335,7 +7361,6 @@ packages: proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - dev: true /axobject-query@3.2.1: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} @@ -9934,7 +9959,6 @@ packages: peerDependenciesMeta: debug: optional: true - dev: true /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -12451,7 +12475,7 @@ packages: requiresBuild: true dev: true - /pinia@2.1.7(typescript@4.9.5)(vue@3.3.7): + /pinia@2.1.7(typescript@4.9.5)(vue@3.4.15): resolution: {integrity: sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==} peerDependencies: '@vue/composition-api': ^1.4.0 @@ -12465,8 +12489,8 @@ packages: dependencies: '@vue/devtools-api': 6.5.1 typescript: 4.9.5 - vue: 3.3.7(typescript@4.9.5) - vue-demi: 0.14.6(vue@3.3.7) + vue: 3.4.15(typescript@4.9.5) + vue-demi: 0.14.7(vue@3.4.15) dev: false /pinkie-promise@2.0.1: @@ -12697,14 +12721,7 @@ packages: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 - - /postcss@8.4.33: - resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 + dev: true /postcss@8.4.35: resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} @@ -12713,7 +12730,6 @@ packages: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: true /posthtml-parser@0.2.1: resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==} @@ -16131,7 +16147,7 @@ packages: dependencies: '@types/node': 18.18.8 esbuild: 0.18.20 - postcss: 8.4.32 + postcss: 8.4.35 rollup: 3.29.4 optionalDependencies: fsevents: 2.3.3 @@ -16247,8 +16263,8 @@ packages: resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} dev: true - /vue-demi@0.14.6(vue@3.3.7): - resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} + /vue-demi@0.14.7(vue@3.3.7): + resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==} engines: {node: '>=12'} hasBin: true requiresBuild: true @@ -16262,7 +16278,7 @@ packages: vue: 3.3.7(typescript@4.9.5) dev: false - /vue-demi@0.14.7(vue@3.3.7): + /vue-demi@0.14.7(vue@3.4.15): resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==} engines: {node: '>=12'} hasBin: true @@ -16274,7 +16290,7 @@ packages: '@vue/composition-api': optional: true dependencies: - vue: 3.3.7(typescript@4.9.5) + vue: 3.4.15(typescript@4.9.5) dev: false /vue-eslint-parser@8.3.0(eslint@8.53.0): @@ -16312,6 +16328,15 @@ packages: '@vue/devtools-api': 6.5.1 vue: 3.3.7(typescript@4.9.5) + /vue-router@4.2.5(vue@3.4.15): + resolution: {integrity: sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==} + peerDependencies: + vue: ^3.2.0 + dependencies: + '@vue/devtools-api': 6.5.1 + vue: 3.4.15(typescript@4.9.5) + dev: false + /vue-types@3.0.2(vue@3.3.7): resolution: {integrity: sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==} engines: {node: '>=10.15.0'} @@ -16322,6 +16347,16 @@ packages: vue: 3.3.7(typescript@4.9.5) dev: false + /vue-types@3.0.2(vue@3.4.15): + resolution: {integrity: sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==} + engines: {node: '>=10.15.0'} + peerDependencies: + vue: ^3.0.0 + dependencies: + is-plain-object: 3.0.1 + vue: 3.4.15(typescript@4.9.5) + dev: false + /vue@3.3.12(typescript@4.9.5): resolution: {integrity: sha512-jYNv2QmET2OTHsFzfWHMnqgCfqL4zfo97QwofdET+GBRCHhSCHuMTTvNIgeSn0/xF3JRT5OGah6MDwUFN7MPlg==} peerDependencies: