diff --git a/Cargo.lock b/Cargo.lock index 70e5cffb0..efb7389fc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1718,6 +1718,15 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "farmfe_module_federation" +version = "0.0.0" +dependencies = [ + "farmfe_core", + "farmfe_macro_plugin", + "farmfe_toolkit", +] + [[package]] name = "farmfe_node" version = "0.0.0" diff --git a/examples/arco-pro/farm.config.ts b/examples/arco-pro/farm.config.ts index 2201d30c3..cba7c3c90 100644 --- a/examples/arco-pro/farm.config.ts +++ b/examples/arco-pro/farm.config.ts @@ -25,6 +25,7 @@ export default defineConfig((env) => { }, plugins: [ '@farmfe/plugin-react', + '@farmfe/plugin-module-federation', // '@farmfe/plugin-svgr', svgr(), farmJsPluginLess(), diff --git a/examples/arco-pro/package.json b/examples/arco-pro/package.json index 14d510583..39f8d8aaf 100644 --- a/examples/arco-pro/package.json +++ b/examples/arco-pro/package.json @@ -41,6 +41,7 @@ "@farmfe/js-plugin-less": "workspace:*", "@farmfe/js-plugin-svgr": "workspace:^", "@farmfe/plugin-react": "workspace:*", + "@farmfe/plugin-module-federation": "workspace:*", "@farmfe/plugin-svgr": "^0.0.1", "core-js": "^3.30.1", "react-refresh": "^0.14.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6ce5ae89a..8cf3deb5e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -343,6 +343,9 @@ importers: '@farmfe/js-plugin-svgr': specifier: workspace:^ version: link:../../js-plugins/svgr + '@farmfe/plugin-module-federation': + specifier: workspace:* + version: link:../../rust-plugins/module-federation '@farmfe/plugin-react': specifier: workspace:* version: link:../../rust-plugins/react @@ -2980,6 +2983,12 @@ importers: specifier: workspace:* version: link:../../packages/plugin-tools + rust-plugins/module-federation: + devDependencies: + '@farmfe/plugin-tools': + specifier: latest + version: link:../../packages/plugin-tools + rust-plugins/react: devDependencies: '@farmfe/plugin-tools': diff --git a/rust-plugins/module-federation/.gitignore b/rust-plugins/module-federation/.gitignore new file mode 100644 index 000000000..50e4f22fe --- /dev/null +++ b/rust-plugins/module-federation/.gitignore @@ -0,0 +1,197 @@ +# Created by https://www.toptal.com/developers/gitignore/api/node +# Edit at https://www.toptal.com/developers/gitignore?templates=node + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# End of https://www.toptal.com/developers/gitignore/api/node + +# Created by https://www.toptal.com/developers/gitignore/api/macos +# Edit at https://www.toptal.com/developers/gitignore?templates=macos + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +# End of https://www.toptal.com/developers/gitignore/api/macos + +# Created by https://www.toptal.com/developers/gitignore/api/windows +# Edit at https://www.toptal.com/developers/gitignore?templates=windows + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.toptal.com/developers/gitignore/api/windows + +#Added by cargo + +/target +# Cargo.lock + +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions + +*.farm diff --git a/rust-plugins/module-federation/Cargo.toml b/rust-plugins/module-federation/Cargo.toml new file mode 100644 index 000000000..bfb787db8 --- /dev/null +++ b/rust-plugins/module-federation/Cargo.toml @@ -0,0 +1,12 @@ +[package] +edition = "2021" +name = "farmfe_module_federation" +version = "0.0.0" + +[lib] +crate-type = ["cdylib", "rlib"] + +[dependencies] +farmfe_core = { version = "*", path = "../../crates/core" } +farmfe_macro_plugin = { version = "*", path = "../../crates/macro_plugin" } +farmfe_toolkit = { version = "*", path = "../../crates/toolkit" } diff --git a/rust-plugins/module-federation/farmfe_module_federation.darwin-arm64.node b/rust-plugins/module-federation/farmfe_module_federation.darwin-arm64.node new file mode 100755 index 000000000..d98383268 Binary files /dev/null and b/rust-plugins/module-federation/farmfe_module_federation.darwin-arm64.node differ diff --git a/rust-plugins/module-federation/npm/darwin-arm64/README.md b/rust-plugins/module-federation/npm/darwin-arm64/README.md new file mode 100644 index 000000000..0e10b7ae9 --- /dev/null +++ b/rust-plugins/module-federation/npm/darwin-arm64/README.md @@ -0,0 +1,3 @@ +# `@farmfe/module-federation-darwin-arm64` + +This is the **aarch64-apple-darwin** binary for `@farmfe/module-federation` diff --git a/rust-plugins/module-federation/npm/darwin-arm64/package.json b/rust-plugins/module-federation/npm/darwin-arm64/package.json new file mode 100644 index 000000000..7056925bf --- /dev/null +++ b/rust-plugins/module-federation/npm/darwin-arm64/package.json @@ -0,0 +1,18 @@ +{ + "name": "@farmfe/module-federation-darwin-arm64", + "version": "0.1.2", + "os": [ + "darwin" + ], + "cpu": [ + "arm64" + ], + "main": "index.farm", + "files": [ + "index.farm" + ], + "license": "MIT", + "engines": { + "node": ">= 10" + } +} diff --git a/rust-plugins/module-federation/npm/darwin-x64/README.md b/rust-plugins/module-federation/npm/darwin-x64/README.md new file mode 100644 index 000000000..4e595e9c2 --- /dev/null +++ b/rust-plugins/module-federation/npm/darwin-x64/README.md @@ -0,0 +1,3 @@ +# `@farmfe/module-federation-darwin-x64` + +This is the **x86_64-apple-darwin** binary for `@farmfe/module-federation` diff --git a/rust-plugins/module-federation/npm/darwin-x64/package.json b/rust-plugins/module-federation/npm/darwin-x64/package.json new file mode 100644 index 000000000..9fe0b1ea0 --- /dev/null +++ b/rust-plugins/module-federation/npm/darwin-x64/package.json @@ -0,0 +1,18 @@ +{ + "name": "@farmfe/module-federation-darwin-x64", + "version": "0.0.0", + "os": [ + "darwin" + ], + "cpu": [ + "x64" + ], + "main": "index.farm", + "files": [ + "index.farm" + ], + "license": "MIT", + "engines": { + "node": ">= 10" + } +} diff --git a/rust-plugins/module-federation/npm/linux-arm64-gnu/README.md b/rust-plugins/module-federation/npm/linux-arm64-gnu/README.md new file mode 100644 index 000000000..8c6741400 --- /dev/null +++ b/rust-plugins/module-federation/npm/linux-arm64-gnu/README.md @@ -0,0 +1,3 @@ +# `@farmfe/module-federation-linux-arm64-gnu` + +This is the **aarch64-unknown-linux-gnu** binary for `@farmfe/module-federation` diff --git a/rust-plugins/module-federation/npm/linux-arm64-gnu/package.json b/rust-plugins/module-federation/npm/linux-arm64-gnu/package.json new file mode 100644 index 000000000..e81e3246e --- /dev/null +++ b/rust-plugins/module-federation/npm/linux-arm64-gnu/package.json @@ -0,0 +1,21 @@ +{ + "name": "@farmfe/module-federation-linux-arm64-gnu", + "version": "0.0.0", + "os": [ + "linux" + ], + "cpu": [ + "arm64" + ], + "main": "index.farm", + "files": [ + "index.farm" + ], + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "libc": [ + "glibc" + ] +} diff --git a/rust-plugins/module-federation/npm/linux-arm64-musl/README.md b/rust-plugins/module-federation/npm/linux-arm64-musl/README.md new file mode 100644 index 000000000..6cad5c182 --- /dev/null +++ b/rust-plugins/module-federation/npm/linux-arm64-musl/README.md @@ -0,0 +1,3 @@ +# `@farmfe/module-federation-linux-arm64-musl` + +This is the **aarch64-unknown-linux-musl** binary for `@farmfe/module-federation` diff --git a/rust-plugins/module-federation/npm/linux-arm64-musl/package.json b/rust-plugins/module-federation/npm/linux-arm64-musl/package.json new file mode 100644 index 000000000..30ce4b9bc --- /dev/null +++ b/rust-plugins/module-federation/npm/linux-arm64-musl/package.json @@ -0,0 +1,21 @@ +{ + "name": "@farmfe/module-federation-linux-arm64-musl", + "version": "0.0.0", + "os": [ + "linux" + ], + "cpu": [ + "arm64" + ], + "main": "index.farm", + "files": [ + "index.farm" + ], + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "libc": [ + "glibc" + ] +} diff --git a/rust-plugins/module-federation/npm/linux-x64-gnu/README.md b/rust-plugins/module-federation/npm/linux-x64-gnu/README.md new file mode 100644 index 000000000..1fa96814b --- /dev/null +++ b/rust-plugins/module-federation/npm/linux-x64-gnu/README.md @@ -0,0 +1,3 @@ +# `@farmfe/module-federation-linux-x64-gnu` + +This is the **x86_64-unknown-linux-gnu** binary for `@farmfe/module-federation` diff --git a/rust-plugins/module-federation/npm/linux-x64-gnu/package.json b/rust-plugins/module-federation/npm/linux-x64-gnu/package.json new file mode 100644 index 000000000..680bb9391 --- /dev/null +++ b/rust-plugins/module-federation/npm/linux-x64-gnu/package.json @@ -0,0 +1,21 @@ +{ + "name": "@farmfe/module-federation-linux-x64-gnu", + "version": "0.0.0", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "main": "index.farm", + "files": [ + "index.farm" + ], + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "libc": [ + "glibc" + ] +} diff --git a/rust-plugins/module-federation/npm/linux-x64-musl/README.md b/rust-plugins/module-federation/npm/linux-x64-musl/README.md new file mode 100644 index 000000000..730ffe522 --- /dev/null +++ b/rust-plugins/module-federation/npm/linux-x64-musl/README.md @@ -0,0 +1,3 @@ +# `@farmfe/module-federation-linux-x64-musl` + +This is the **x86_64-unknown-linux-musl** binary for `@farmfe/module-federation` diff --git a/rust-plugins/module-federation/npm/linux-x64-musl/package.json b/rust-plugins/module-federation/npm/linux-x64-musl/package.json new file mode 100644 index 000000000..9080a1088 --- /dev/null +++ b/rust-plugins/module-federation/npm/linux-x64-musl/package.json @@ -0,0 +1,18 @@ +{ + "name": "@farmfe/module-federation-linux-x64-musl", + "version": "0.0.0", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "main": "index.farm", + "files": [ + "index.farm" + ], + "license": "MIT", + "engines": { + "node": ">= 10" + } +} diff --git a/rust-plugins/module-federation/npm/win32-arm64-msvc/README.md b/rust-plugins/module-federation/npm/win32-arm64-msvc/README.md new file mode 100644 index 000000000..f1d2c6670 --- /dev/null +++ b/rust-plugins/module-federation/npm/win32-arm64-msvc/README.md @@ -0,0 +1,3 @@ +# `@farmfe/module-federation-win32-arm64-msvc` + +This is the aarch64-pc-windows-msvc binary for `@farmfe/module-federation` diff --git a/rust-plugins/module-federation/npm/win32-arm64-msvc/package.json b/rust-plugins/module-federation/npm/win32-arm64-msvc/package.json new file mode 100644 index 000000000..a92e62036 --- /dev/null +++ b/rust-plugins/module-federation/npm/win32-arm64-msvc/package.json @@ -0,0 +1,18 @@ +{ + "name": "@farmfe/module-federation-win32-arm64-msvc", + "version": "0.0.0", + "os": [ + "win32" + ], + "cpu": [ + "arm64" + ], + "main": "index.farm", + "files": [ + "index.farm" + ], + "license": "MIT", + "engines": { + "node": ">= 10" + } +} diff --git a/rust-plugins/module-federation/npm/win32-ia32-msvc/README.md b/rust-plugins/module-federation/npm/win32-ia32-msvc/README.md new file mode 100644 index 000000000..f1e30cb38 --- /dev/null +++ b/rust-plugins/module-federation/npm/win32-ia32-msvc/README.md @@ -0,0 +1,3 @@ +# `@farmfe/module-federation-win32-ia32-msvc` + +This is the i686-pc-windows-msvc binary for `@farmfe/module-federation` diff --git a/rust-plugins/module-federation/npm/win32-ia32-msvc/package.json b/rust-plugins/module-federation/npm/win32-ia32-msvc/package.json new file mode 100644 index 000000000..68929aea3 --- /dev/null +++ b/rust-plugins/module-federation/npm/win32-ia32-msvc/package.json @@ -0,0 +1,18 @@ +{ + "name": "@farmfe/module-federation-win32-ia32-msvc", + "version": "0.0.0", + "os": [ + "win32" + ], + "cpu": [ + "ia32" + ], + "main": "index.farm", + "files": [ + "index.farm" + ], + "license": "MIT", + "engines": { + "node": ">= 10" + } +} diff --git a/rust-plugins/module-federation/npm/win32-x64-msvc/README.md b/rust-plugins/module-federation/npm/win32-x64-msvc/README.md new file mode 100644 index 000000000..704772bcc --- /dev/null +++ b/rust-plugins/module-federation/npm/win32-x64-msvc/README.md @@ -0,0 +1,3 @@ +# `@farmfe/module-federation-win32-x64-msvc` + +This is the **x86_64-pc-windows-msvc** binary for `@farmfe/module-federation` diff --git a/rust-plugins/module-federation/npm/win32-x64-msvc/package.json b/rust-plugins/module-federation/npm/win32-x64-msvc/package.json new file mode 100644 index 000000000..79ca00d15 --- /dev/null +++ b/rust-plugins/module-federation/npm/win32-x64-msvc/package.json @@ -0,0 +1,18 @@ +{ + "name": "@farmfe/module-federation-win32-x64-msvc", + "version": "0.0.0", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "main": "index.farm", + "files": [ + "index.farm" + ], + "license": "MIT", + "engines": { + "node": ">= 10" + } +} diff --git a/rust-plugins/module-federation/options.d.ts b/rust-plugins/module-federation/options.d.ts new file mode 100644 index 000000000..876eb2356 --- /dev/null +++ b/rust-plugins/module-federation/options.d.ts @@ -0,0 +1,3 @@ +export interface IPluginOptions { + +} diff --git a/rust-plugins/module-federation/package.json b/rust-plugins/module-federation/package.json new file mode 100644 index 000000000..e49d65149 --- /dev/null +++ b/rust-plugins/module-federation/package.json @@ -0,0 +1,43 @@ +{ + "name": "@farmfe/plugin-module-federation", + "version": "0.0.0", + "main": "scripts/index.js", + "types": "scripts/index.d.ts", + "type": "module", + "license": "MIT", + "devDependencies": { + "@farmfe/plugin-tools": "latest" + }, + "napi": { + "name": "farmfe_module_federation", + "triples": { + "additional": [ + "aarch64-apple-darwin", + "aarch64-unknown-linux-gnu", + "aarch64-unknown-linux-musl", + "x86_64-unknown-linux-musl", + "i686-pc-windows-msvc", + "aarch64-pc-windows-msvc" + ] + } + }, + "exports": { + ".": { + "import": "./scripts/func.js", + "types": "./scripts/index.d.ts", + "default": "./scripts/index.js" + }, + "./package.json": "./package.json" + }, + "scripts": { + "dev": "cargo watch -w src -s 'scripts/watch.sh'", + "bump": "npx changeset version", + "play": "pnpm --filter playground dev", + "build": "farm-plugin-tools build --platform --cargo-name farmfe_module_federation -p farmfe_module_federation --release", + "prepublishOnly": "farm-plugin-tools prepublish" + }, + "files": [ + "scripts", + "options.d.ts" + ] +} diff --git a/rust-plugins/module-federation/scripts/func.js b/rust-plugins/module-federation/scripts/func.js new file mode 100644 index 000000000..ebd41be5b --- /dev/null +++ b/rust-plugins/module-federation/scripts/func.js @@ -0,0 +1,3 @@ +import binPath from "./index.js"; + +export default (options)=>[binPath,options]; diff --git a/rust-plugins/module-federation/scripts/index.d.ts b/rust-plugins/module-federation/scripts/index.d.ts new file mode 100644 index 000000000..2a1c6bb1e --- /dev/null +++ b/rust-plugins/module-federation/scripts/index.d.ts @@ -0,0 +1,3 @@ +import type { IPluginOptions } from '../options'; +declare const binPath: (options?: IPluginOptions) => [string, IPluginOptions]; +export default binPath; diff --git a/rust-plugins/module-federation/scripts/index.js b/rust-plugins/module-federation/scripts/index.js new file mode 100644 index 000000000..e7723d20d --- /dev/null +++ b/rust-plugins/module-federation/scripts/index.js @@ -0,0 +1,124 @@ +import { existsSync, readFileSync } from 'fs'; +import { createRequire } from 'module'; +import { dirname, join } from 'path'; +import { fileURLToPath } from 'url'; + +const { platform, arch } = process; +const currentDir = dirname(fileURLToPath(import.meta.url)); + +let binPath = null; + +const require = createRequire(import.meta.url); + +function isMusl() { + // For Node 10 + if (!process.report || typeof process.report.getReport !== 'function') { + try { + return readFileSync('/usr/bin/ldd', 'utf8').includes('musl'); + } catch (e) { + return true; + } + } else { + const { glibcVersionRuntime } = process.report.getReport().header; + return !glibcVersionRuntime; + } +} + +switch (platform) { + case 'win32': + switch (arch) { + case 'x64': + if (existsSync(join(currentDir, '../npm/win32-x64-msvc/index.farm'))) { + binPath = join(currentDir, '../npm/win32-x64-msvc/index.farm'); + } else { + binPath = require.resolve('@farmfe/module-federation-win32-x64-msvc'); + } + + break; + case 'ia32': + if (existsSync(join(currentDir, '../npm/win32-ia32-msvc/index.farm'))) { + binPath = join(currentDir, '../npm/win32-ia32-msvc/index.farm'); + } else { + binPath = require.resolve('@farmfe/module-federation-win32-ia32-msvc'); + } + + break; + case 'arm64': + if (existsSync(join(currentDir, '../npm/win32-arm64-msvc/index.farm'))) { + binPath = join(currentDir, '../npm/win32-arm64-msvc/index.farm'); + } else { + binPath = require.resolve('@farmfe/module-federation-win32-arm64-msvc'); + } + + break; + default: + throw new Error(`Unsupported architecture on Windows: ${arch}`); + } + break; + case 'darwin': + switch (arch) { + case 'x64': + if (existsSync(join(currentDir, '../npm/darwin-x64/index.farm'))) { + binPath = join(currentDir, '../npm/darwin-x64/index.farm'); + } else { + binPath = require.resolve('@farmfe/module-federation-darwin-x64'); + } + break; + case 'arm64': + if (existsSync(join(currentDir, '../npm/darwin-arm64/index.farm'))) { + binPath = join(currentDir, '../npm/darwin-arm64/index.farm'); + } else { + binPath = require.resolve('@farmfe/module-federation-darwin-arm64'); + } + break; + default: + throw new Error(`Unsupported architecture on macOS: ${arch}`); + } + break; + case 'linux': + switch (arch) { + case 'x64': + if (isMusl()) { + if (existsSync(join(currentDir, '../npm/linux-x64-musl/index.farm'))) { + binPath = join(currentDir, '../npm/linux-x64-musl/index.farm'); + } else { + binPath = require.resolve('@farmfe/module-federation-linux-x64-musl'); + } + } else { + if (existsSync(join(currentDir, '../npm/linux-x64-gnu/index.farm'))) { + binPath = join(currentDir, '../npm/linux-x64-gnu/index.farm'); + } else { + binPath = require.resolve('@farmfe/module-federation-linux-x64-gnu'); + } + } + + break; + + case 'arm64': + if (isMusl()) { + if ( + existsSync(join(currentDir, '../npm/linux-arm64-musl/index.farm')) + ) { + binPath = join(currentDir, '../npm/linux-arm64-musl/index.farm'); + } else { + binPath = require.resolve('@farmfe/module-federation-linux-arm64-musl'); + } + } else { + if ( + existsSync(join(currentDir, '../npm/linux-arm64-gnu/index.farm')) + ) { + binPath = join(currentDir, '../npm/linux-arm64-gnu/index.farm'); + } else { + binPath = require.resolve('@farmfe/module-federation-linux-arm64-gnu'); + } + } + break; + default: + throw new Error(`Unsupported architecture on Linux: ${arch}`); + } + break; + default: + throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`); +} + +export default binPath; diff --git a/rust-plugins/module-federation/scripts/watch.sh b/rust-plugins/module-federation/scripts/watch.sh new file mode 100755 index 000000000..255a484ac --- /dev/null +++ b/rust-plugins/module-federation/scripts/watch.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +npm run build diff --git a/rust-plugins/module-federation/src/lib.rs b/rust-plugins/module-federation/src/lib.rs new file mode 100644 index 000000000..21a947f79 --- /dev/null +++ b/rust-plugins/module-federation/src/lib.rs @@ -0,0 +1,34 @@ +#![deny(clippy::all)] + +use farmfe_core::{ + config::Config, context::CompilationContext, error::CompilationError, plugin::Plugin, + stats::Stats, +}; + +use std::sync::Arc; + +use farmfe_macro_plugin::farm_plugin; + +#[farm_plugin] +pub struct FarmfeModuleFederation {} + +impl FarmfeModuleFederation { + fn new(config: &Config, options: String) -> Self { + Self {} + } +} + +impl Plugin for FarmfeModuleFederation { + fn name(&self) -> &str { + "FarmfeModuleFederation" + } + + fn finish( + &self, + _stat: &Stats, + _context: &Arc, + ) -> Result, CompilationError> { + println!("Module Federation Plugin Finish"); + Ok(None) + } +}