From 5af6ae024c939cc8fe895d82632c1825cac1c81f Mon Sep 17 00:00:00 2001 From: 2heal1 <TwoHeal@163.com> Date: Mon, 20 Jan 2025 20:23:09 +0800 Subject: [PATCH 1/2] feat: add Create a new Module Federation project cli --- .changeset/beige-otters-tease.md | 5 + .eslintignore | 2 +- .prettierignore | 2 + apps/rslib-module/rslib.config.ts | 6 +- .../create-module-federation/CHANGELOG.md | 1 + packages/create-module-federation/LICENSE | 21 + packages/create-module-federation/README.md | 1 + .../create-module-federation/jest.config.js | 27 + .../create-module-federation/package.json | 44 ++ .../create-module-federation/project.json | 65 ++ .../create-module-federation/rslib.config.ts | 7 + .../create-module-federation/src/create.ts | 400 +++++++++++ .../src/handlebars/index.ts | 66 ++ .../src/handlebars/utils.ts | 21 + .../create-module-federation/src/index.ts | 20 + .../src/materials/FsMaterial.ts | 48 ++ .../src/materials/FsResource.ts | 29 + .../src/materials/constants.ts | 12 + .../src/materials/index.ts | 2 + .../module-federation.config.ts.handlebars | 12 + .../consumer-modern-ts/src/routes/page.tsx | 34 + .../templates/consumer-rsbuild-ts/src/App.tsx | 25 + .../templates/lib-common/.gitignore | 13 + .../module-federation.config.ts.handlebars | 17 + .../templates/lib-common/rslib.config.ts | 46 ++ .../templates/lib-common/src/Description.tsx | 7 + .../templates/lib-common/src/Footer.css | 46 ++ .../templates/lib-common/src/Footer.tsx | 74 ++ .../templates/lib-common/src/Header.tsx | 9 + .../templates/lib-common/src/index.tsx | 3 + .../templates/lib-common/tsconfig.json | 14 + .../templates/modern-common/.browserslistrc | 5 + .../templates/modern-common/.gitignore | 30 + .../templates/modern-common/.npmrc | 1 + .../templates/modern-common/.nvmrc | 1 + .../modern-common/.vscode/extensions.json | 14 + .../modern-common/.vscode/settings.json | 88 +++ .../templates/modern-common/README.md | 37 + .../templates/modern-common/biome.json | 34 + .../templates/modern-common/modern.config.ts | 15 + .../templates/modern-common/package.json | 45 ++ .../modern-common/package.json.handlebars | 45 ++ .../src/components/ComponentInspector.css | 86 +++ .../src/components/ComponentInspector.tsx | 68 ++ .../modern-common/src/modern-app-env.d.ts | 3 + .../modern-common/src/modern.runtime.ts | 3 + .../modern-common/src/routes/index.css | 41 ++ .../modern-common/src/routes/layout.tsx | 9 + .../templates/modern-common/tsconfig.json | 14 + .../module-federation.config.ts.handlebars | 14 + .../src/components/Description.css | 23 + .../src/components/Description.tsx | 11 + .../src/components/Footer.css | 45 ++ .../src/components/Footer.tsx | 74 ++ .../src/components/Header.css | 11 + .../src/components/Header.tsx | 17 + .../provider-modern-ts/src/routes/page.tsx | 34 + .../module-federation.config.ts.handlebars | 14 + .../templates/provider-rsbuild-ts/src/App.tsx | 25 + .../src/components/Description.tsx | 7 + .../src/components/Footer.css | 46 ++ .../src/components/Footer.tsx | 74 ++ .../src/components/Header.tsx | 9 + .../.storybook/main.ts | 41 ++ .../provider-rslib-storybook-ts/README.md | 27 + .../package.json.handlebars | 34 + .../stories/Description.stories.tsx | 11 + .../stories/Footer.stories.tsx | 11 + .../stories/Header.stories.tsx | 11 + .../templates/provider-rslib-ts/README.md | 19 + .../provider-rslib-ts/package.json.handlebars | 48 ++ .../templates/rsbuild-common/.gitignore | 13 + .../templates/rsbuild-common/README.md | 29 + .../rsbuild-common/package.json.handlebars | 22 + .../templates/rsbuild-common/public/.gitkeep | 0 .../rsbuild-common/rsbuild.config.ts | 8 + .../templates/rsbuild-common/src/App.css | 15 + .../rsbuild-common/src/bootstrap.tsx | 13 + .../src/components/ComponentInspector.css | 86 +++ .../src/components/ComponentInspector.tsx | 68 ++ .../templates/rsbuild-common/src/env.d.ts | 1 + .../templates/rsbuild-common/src/index.tsx | 1 + .../templates/rsbuild-common/tsconfig.json | 26 + .../create-module-federation/tsconfig.json | 30 + .../tsconfig.lib.json | 10 + .../tsconfig.spec.json | 14 + packages/data-prefetch/tsconfig.json | 1 - packages/rsbuild-plugin/src/cli/index.ts | 21 +- .../tsconfig.json | 1 - pnpm-lock.yaml | 662 +++++++++++++----- 90 files changed, 3053 insertions(+), 192 deletions(-) create mode 100644 .changeset/beige-otters-tease.md create mode 100644 packages/create-module-federation/CHANGELOG.md create mode 100644 packages/create-module-federation/LICENSE create mode 100644 packages/create-module-federation/README.md create mode 100644 packages/create-module-federation/jest.config.js create mode 100644 packages/create-module-federation/package.json create mode 100644 packages/create-module-federation/project.json create mode 100644 packages/create-module-federation/rslib.config.ts create mode 100644 packages/create-module-federation/src/create.ts create mode 100644 packages/create-module-federation/src/handlebars/index.ts create mode 100644 packages/create-module-federation/src/handlebars/utils.ts create mode 100644 packages/create-module-federation/src/index.ts create mode 100644 packages/create-module-federation/src/materials/FsMaterial.ts create mode 100644 packages/create-module-federation/src/materials/FsResource.ts create mode 100644 packages/create-module-federation/src/materials/constants.ts create mode 100644 packages/create-module-federation/src/materials/index.ts create mode 100644 packages/create-module-federation/templates/consumer-modern-ts/module-federation.config.ts.handlebars create mode 100644 packages/create-module-federation/templates/consumer-modern-ts/src/routes/page.tsx create mode 100644 packages/create-module-federation/templates/consumer-rsbuild-ts/src/App.tsx create mode 100644 packages/create-module-federation/templates/lib-common/.gitignore create mode 100644 packages/create-module-federation/templates/lib-common/module-federation.config.ts.handlebars create mode 100644 packages/create-module-federation/templates/lib-common/rslib.config.ts create mode 100644 packages/create-module-federation/templates/lib-common/src/Description.tsx create mode 100644 packages/create-module-federation/templates/lib-common/src/Footer.css create mode 100644 packages/create-module-federation/templates/lib-common/src/Footer.tsx create mode 100644 packages/create-module-federation/templates/lib-common/src/Header.tsx create mode 100644 packages/create-module-federation/templates/lib-common/src/index.tsx create mode 100644 packages/create-module-federation/templates/lib-common/tsconfig.json create mode 100644 packages/create-module-federation/templates/modern-common/.browserslistrc create mode 100644 packages/create-module-federation/templates/modern-common/.gitignore create mode 100644 packages/create-module-federation/templates/modern-common/.npmrc create mode 100644 packages/create-module-federation/templates/modern-common/.nvmrc create mode 100644 packages/create-module-federation/templates/modern-common/.vscode/extensions.json create mode 100644 packages/create-module-federation/templates/modern-common/.vscode/settings.json create mode 100644 packages/create-module-federation/templates/modern-common/README.md create mode 100644 packages/create-module-federation/templates/modern-common/biome.json create mode 100644 packages/create-module-federation/templates/modern-common/modern.config.ts create mode 100644 packages/create-module-federation/templates/modern-common/package.json create mode 100644 packages/create-module-federation/templates/modern-common/package.json.handlebars create mode 100644 packages/create-module-federation/templates/modern-common/src/components/ComponentInspector.css create mode 100644 packages/create-module-federation/templates/modern-common/src/components/ComponentInspector.tsx create mode 100644 packages/create-module-federation/templates/modern-common/src/modern-app-env.d.ts create mode 100644 packages/create-module-federation/templates/modern-common/src/modern.runtime.ts create mode 100644 packages/create-module-federation/templates/modern-common/src/routes/index.css create mode 100644 packages/create-module-federation/templates/modern-common/src/routes/layout.tsx create mode 100644 packages/create-module-federation/templates/modern-common/tsconfig.json create mode 100644 packages/create-module-federation/templates/provider-modern-ts/module-federation.config.ts.handlebars create mode 100644 packages/create-module-federation/templates/provider-modern-ts/src/components/Description.css create mode 100644 packages/create-module-federation/templates/provider-modern-ts/src/components/Description.tsx create mode 100644 packages/create-module-federation/templates/provider-modern-ts/src/components/Footer.css create mode 100644 packages/create-module-federation/templates/provider-modern-ts/src/components/Footer.tsx create mode 100644 packages/create-module-federation/templates/provider-modern-ts/src/components/Header.css create mode 100644 packages/create-module-federation/templates/provider-modern-ts/src/components/Header.tsx create mode 100644 packages/create-module-federation/templates/provider-modern-ts/src/routes/page.tsx create mode 100644 packages/create-module-federation/templates/provider-rsbuild-ts/module-federation.config.ts.handlebars create mode 100644 packages/create-module-federation/templates/provider-rsbuild-ts/src/App.tsx create mode 100644 packages/create-module-federation/templates/provider-rsbuild-ts/src/components/Description.tsx create mode 100644 packages/create-module-federation/templates/provider-rsbuild-ts/src/components/Footer.css create mode 100644 packages/create-module-federation/templates/provider-rsbuild-ts/src/components/Footer.tsx create mode 100644 packages/create-module-federation/templates/provider-rsbuild-ts/src/components/Header.tsx create mode 100644 packages/create-module-federation/templates/provider-rslib-storybook-ts/.storybook/main.ts create mode 100644 packages/create-module-federation/templates/provider-rslib-storybook-ts/README.md create mode 100644 packages/create-module-federation/templates/provider-rslib-storybook-ts/package.json.handlebars create mode 100644 packages/create-module-federation/templates/provider-rslib-storybook-ts/stories/Description.stories.tsx create mode 100644 packages/create-module-federation/templates/provider-rslib-storybook-ts/stories/Footer.stories.tsx create mode 100644 packages/create-module-federation/templates/provider-rslib-storybook-ts/stories/Header.stories.tsx create mode 100644 packages/create-module-federation/templates/provider-rslib-ts/README.md create mode 100644 packages/create-module-federation/templates/provider-rslib-ts/package.json.handlebars create mode 100644 packages/create-module-federation/templates/rsbuild-common/.gitignore create mode 100644 packages/create-module-federation/templates/rsbuild-common/README.md create mode 100644 packages/create-module-federation/templates/rsbuild-common/package.json.handlebars create mode 100644 packages/create-module-federation/templates/rsbuild-common/public/.gitkeep create mode 100644 packages/create-module-federation/templates/rsbuild-common/rsbuild.config.ts create mode 100644 packages/create-module-federation/templates/rsbuild-common/src/App.css create mode 100644 packages/create-module-federation/templates/rsbuild-common/src/bootstrap.tsx create mode 100644 packages/create-module-federation/templates/rsbuild-common/src/components/ComponentInspector.css create mode 100644 packages/create-module-federation/templates/rsbuild-common/src/components/ComponentInspector.tsx create mode 100644 packages/create-module-federation/templates/rsbuild-common/src/env.d.ts create mode 100644 packages/create-module-federation/templates/rsbuild-common/src/index.tsx create mode 100644 packages/create-module-federation/templates/rsbuild-common/tsconfig.json create mode 100644 packages/create-module-federation/tsconfig.json create mode 100644 packages/create-module-federation/tsconfig.lib.json create mode 100644 packages/create-module-federation/tsconfig.spec.json diff --git a/.changeset/beige-otters-tease.md b/.changeset/beige-otters-tease.md new file mode 100644 index 00000000000..7391b167424 --- /dev/null +++ b/.changeset/beige-otters-tease.md @@ -0,0 +1,5 @@ +--- +'create-module-federation': patch +--- + +feat: add Create a new Module Federation project cli diff --git a/.eslintignore b/.eslintignore index 52908858183..91aba082d89 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,3 @@ node_modules/ vite.config.ts -**/dist/** \ No newline at end of file +**/dist/** diff --git a/.prettierignore b/.prettierignore index 53d01379255..149a6d43d01 100644 --- a/.prettierignore +++ b/.prettierignore @@ -11,3 +11,5 @@ apps/website-new/docs /.nx/workspace-data /.nx/cache + +**/*.handlebars diff --git a/apps/rslib-module/rslib.config.ts b/apps/rslib-module/rslib.config.ts index dd3763fa44b..5e22e8f0955 100644 --- a/apps/rslib-module/rslib.config.ts +++ b/apps/rslib-module/rslib.config.ts @@ -36,11 +36,11 @@ export default defineConfig({ root: './dist/mf', }, }, - server: { - port: 3001, - }, }, ], + server: { + port: 3001, + }, plugins: [ pluginReact(), pluginModuleFederation({ diff --git a/packages/create-module-federation/CHANGELOG.md b/packages/create-module-federation/CHANGELOG.md new file mode 100644 index 00000000000..992a0c9c99a --- /dev/null +++ b/packages/create-module-federation/CHANGELOG.md @@ -0,0 +1 @@ +# create-module-federation diff --git a/packages/create-module-federation/LICENSE b/packages/create-module-federation/LICENSE new file mode 100644 index 00000000000..f428f6109cd --- /dev/null +++ b/packages/create-module-federation/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024-present hanric(2heal1) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/create-module-federation/README.md b/packages/create-module-federation/README.md new file mode 100644 index 00000000000..b1d45d330a2 --- /dev/null +++ b/packages/create-module-federation/README.md @@ -0,0 +1 @@ +# `create-module-federation` diff --git a/packages/create-module-federation/jest.config.js b/packages/create-module-federation/jest.config.js new file mode 100644 index 00000000000..e99f20c50b7 --- /dev/null +++ b/packages/create-module-federation/jest.config.js @@ -0,0 +1,27 @@ +// For a detailed explanation regarding each configuration property, visit: +// https://jestjs.io/docs/en/configuration.html + +module.exports = { + clearMocks: true, + testEnvironment: 'jsdom', + coveragePathIgnorePatterns: ['__tests__', '/node_modules/'], + coverageProvider: 'v8', + coverageReporters: ['cobertura', 'clover', 'json', 'lcov', 'text'], + globals: { + __DEV__: true, + __TEST__: true, + __BROWSER__: false, + __VERSION__: '"unknown"', + }, + preset: 'ts-jest', + transformIgnorePatterns: [ + // Change MODULE_NAME_HERE to your module that isn't being compiled + '/node_modules/(?!((@byted/garfish-)|(byted-tea-sdk))).+\\.js$', + ], + transform: { + '^.+\\.(t|j)sx?$': ['@swc/jest'], + }, + rootDir: __dirname, + testMatch: ['<rootDir>__tests__/**/**.spec.[jt]s?(x)'], + testPathIgnorePatterns: ['/node_modules/'], +}; diff --git a/packages/create-module-federation/package.json b/packages/create-module-federation/package.json new file mode 100644 index 00000000000..298cf225f7d --- /dev/null +++ b/packages/create-module-federation/package.json @@ -0,0 +1,44 @@ +{ + "name": "create-module-federation", + "description": "Create a new Module Federation project", + "public": true, + "sideEffects": false, + "version": "0.0.0", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/module-federation/core/", + "directory": "packages/create-module-federation" + }, + "publishConfig": { + "access": "public" + }, + "type": "module", + "scripts": { + "build": "rslib build" + }, + "main": "./dist/index.js", + "bin": { + "create-module-federation": "./dist/index.js" + }, + "files": [ + "template", + "dist" + ], + "dependencies": { + "@clack/prompts": "^0.8.2", + "execa": "5.1.1", + "fs-extra": "9.1.0", + "minimist": "^1.2.8", + "rslog": "^1.2.3", + "glob": "7.2.0", + "handlebars": "4.7.7" + }, + "devDependencies": { + "@types/glob": "7.2.0", + "@types/minimist": "^1.2.5", + "@types/fs-extra": "9.0.6", + "@rslib/core": "^0.3.1", + "rsbuild-plugin-publint": "^0.2.1" + } +} diff --git a/packages/create-module-federation/project.json b/packages/create-module-federation/project.json new file mode 100644 index 00000000000..98bc4c8d17a --- /dev/null +++ b/packages/create-module-federation/project.json @@ -0,0 +1,65 @@ +{ + "name": "create-module-federation", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "packages/create-module-federation/src", + "projectType": "library", + "tags": ["type:pkg"], + "targets": { + "build": { + "executor": "nx:run-commands", + "options": { + "parallel": false, + "dependsOn": [ + { + "target": "build", + "dependencies": true + } + ], + "commands": [ + "cd packages/create-module-federation; pnpm run build", + "cp packages/create-module-federation/LICENSE packages/create-module-federation/dist" + ] + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": [ + "packages/create-module-federation/**/*.ts", + "packages/create-module-federation/package.json" + ] + } + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "packages/create-module-federation/jest.config.js", + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "codeCoverage": true + } + } + }, + "pre-release": { + "executor": "nx:run-commands", + "options": { + "parallel": false, + "commands": [ + { + "command": "nx run create-module-federation:test", + "forwardAllArgs": false + }, + { + "command": "nx run create-module-federation:build", + "forwardAllArgs": false + } + ] + } + } + } +} diff --git a/packages/create-module-federation/rslib.config.ts b/packages/create-module-federation/rslib.config.ts new file mode 100644 index 00000000000..bf77c216693 --- /dev/null +++ b/packages/create-module-federation/rslib.config.ts @@ -0,0 +1,7 @@ +import { pluginPublint } from 'rsbuild-plugin-publint'; +import { defineConfig } from '@rslib/core'; + +export default defineConfig({ + lib: [{ format: 'esm' }], + plugins: [pluginPublint()], +}); diff --git a/packages/create-module-federation/src/create.ts b/packages/create-module-federation/src/create.ts new file mode 100644 index 00000000000..2b798ccba0d --- /dev/null +++ b/packages/create-module-federation/src/create.ts @@ -0,0 +1,400 @@ +/** + * forked from https://github.com/rspack-contrib/create-rstack + * license at https://github.com/rspack-contrib/create-rstack/blob/main/LICENSE + */ +import path from 'path'; +import fs from 'fs'; +import { + cancel, + isCancel, + multiselect, + note, + outro, + select, + text, +} from '@clack/prompts'; +import minimist from 'minimist'; +import { logger } from 'rslog'; +import { FsMaterial } from './materials/FsMaterial'; +import { HandlebarsAPI } from './handlebars'; + +type Argv = { + help?: boolean; + dir?: string; + template?: string; + override?: boolean; +}; + +type ProjectType = 'lib' | 'app'; +type RoleType = 'consumer' | 'provider'; +type AppTemplateName = 'modern' | 'rsbuild'; +type LibTemplateName = 'rslib'; +type ProviderInfo = { + name: string; + entry: string; +}; + +function upperFirst(str: string) { + return str.charAt(0).toUpperCase() + str.slice(1); +} + +function logHelpMessage(name: string, templates: string[]) { + logger.log(` + Usage: create-${name} [options] + + Options: + + -h, --help display help for command + -d, --dir create project in specified directory + -t, --template specify the template to use + --override override files in target directory + + Templates: + + ${templates.join(', ')} +`); +} + +function pkgFromUserAgent(userAgent: string | undefined) { + if (!userAgent) return undefined; + const pkgSpec = userAgent.split(' ')[0]; + const pkgSpecArr = pkgSpec.split('/'); + return { + name: pkgSpecArr[0], + version: pkgSpecArr[1], + }; +} + +function cancelAndExit() { + cancel('Operation cancelled.'); + process.exit(0); +} + +function checkCancel<T>(value: unknown) { + if (isCancel(value)) { + cancelAndExit(); + } + return value as T; +} + +/** + * 1. Input: 'foo' + * Output: folder `<cwd>/foo`, `package.json#name` -> `foo` + * + * 2. Input: 'foo/bar' + * Output: folder -> `<cwd>/foo/bar` folder, `package.json#name` -> `bar` + * + * 3. Input: '@scope/foo' + * Output: folder -> `<cwd>/@scope/bar` folder, `package.json#name` -> `@scope/foo` + * + * 4. Input: './foo/bar' + * Output: folder -> `<cwd>/foo/bar` folder, `package.json#name` -> `bar` + * + * 5. Input: '/root/path/to/foo' + * Output: folder -> `'/root/path/to/foo'` folder, `package.json#name` -> `foo` + */ +function formatDir(input: string) { + return { + targetDir: input.trim().replace(/\/+$/g, ''), + }; +} + +function isEmptyDir(path: string) { + const files = fs.readdirSync(path); + return files.length === 0 || (files.length === 1 && files[0] === '.git'); +} + +async function getAppTemplateName( + { + roleType, + framework, + }: { + roleType: RoleType; + framework: AppTemplateName; + }, + { template }: Argv, +) { + if (template) { + return `${template}-ts`; + } + + let providerInfo: ProviderInfo = { + name: '', + entry: '', + }; + + if (roleType === 'consumer') { + const providerName = checkCancel<string>( + await text({ + message: + 'Please input your provider name (You can skip by press "enter"):', + defaultValue: '', + }), + ); + + if (providerName) { + providerInfo.name = providerName; + + const providerEntry = checkCancel<string>( + await text({ + message: `Please input your provider("${providerName}") entry:`, + validate(value) { + if (value.length === 0) { + return 'Entry is required'; + } + }, + }), + ); + providerInfo.entry = providerEntry; + } + } + + return `${roleType}-${framework}-ts`; +} + +async function getLibTemplateName({ template }: Argv) { + if (template) { + return `${template}-ts`; + } + + const templateName = checkCancel<LibTemplateName>( + await select({ + message: 'Select template', + options: [{ value: 'rslib', label: 'Rslib' }], + }), + ); + + type ExcludesFalse = <T>(x: T | false) => x is T; + const tools = checkCancel<string[]>( + await multiselect({ + message: + 'Select development tools (Use <space> to select, <enter> to continue)', + required: false, + options: [ + { + value: 'storybook', + label: 'Storybook', + }, + // TODO: support Rspress Module doc in the future + ].filter(Boolean as any as ExcludesFalse), + }), + ); + + // not support consumer yet, only support consume by runtime api + const roleType: RoleType = 'provider'; + + if (!tools || !Object.keys(tools).length) { + return `${roleType}-${templateName}-ts`; + } + + return `${roleType}-${templateName}-[${Object.keys(tools)}]-ts`; +} + +function getTemplateName( + { + projectType, + roleType, + framework, + }: { + projectType: ProjectType; + roleType: RoleType; + framework: AppTemplateName; + }, + args: Argv, +) { + if (projectType === 'app') { + return getAppTemplateName( + { + roleType, + framework, + }, + args, + ); + } + return getLibTemplateName(args); +} + +function getTemplateDir(templateName: string) { + return `templates/${templateName}/`; +} + +async function forgeTemplate({ + projectType, + argv, + templateParameters, + distFolder, +}: { + projectType: ProjectType; + argv: Argv; + templateParameters: Record<string, string>; + distFolder: string; +}) { + let framework: AppTemplateName = 'modern'; + let roleType: RoleType = 'provider'; + + if (projectType === 'app') { + framework = checkCancel<AppTemplateName>( + await select({ + message: 'Select template', + options: [ + { value: 'modern', label: 'Modern.js Framework' }, + { value: 'rsbuild', label: 'Rsbuild' }, + ], + }), + ); + + roleType = checkCancel<RoleType>( + await select({ + message: 'Please select the role of project you want to create:', + initialValue: 'provider', + options: [ + { value: 'consumer', label: 'Consumer' }, + { value: 'provider', label: 'Provider' }, + ], + }), + ); + } + + const templateName = await getTemplateName( + { + projectType, + framework, + roleType, + }, + argv, + ); + const material = new FsMaterial(__dirname); + + const renderTemplate = async (templateDir: string) => { + const templatePattern = `${templateDir}**/*`; + const resourceMap = await material.find(templatePattern, { + nodir: true, + dot: true, + }); + + const parameters = { + ...templateParameters, + }; + + await Promise.all( + Object.keys(resourceMap).map(async (resourceKey) => { + const target = resourceKey + .replace(templateDir, ``) + .replace('.handlebars', ``); + + const handlebarsAPI = new HandlebarsAPI(); + await handlebarsAPI.renderTemplate( + material.get(resourceKey), + target, + distFolder, + { + ...parameters, + }, + ); + }), + ); + }; + + const templateDir = getTemplateDir(templateName); + + let commonTemplateDir = ''; + if (projectType === 'lib') { + commonTemplateDir = 'templates/lib-common/'; + } else { + commonTemplateDir = `templates/${framework}-common/`; + } + + await renderTemplate(commonTemplateDir); + await renderTemplate(templateDir); +} + +export async function create({ + name, + templates, +}: { + name: string; + templates: string[]; +}) { + const argv = minimist<Argv>(process.argv.slice(2), { + alias: { h: 'help', d: 'dir', t: 'template' }, + }); + + console.log(''); + logger.greet(`◆ Create ${upperFirst(name)} Project`); + + if (argv.help) { + logHelpMessage(name, templates); + return; + } + + const cwd = process.cwd(); + const pkgInfo = pkgFromUserAgent(process.env['npm_config_user_agent']); + const pkgManager = pkgInfo ? pkgInfo.name : 'npm'; + + const mfName = + argv.dir ?? + checkCancel<string>( + await text({ + message: 'Please input Module Federation name:', + placeholder: 'mf-project-name', + defaultValue: 'mf-project-name', + validate(value) { + if (value.length === 0) { + return 'Name is required'; + } + }, + }), + ); + + const dir = argv.dir || 'mf-project'; + + const { targetDir } = formatDir(dir); + const distFolder = path.isAbsolute(targetDir) + ? targetDir + : path.join(cwd, targetDir); + + if (!argv.override && fs.existsSync(distFolder) && !isEmptyDir(distFolder)) { + const option = checkCancel<string>( + await select({ + message: `"${targetDir}" is not empty, please choose:`, + options: [ + { value: 'yes', label: 'Continue and override files' }, + { value: 'no', label: 'Cancel operation' }, + ], + }), + ); + + if (option === 'no') { + cancelAndExit(); + } + } + + const projectType = checkCancel<ProjectType>( + await select({ + message: 'Please select the type of project you want to create:', + options: [ + { value: 'app', label: 'Application' }, + { value: 'lib', label: 'Lib' }, + ], + }), + ); + + await forgeTemplate({ + projectType, + argv, + templateParameters: { + mfName, + }, + distFolder, + }); + + const nextSteps = [ + `cd ${targetDir}`, + `${pkgManager} install`, + `${pkgManager} run dev`, + ]; + + note(nextSteps.join('\n'), 'Next steps'); + + outro('Done.'); +} diff --git a/packages/create-module-federation/src/handlebars/index.ts b/packages/create-module-federation/src/handlebars/index.ts new file mode 100644 index 00000000000..871d0f4892a --- /dev/null +++ b/packages/create-module-federation/src/handlebars/index.ts @@ -0,0 +1,66 @@ +import { FS_RESOURCE } from '../materials'; +import { renderString, outputFs } from './utils'; + +import type { FsMaterial, FsResource } from '../materials'; + +type TargetFunction = (globMatch: string) => string; + +type RenderTemplateDirOptions = { + nodir?: boolean; + dot?: boolean; + ignore?: string | readonly string[]; + parameters?: Record<string, string>; +}; + +export { renderString }; + +export class HandlebarsAPI { + async renderTemplate( + templateResource: FsResource, + target: string, + outputFilePath: string, + parameters: Record<string, string> = {}, + ) { + if (templateResource._type !== FS_RESOURCE) { + throw new Error('resource not match'); + } + const resourceValue = await templateResource.value(); + if (typeof resourceValue.content !== 'string') { + throw new Error( + `resource.value is not string, resourceValue=${ + resourceValue as unknown as string + }`, + ); + } + await outputFs( + target, + renderString(resourceValue.content, parameters), + outputFilePath, + { encoding: 'utf-8' }, + ); + } + + async renderTemplateDir( + material: FsMaterial, + findGlob: string, + target: TargetFunction, + outputFilePath: string, + options?: RenderTemplateDirOptions, + ) { + const resourceMap = await material.find(findGlob, { + nodir: true, + ...options, + }); + await Promise.all( + // resourceKey is relate path. example: in `garr-master/package.json`, package.json is resourceKey + Object.keys(resourceMap).map(async (resourceKey) => { + await this.renderTemplate( + material.get(resourceKey), + target(resourceKey), + outputFilePath, + options?.parameters, + ); + }), + ); + } +} diff --git a/packages/create-module-federation/src/handlebars/utils.ts b/packages/create-module-federation/src/handlebars/utils.ts new file mode 100644 index 00000000000..73c93ff827f --- /dev/null +++ b/packages/create-module-federation/src/handlebars/utils.ts @@ -0,0 +1,21 @@ +import fs from 'fs-extra'; +import path from 'path'; +import handlebars from 'handlebars'; + +export function renderString( + template: string, + fullData: Record<string, unknown>, +): string { + return handlebars.compile(template)(fullData) || ''; +} + +export async function outputFs( + file: string | number, + content: any, + outputPath: string, + options?: fs.WriteFileOptions | string, +) { + const filePath = path.resolve(outputPath, file.toString()); + await fs.mkdirp(path.dirname(filePath)); + await fs.writeFile(filePath, content, options); +} diff --git a/packages/create-module-federation/src/index.ts b/packages/create-module-federation/src/index.ts new file mode 100644 index 00000000000..165aa271a85 --- /dev/null +++ b/packages/create-module-federation/src/index.ts @@ -0,0 +1,20 @@ +import { create } from './create'; + +interface Template { + template: string; + tools?: Record<string, string>; +} + +export const TEMPLATES = [ + 'provider-modern', + 'consumer-modern', + 'provider-rsbuild', + 'consumer-rsbuild', + 'rslib', + 'rslib-storybook', +]; + +create({ + name: 'Module Federation', + templates: TEMPLATES, +}); diff --git a/packages/create-module-federation/src/materials/FsMaterial.ts b/packages/create-module-federation/src/materials/FsMaterial.ts new file mode 100644 index 00000000000..a91eabc506c --- /dev/null +++ b/packages/create-module-federation/src/materials/FsMaterial.ts @@ -0,0 +1,48 @@ +import path from 'path'; +import glob from 'glob'; +import { FsResource } from './FsResource'; + +const promisifyGlob = ( + pattern: string, + options: glob.IOptions, +): Promise<string[]> => + new Promise((resolve, reject) => { + glob(pattern, options, (err, files) => + err === null ? resolve(files) : reject(err), + ); + }); + +export class FsMaterial { + basePath: string; + + constructor(basePath: string) { + this.basePath = basePath; + } + + get(resourceKey: string) { + return new FsResource( + path.resolve(this.basePath, resourceKey), + resourceKey, + ); + } + + async find( + globStr: string, + options?: { + nodir?: boolean; + dot?: boolean; + ignore?: string | readonly string[]; + }, + ): Promise<Record<string, FsResource>> { + const matches = await promisifyGlob(globStr, { + cwd: path.resolve(this.basePath), + nodir: options?.nodir, + dot: options?.dot, + ignore: options?.ignore, + }); + return matches.reduce<Record<string, FsResource>>((pre, cur) => { + pre[cur] = new FsResource(path.resolve(this.basePath, cur), cur); + return pre; + }, {}); + } +} diff --git a/packages/create-module-federation/src/materials/FsResource.ts b/packages/create-module-federation/src/materials/FsResource.ts new file mode 100644 index 00000000000..1dbbacd7d92 --- /dev/null +++ b/packages/create-module-federation/src/materials/FsResource.ts @@ -0,0 +1,29 @@ +import type { Buffer } from 'buffer'; +import path from 'path'; +import fs from 'fs-extra'; +import { IMAGE_EXT_LIST } from './constants'; + +export const FS_RESOURCE = '_mf_fs_resource'; + +export class FsResource { + _type: string = FS_RESOURCE; + + filePath: string; + + resourceKey: string; + + constructor(filePath: string, resourceKey: string) { + this.filePath = filePath; + this.resourceKey = resourceKey; + } + + async value(): Promise<{ content: string | Buffer }> { + const resourceFileExt = path.extname(this.filePath); + if (IMAGE_EXT_LIST.includes(resourceFileExt)) { + const buffer = await fs.readFile(path.resolve(this.filePath)); + return { content: buffer }; + } + const text = await fs.readFile(path.resolve(this.filePath), 'utf8'); + return { content: text }; + } +} diff --git a/packages/create-module-federation/src/materials/constants.ts b/packages/create-module-federation/src/materials/constants.ts new file mode 100644 index 00000000000..32e6a4449ec --- /dev/null +++ b/packages/create-module-federation/src/materials/constants.ts @@ -0,0 +1,12 @@ +export const IMAGE_EXT_LIST = [ + '.jpg', + '.jpeg', + '.png', + '.gif', + '.bmp', + '.ico', + '.icon', + '.mpt', + '.psd', + '.wmf', +]; diff --git a/packages/create-module-federation/src/materials/index.ts b/packages/create-module-federation/src/materials/index.ts new file mode 100644 index 00000000000..4ec1a014781 --- /dev/null +++ b/packages/create-module-federation/src/materials/index.ts @@ -0,0 +1,2 @@ +export { FsMaterial } from './FsMaterial'; +export { FsResource, FS_RESOURCE } from './FsResource'; diff --git a/packages/create-module-federation/templates/consumer-modern-ts/module-federation.config.ts.handlebars b/packages/create-module-federation/templates/consumer-modern-ts/module-federation.config.ts.handlebars new file mode 100644 index 00000000000..776aa71a4dd --- /dev/null +++ b/packages/create-module-federation/templates/consumer-modern-ts/module-federation.config.ts.handlebars @@ -0,0 +1,12 @@ +import { createModuleFederationConfig } from '@module-federation/modern-js'; + +export default createModuleFederationConfig({ + name: '{{mfName}}', + remotes: { + 'provider': 'provider@http://localhost:8080/mf-manifest.json', + }, + shared: { + react: { singleton: true }, + 'react-dom': { singleton: true }, + }, +}); diff --git a/packages/create-module-federation/templates/consumer-modern-ts/src/routes/page.tsx b/packages/create-module-federation/templates/consumer-modern-ts/src/routes/page.tsx new file mode 100644 index 00000000000..b1970527406 --- /dev/null +++ b/packages/create-module-federation/templates/consumer-modern-ts/src/routes/page.tsx @@ -0,0 +1,34 @@ +import { Helmet } from '@modern-js/runtime/head'; +import './index.css'; +import { ComponentInspector } from '../components/ComponentInspector'; +import Header from 'provider/Header'; +import Description from 'provider/Description'; +import Footer from 'provider/Footer'; + +const Index = () => ( + <div className="container-box"> + <Helmet> + <link + rel="icon" + type="image/x-icon" + href="https://lf3-static.bytednsdoc.com/obj/eden-cn/uhbfnupenuhf/favicon.ico" + /> + </Helmet> + + <div className="landing-page"> + <ComponentInspector componentName="Header" mfName="provider"> + <Header /> + </ComponentInspector> + + <ComponentInspector componentName="Description" mfName="provider"> + <Description /> + </ComponentInspector> + + <ComponentInspector componentName="Footer" mfName="provider"> + <Footer /> + </ComponentInspector> + </div> + </div> +); + +export default Index; diff --git a/packages/create-module-federation/templates/consumer-rsbuild-ts/src/App.tsx b/packages/create-module-federation/templates/consumer-rsbuild-ts/src/App.tsx new file mode 100644 index 00000000000..7932bce7d14 --- /dev/null +++ b/packages/create-module-federation/templates/consumer-rsbuild-ts/src/App.tsx @@ -0,0 +1,25 @@ +import './App.css'; +import { ComponentInspector } from './components/ComponentInspector'; +import Header from 'provider/Header'; +import Description from 'provider/Description'; +import Footer from 'provider/Footer'; + +const App = () => { + return ( + <div className="content"> + <ComponentInspector componentName="Header" mfName="provider"> + <Header /> + </ComponentInspector> + + <ComponentInspector componentName="Description" mfName="provider"> + <Description /> + </ComponentInspector> + + <ComponentInspector componentName="Footer" mfName="provider"> + <Footer /> + </ComponentInspector> + </div> + ); +}; + +export default App; diff --git a/packages/create-module-federation/templates/lib-common/.gitignore b/packages/create-module-federation/templates/lib-common/.gitignore new file mode 100644 index 00000000000..38d7344c8ca --- /dev/null +++ b/packages/create-module-federation/templates/lib-common/.gitignore @@ -0,0 +1,13 @@ +# Local +.DS_Store +*.local +*.log* + +# Dist +node_modules +dist/ + +# IDE +.vscode/* +!.vscode/extensions.json +.idea diff --git a/packages/create-module-federation/templates/lib-common/module-federation.config.ts.handlebars b/packages/create-module-federation/templates/lib-common/module-federation.config.ts.handlebars new file mode 100644 index 00000000000..e22e0e062c8 --- /dev/null +++ b/packages/create-module-federation/templates/lib-common/module-federation.config.ts.handlebars @@ -0,0 +1,17 @@ +export default { + name: '{{mfName}}', + exposes: { + '.': './src/index.tsx', + './Header': './src/Header.tsx', + './Description': './src/Description.tsx', + './Footer': './src/Footer.tsx', + }, + shared: { + react: { + singleton: true, + }, + 'react-dom': { + singleton: true, + }, + }, +} diff --git a/packages/create-module-federation/templates/lib-common/rslib.config.ts b/packages/create-module-federation/templates/lib-common/rslib.config.ts new file mode 100644 index 00000000000..76460fb94f9 --- /dev/null +++ b/packages/create-module-federation/templates/lib-common/rslib.config.ts @@ -0,0 +1,46 @@ +import { pluginReact } from '@rsbuild/plugin-react'; +import { defineConfig } from '@rslib/core'; +import { pluginModuleFederation } from '@module-federation/rsbuild-plugin'; +import moduleFederationConfig from './module-federation.config'; + +const shared = { + dts: { + bundle: false, + }, +}; + +export default defineConfig({ + lib: [ + { + ...shared, + format: 'esm', + output: { + distPath: { + root: './dist/esm', + }, + }, + }, + { + ...shared, + format: 'cjs', + output: { + distPath: { + root: './dist/cjs', + }, + }, + }, + { + ...shared, + format: 'mf', + output: { + distPath: { + root: './dist/mf', + }, + }, + }, + ], + server: { + port: 3001, + }, + plugins: [pluginReact(), pluginModuleFederation(moduleFederationConfig)], +}); diff --git a/packages/create-module-federation/templates/lib-common/src/Description.tsx b/packages/create-module-federation/templates/lib-common/src/Description.tsx new file mode 100644 index 00000000000..d096ea42e4d --- /dev/null +++ b/packages/create-module-federation/templates/lib-common/src/Description.tsx @@ -0,0 +1,7 @@ +const Description = () => { + return ( + <p className="description">Start building amazing things with Rsbuild.</p> + ); +}; + +export default Description; diff --git a/packages/create-module-federation/templates/lib-common/src/Footer.css b/packages/create-module-federation/templates/lib-common/src/Footer.css new file mode 100644 index 00000000000..f305fc60934 --- /dev/null +++ b/packages/create-module-federation/templates/lib-common/src/Footer.css @@ -0,0 +1,46 @@ +.footer { + width: 100%; + display: flex; + align-items: center; + justify-content: center; + margin-top: 3rem; +} + +.card { + padding: 1.5rem; + display: flex; + flex-direction: column; + justify-content: center; + height: 100px; + color: inherit; + text-decoration: none; + transition: 0.15s ease; + width: 45%; +} + +.card:hover, +.card:focus { + transform: scale(1.05); +} + +.card h2 { + display: flex; + align-items: center; + font-size: 1.5rem; + margin: 0; + padding: 0; +} + +.card p { + display: flex; + opacity: 0.6; + font-size: 0.9rem; + line-height: 1.5; + margin-top: 1rem; +} + +.arrow-right { + width: 1.3rem; + margin-left: 0.5rem; + margin-top: 3px; +} diff --git a/packages/create-module-federation/templates/lib-common/src/Footer.tsx b/packages/create-module-federation/templates/lib-common/src/Footer.tsx new file mode 100644 index 00000000000..00d1cbd97b1 --- /dev/null +++ b/packages/create-module-federation/templates/lib-common/src/Footer.tsx @@ -0,0 +1,74 @@ +import './Footer.css'; + +const Footer = () => { + return ( + <div className="footer"> + <a + href="https://rsbuild.dev/guide/start/index" + target="_blank" + rel="noopener noreferrer" + className="card" + > + <h2> + Guide + <img + className="arrow-right" + src="https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/arrow-right.svg" + alt="Guide" + /> + </h2> + <p>Follow the guides to use all features of Rsbuild.</p> + </a> + <a + href="https://rsbuild.dev/guide/start/quick-start" + target="_blank" + className="card" + rel="noreferrer" + > + <h2> + Tutorials + <img + className="arrow-right" + src="https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/arrow-right.svg" + alt="Tutorials" + /> + </h2> + <p>Learn to use Rsbuild to create your first application.</p> + </a> + <a + href="https://rsbuild.dev/config/index" + target="_blank" + className="card" + rel="noreferrer" + > + <h2> + Config + <img + className="arrow-right" + src="https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/arrow-right.svg" + alt="Config" + /> + </h2> + <p>Find all configuration options provided by Modern.js.</p> + </a> + <a + href="https://github.com/web-infra-dev/rsbuild" + target="_blank" + rel="noopener noreferrer" + className="card" + > + <h2> + Github + <img + className="arrow-right" + src="https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/arrow-right.svg" + alt="Github" + /> + </h2> + <p>View the source code of Github, feel free to contribute.</p> + </a> + </div> + ); +}; + +export default Footer; diff --git a/packages/create-module-federation/templates/lib-common/src/Header.tsx b/packages/create-module-federation/templates/lib-common/src/Header.tsx new file mode 100644 index 00000000000..53aff275ee8 --- /dev/null +++ b/packages/create-module-federation/templates/lib-common/src/Header.tsx @@ -0,0 +1,9 @@ +const Header = () => { + return ( + <div className="header"> + <h1>Rsbuild with React</h1> + </div> + ); +}; + +export default Header; diff --git a/packages/create-module-federation/templates/lib-common/src/index.tsx b/packages/create-module-federation/templates/lib-common/src/index.tsx new file mode 100644 index 00000000000..3fac13945ef --- /dev/null +++ b/packages/create-module-federation/templates/lib-common/src/index.tsx @@ -0,0 +1,3 @@ +export * as Description from './Description'; +export * as Footer from './Footer'; +export * as Header from './Header'; diff --git a/packages/create-module-federation/templates/lib-common/tsconfig.json b/packages/create-module-federation/templates/lib-common/tsconfig.json new file mode 100644 index 00000000000..ae6b0a38bc7 --- /dev/null +++ b/packages/create-module-federation/templates/lib-common/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "lib": ["DOM", "ES2021"], + "module": "ESNext", + "jsx": "react-jsx", + "strict": true, + "skipLibCheck": true, + "isolatedModules": true, + "resolveJsonModule": true, + "moduleResolution": "bundler", + "useDefineForClassFields": true + }, + "include": ["src"] +} diff --git a/packages/create-module-federation/templates/modern-common/.browserslistrc b/packages/create-module-federation/templates/modern-common/.browserslistrc new file mode 100644 index 00000000000..f5ceef6bb8e --- /dev/null +++ b/packages/create-module-federation/templates/modern-common/.browserslistrc @@ -0,0 +1,5 @@ +chrome >= 51 +edge >= 15 +firefox >= 54 +safari >= 10 +ios_saf >= 10 diff --git a/packages/create-module-federation/templates/modern-common/.gitignore b/packages/create-module-federation/templates/modern-common/.gitignore new file mode 100644 index 00000000000..cd3fdf89df0 --- /dev/null +++ b/packages/create-module-federation/templates/modern-common/.gitignore @@ -0,0 +1,30 @@ +.DS_Store + +.pnp +.pnp.js +.env.local +.env.*.local +.history +*.log* + +node_modules/ +.yarn-integrity +.pnpm-store/ +*.tsbuildinfo +.changeset/pre.json + +dist/ +coverage/ +release/ +output/ +output_resource/ +log/ + +.vscode/**/* +!.vscode/settings.json +!.vscode/extensions.json +.idea/ + +**/*/typings/auto-generated + +modern.config.local.* diff --git a/packages/create-module-federation/templates/modern-common/.npmrc b/packages/create-module-federation/templates/modern-common/.npmrc new file mode 100644 index 00000000000..319e41e69dc --- /dev/null +++ b/packages/create-module-federation/templates/modern-common/.npmrc @@ -0,0 +1 @@ +strict-peer-dependencies=false diff --git a/packages/create-module-federation/templates/modern-common/.nvmrc b/packages/create-module-federation/templates/modern-common/.nvmrc new file mode 100644 index 00000000000..a77793ecc52 --- /dev/null +++ b/packages/create-module-federation/templates/modern-common/.nvmrc @@ -0,0 +1 @@ +lts/hydrogen diff --git a/packages/create-module-federation/templates/modern-common/.vscode/extensions.json b/packages/create-module-federation/templates/modern-common/.vscode/extensions.json new file mode 100644 index 00000000000..de9dced4ecd --- /dev/null +++ b/packages/create-module-federation/templates/modern-common/.vscode/extensions.json @@ -0,0 +1,14 @@ +{ + "recommendations": [ + "styled-components.vscode-styled-components", + "EditorConfig.editorconfig", + "streetsidesoftware.code-spell-checker", + "codezombiech.gitignore", + "aaron-bond.better-comments", + "jasonnutter.search-node-modules", + "jock.svg", + "mikestead.dotenv", + "vscode-icons-team.vscode-icons", + "biomejs.biome" + ] +} diff --git a/packages/create-module-federation/templates/modern-common/.vscode/settings.json b/packages/create-module-federation/templates/modern-common/.vscode/settings.json new file mode 100644 index 00000000000..7326d94d7a8 --- /dev/null +++ b/packages/create-module-federation/templates/modern-common/.vscode/settings.json @@ -0,0 +1,88 @@ +{ + "files.associations": { + ".code-workspace": "jsonc", + ".stylelintrc": "jsonc", + "stylelintrc": "jsonc", + "README": "markdown" + }, + "search.useIgnoreFiles": true, + "search.exclude": { + "**/dist": true, + "**/*.log": true, + "**/*.pid": true, + "**/.git": true, + "**/node_modules": true + }, + // + "editor.rulers": [80, 120], + "files.eol": "\n", + "files.trimTrailingWhitespace": true, + "files.insertFinalNewline": true, + // + "cSpell.diagnosticLevel": "Hint", + "javascript.validate.enable": false, + "typescript.validate.enable": true, + "css.validate": false, + "scss.validate": false, + "less.validate": false, + "[css]": { + "editor.formatOnType": true, + "editor.formatOnPaste": true, + "editor.formatOnSave": true + }, + "[scss]": { + "editor.formatOnType": true, + "editor.formatOnPaste": true, + "editor.formatOnSave": true + }, + "[less]": { + "editor.formatOnType": true, + "editor.formatOnPaste": true, + "editor.formatOnSave": true + }, + "editor.codeActionsOnSave": { + "quickfix.biome": "explicit" + }, + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true, + "[typescript]": { + "editor.defaultFormatter": "biomejs.biome", + "editor.codeActionsOnSave": { + "quickfix.biome": "explicit", + "source.organizeImports": "never", + "source.organizeImports.biome": "explicit" + } + }, + "[typescriptreact]": { + "editor.defaultFormatter": "biomejs.biome", + "editor.codeActionsOnSave": { + "quickfix.biome": "explicit", + "source.organizeImports": "never", + "source.organizeImports.biome": "explicit" + } + }, + "[json]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[jsonc]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[javascriptreact]": { + "editor.defaultFormatter": "biomejs.biome", + "editor.codeActionsOnSave": { + "quickfix.biome": "explicit", + "source.organizeImports": "never", + "source.organizeImports.biome": "explicit" + } + }, + "[javascript]": { + "editor.defaultFormatter": "biomejs.biome", + "editor.codeActionsOnSave": { + "quickfix.biome": "explicit", + "source.organizeImports": "never", + "source.organizeImports.biome": "explicit" + } + }, + "emmet.triggerExpansionOnTab": true, + "typescript.tsdk": "node_modules/typescript/lib" +} diff --git a/packages/create-module-federation/templates/modern-common/README.md b/packages/create-module-federation/templates/modern-common/README.md new file mode 100644 index 00000000000..38d1d2a1c55 --- /dev/null +++ b/packages/create-module-federation/templates/modern-common/README.md @@ -0,0 +1,37 @@ +# Modern.js App + +## Setup + +Install the dependencies: + +```bash +pnpm install +``` + +## Get Started + +Start the dev server: + +```bash +pnpm dev +``` + +Enable optional features or add a new entry: + +```bash +pnpm new +``` + +Build the app for production: + +```bash +pnpm build +``` + +Preview the production build locally: + +```bash +pnpm serve +``` + +For more information, see the [Modern.js documentation](https://modernjs.dev/en). diff --git a/packages/create-module-federation/templates/modern-common/biome.json b/packages/create-module-federation/templates/modern-common/biome.json new file mode 100644 index 00000000000..58a177b1d2e --- /dev/null +++ b/packages/create-module-federation/templates/modern-common/biome.json @@ -0,0 +1,34 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.3/schema.json", + "vcs": { + "enabled": true, + "defaultBranch": "main", + "clientKind": "git", + "useIgnoreFile": true + }, + "formatter": { + "enabled": true, + "indentStyle": "space" + }, + "javascript": { + "formatter": { + "quoteStyle": "single", + "arrowParentheses": "asNeeded", + "jsxQuoteStyle": "double", + "lineWidth": 80 + } + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + }, + "organizeImports": { + "enabled": true + }, + "files": { + "ignoreUnknown": true, + "ignore": [".vscode/**/*", "node_modules/**/*", "dist/**/*"] + } +} diff --git a/packages/create-module-federation/templates/modern-common/modern.config.ts b/packages/create-module-federation/templates/modern-common/modern.config.ts new file mode 100644 index 00000000000..acaec611f69 --- /dev/null +++ b/packages/create-module-federation/templates/modern-common/modern.config.ts @@ -0,0 +1,15 @@ +import { appTools, defineConfig } from '@modern-js/app-tools'; +import { moduleFederationPlugin } from '@module-federation/modern-js'; + +// https://modernjs.dev/en/configure/app/usage +export default defineConfig({ + runtime: { + router: true, + }, + plugins: [ + appTools({ + bundler: 'rspack', // Set to 'webpack' to enable webpack + }), + moduleFederationPlugin(), + ], +}); diff --git a/packages/create-module-federation/templates/modern-common/package.json b/packages/create-module-federation/templates/modern-common/package.json new file mode 100644 index 00000000000..92467bd2e56 --- /dev/null +++ b/packages/create-module-federation/templates/modern-common/package.json @@ -0,0 +1,45 @@ +{ + "name": "new-provider", + "version": "0.1.0", + "scripts": { + "reset": "npx rimraf node_modules ./**/node_modules", + "dev": "modern dev", + "build": "modern build", + "start": "modern start", + "serve": "modern serve", + "new": "modern new", + "lint": "biome check", + "prepare": "simple-git-hooks", + "upgrade": "modern upgrade" + }, + "engines": { + "node": ">=16.18.1" + }, + "lint-staged": { + "*.{js,ts,cjs,mjs,d.cts,d.mts,jsx,tsx,json,jsonc}": [ + "biome check --files-ignore-unknown=true" + ] + }, + "simple-git-hooks": { + "pre-commit": "npx lint-staged" + }, + "dependencies": { + "@modern-js/runtime": "2.63.7", + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@modern-js/app-tools": "2.63.7", + "@modern-js/tsconfig": "2.63.7", + "@biomejs/biome": "1.8.3", + "typescript": "~5.0.4", + "@types/jest": "~29.2.4", + "@types/node": "~18.11.9", + "@types/react": "^18.3.11", + "@types/react-dom": "~18.3.1", + "lint-staged": "~13.1.0", + "simple-git-hooks": "^2.11.1", + "rimraf": "^6.0.1", + "@module-federation/modern-js": "^0.8.9" + } +} diff --git a/packages/create-module-federation/templates/modern-common/package.json.handlebars b/packages/create-module-federation/templates/modern-common/package.json.handlebars new file mode 100644 index 00000000000..85e58a25a05 --- /dev/null +++ b/packages/create-module-federation/templates/modern-common/package.json.handlebars @@ -0,0 +1,45 @@ +{ + "name": "{{ mfName }}", + "version": "0.1.0", + "scripts": { + "reset": "npx rimraf node_modules ./**/node_modules", + "dev": "modern dev", + "build": "modern build", + "start": "modern start", + "serve": "modern serve", + "new": "modern new", + "lint": "biome check", + "prepare": "simple-git-hooks", + "upgrade": "modern upgrade" + }, + "engines": { + "node": ">=16.18.1" + }, + "lint-staged": { + "*.{js,ts,cjs,mjs,d.cts,d.mts,jsx,tsx,json,jsonc}": [ + "biome check --files-ignore-unknown=true" + ] + }, + "simple-git-hooks": { + "pre-commit": "npx lint-staged" + }, + "dependencies": { + "@modern-js/runtime": "2.63.7", + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@modern-js/app-tools": "2.63.7", + "@modern-js/tsconfig": "2.63.7", + "@biomejs/biome": "1.8.3", + "typescript": "~5.0.4", + "@types/jest": "~29.2.4", + "@types/node": "~18.11.9", + "@types/react": "^18.3.11", + "@types/react-dom": "~18.3.1", + "lint-staged": "~13.1.0", + "simple-git-hooks": "^2.11.1", + "rimraf": "^6.0.1", + "@module-federation/modern-js":"^0.8.9" + } +} diff --git a/packages/create-module-federation/templates/modern-common/src/components/ComponentInspector.css b/packages/create-module-federation/templates/modern-common/src/components/ComponentInspector.css new file mode 100644 index 00000000000..da68e5015ea --- /dev/null +++ b/packages/create-module-federation/templates/modern-common/src/components/ComponentInspector.css @@ -0,0 +1,86 @@ +.component-inspector { + position: relative; + display: inline-block; +} + +.inspector-info { + position: fixed; + z-index: 1000; + background: #1a1a1a; + padding: 4px 8px; + border-radius: 4px; + font-size: 12px; + color: #fff; + pointer-events: none; + display: flex; + align-items: center; + gap: 8px; +} + +.inspector-overlay { + position: fixed; + border-radius: 4px; + pointer-events: none; + z-index: 999; + background: + linear-gradient(90deg, #3b82f6 0%, #ec4899 50%, #3b82f6 100%) 0 0, + linear-gradient(90deg, #3b82f6 0%, #ec4899 50%, #3b82f6 100%) 0 100%, + linear-gradient(0deg, #3b82f6 0%, #ec4899 50%, #3b82f6 100%) 0 0, + linear-gradient(0deg, #3b82f6 0%, #ec4899 50%, #3b82f6 100%) 100% 0; + background-repeat: repeat-x, repeat-x, repeat-y, repeat-y; + background-size: + 200% 3px, + 200% 3px, + 3px 200%, + 3px 200%; /* 将边框从 2px 加粗到 3px */ + animation: borderRotate 4s linear infinite; +} + +@keyframes borderRotate { + 0% { + background-position: + 0% 0, + 0% 100%, + 0 0%, + 100% 0%; + } + 100% { + background-position: + 200% 0, + -200% 100%, + 0 -200%, + 100% 200%; + } +} +.mf-tag { + color: #646cff; + font-weight: 500; + position: relative; + padding-left: 16px; +} + +.mf-tag::before { + content: ''; + position: absolute; + left: 0; + top: 50%; + transform: translateY(-50%); + width: 12px; + height: 12px; + background-image: url('https://module-federation.io/svg.svg'); + background-repeat: no-repeat; + background-position: center; + background-size: contain; +} + +.divider { + color: #4a4a4a; +} + +.gradient-text { + background: linear-gradient(90deg, #60a5fa, #ec4899); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + font-weight: 500; +} diff --git a/packages/create-module-federation/templates/modern-common/src/components/ComponentInspector.tsx b/packages/create-module-federation/templates/modern-common/src/components/ComponentInspector.tsx new file mode 100644 index 00000000000..50128edf471 --- /dev/null +++ b/packages/create-module-federation/templates/modern-common/src/components/ComponentInspector.tsx @@ -0,0 +1,68 @@ +import React, { useState } from 'react'; +import './ComponentInspector.css'; + +interface InspectorInfo { + top: number; + left: number; + width: number; + height: number; +} + +export const ComponentInspector: React.FC<{ + children: React.ReactNode; + componentName: string; + mfName: string; +}> = ({ children, componentName, mfName }) => { + const [inspectorInfo, setInspectorInfo] = useState<InspectorInfo | null>( + null, + ); + + const handleMouseEnter = (e: React.MouseEvent<HTMLDivElement>) => { + const rect = e.currentTarget.getBoundingClientRect(); + setInspectorInfo({ + top: rect.top, + left: rect.left, + width: rect.width, + height: rect.height, + }); + }; + + const handleMouseLeave = () => { + setInspectorInfo(null); + }; + + return ( + <div + className="component-inspector" + onMouseEnter={handleMouseEnter} + onMouseLeave={handleMouseLeave} + > + {children} + {inspectorInfo && ( + <> + <div + className="inspector-info" + style={{ + top: `${inspectorInfo.top - 30}px`, + left: `${inspectorInfo.left}px`, + width: `${inspectorInfo.width}px`, + }} + > + <span className="mf-tag">{mfName}</span> + <span className="divider">|</span> + <span className="gradient-text">{componentName}</span> + </div> + <div + className="inspector-overlay" + style={{ + top: `${inspectorInfo.top}px`, + left: `${inspectorInfo.left}px`, + width: `${inspectorInfo.width}px`, + height: `${inspectorInfo.height}px`, + }} + /> + </> + )} + </div> + ); +}; diff --git a/packages/create-module-federation/templates/modern-common/src/modern-app-env.d.ts b/packages/create-module-federation/templates/modern-common/src/modern-app-env.d.ts new file mode 100644 index 00000000000..3f453508cee --- /dev/null +++ b/packages/create-module-federation/templates/modern-common/src/modern-app-env.d.ts @@ -0,0 +1,3 @@ +/// <reference types='@modern-js/app-tools/types' /> +/// <reference types='@modern-js/runtime/types' /> +/// <reference types='@modern-js/runtime/types/router' /> diff --git a/packages/create-module-federation/templates/modern-common/src/modern.runtime.ts b/packages/create-module-federation/templates/modern-common/src/modern.runtime.ts new file mode 100644 index 00000000000..7437c8314e5 --- /dev/null +++ b/packages/create-module-federation/templates/modern-common/src/modern.runtime.ts @@ -0,0 +1,3 @@ +import { defineRuntimeConfig } from '@modern-js/runtime'; + +export default defineRuntimeConfig({}); diff --git a/packages/create-module-federation/templates/modern-common/src/routes/index.css b/packages/create-module-federation/templates/modern-common/src/routes/index.css new file mode 100644 index 00000000000..d8a5be9ffdd --- /dev/null +++ b/packages/create-module-federation/templates/modern-common/src/routes/index.css @@ -0,0 +1,41 @@ +html, +body { + padding: 0; + margin: 0; + font-family: + PingFang SC, + Hiragino Sans GB, + Microsoft YaHei, + Arial, + sans-serif; + background: linear-gradient(to bottom, transparent, #fff) #eceeef; +} + +p { + margin: 0; +} + +* { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + box-sizing: border-box; +} + +.container-box { + min-height: 100vh; + max-width: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 50px; +} + +.landing-page { + padding: 20px; + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} diff --git a/packages/create-module-federation/templates/modern-common/src/routes/layout.tsx b/packages/create-module-federation/templates/modern-common/src/routes/layout.tsx new file mode 100644 index 00000000000..6433ea79e92 --- /dev/null +++ b/packages/create-module-federation/templates/modern-common/src/routes/layout.tsx @@ -0,0 +1,9 @@ +import { Outlet } from '@modern-js/runtime/router'; + +export default function Layout() { + return ( + <div> + <Outlet /> + </div> + ); +} diff --git a/packages/create-module-federation/templates/modern-common/tsconfig.json b/packages/create-module-federation/templates/modern-common/tsconfig.json new file mode 100644 index 00000000000..ce7f951eefc --- /dev/null +++ b/packages/create-module-federation/templates/modern-common/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "@modern-js/tsconfig/base", + "compilerOptions": { + "declaration": false, + "jsx": "preserve", + "baseUrl": "./", + "paths": { + "@/*": ["./src/*"], + "@shared/*": ["./shared/*"] + } + }, + "include": ["src", "shared", "config", "modern.config.ts"], + "exclude": ["**/node_modules"] +} diff --git a/packages/create-module-federation/templates/provider-modern-ts/module-federation.config.ts.handlebars b/packages/create-module-federation/templates/provider-modern-ts/module-federation.config.ts.handlebars new file mode 100644 index 00000000000..fe617d54808 --- /dev/null +++ b/packages/create-module-federation/templates/provider-modern-ts/module-federation.config.ts.handlebars @@ -0,0 +1,14 @@ +import { createModuleFederationConfig } from '@module-federation/modern-js'; + +export default createModuleFederationConfig({ + name: '{{mfName}}', + exposes: { + './Header': './src/components/Header.tsx', + './Description': './src/components/Description.tsx', + './Footer': './src/components/Footer.tsx', + }, + shared: { + react: { singleton: true }, + 'react-dom': { singleton: true }, + }, +}); diff --git a/packages/create-module-federation/templates/provider-modern-ts/src/components/Description.css b/packages/create-module-federation/templates/provider-modern-ts/src/components/Description.css new file mode 100644 index 00000000000..ffb946c3e57 --- /dev/null +++ b/packages/create-module-federation/templates/provider-modern-ts/src/components/Description.css @@ -0,0 +1,23 @@ +.description { + text-align: center; + line-height: 1.5; + font-size: 1.3rem; + color: #1b3a42; + margin-bottom: 5rem; +} + +.code { + background: #fafafa; + border-radius: 12px; + padding: 0.6rem 0.9rem; + font-size: 1.05rem; + font-family: + Menlo, + Monaco, + Lucida Console, + Liberation Mono, + DejaVu Sans Mono, + Bitstream Vera Sans Mono, + Courier New, + monospace; +} diff --git a/packages/create-module-federation/templates/provider-modern-ts/src/components/Description.tsx b/packages/create-module-federation/templates/provider-modern-ts/src/components/Description.tsx new file mode 100644 index 00000000000..8939eb88e7b --- /dev/null +++ b/packages/create-module-federation/templates/provider-modern-ts/src/components/Description.tsx @@ -0,0 +1,11 @@ +import './Description.css'; + +const Description = () => { + return ( + <p className="description"> + Get started by editing <code className="code">src/routes/page.tsx</code> + </p> + ); +}; + +export default Description; diff --git a/packages/create-module-federation/templates/provider-modern-ts/src/components/Footer.css b/packages/create-module-federation/templates/provider-modern-ts/src/components/Footer.css new file mode 100644 index 00000000000..da7bda94fdf --- /dev/null +++ b/packages/create-module-federation/templates/provider-modern-ts/src/components/Footer.css @@ -0,0 +1,45 @@ +.footer { + display: flex; + align-items: center; + justify-content: center; + width: 1100px; + margin-top: 3rem; +} + +.card { + padding: 1.5rem; + display: flex; + flex-direction: column; + justify-content: center; + height: 100px; + color: inherit; + text-decoration: none; + transition: 0.15s ease; + width: 45%; +} + +.card:hover, +.card:focus { + transform: scale(1.05); +} + +.card h2 { + display: flex; + align-items: center; + font-size: 1.5rem; + margin: 0; + padding: 0; +} + +.card p { + opacity: 0.6; + font-size: 0.9rem; + line-height: 1.5; + margin-top: 1rem; +} + +.arrow-right { + width: 1.3rem; + margin-left: 0.5rem; + margin-top: 3px; +} diff --git a/packages/create-module-federation/templates/provider-modern-ts/src/components/Footer.tsx b/packages/create-module-federation/templates/provider-modern-ts/src/components/Footer.tsx new file mode 100644 index 00000000000..376c31c27e6 --- /dev/null +++ b/packages/create-module-federation/templates/provider-modern-ts/src/components/Footer.tsx @@ -0,0 +1,74 @@ +import './Footer.css'; + +const Footer = () => { + return ( + <div className="footer"> + <a + href="https://modernjs.dev/guides/get-started/introduction.html" + target="_blank" + rel="noopener noreferrer" + className="card" + > + <h2> + Guide + <img + className="arrow-right" + src="https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/arrow-right.svg" + alt="Guide" + /> + </h2> + <p>Follow the guides to use all features of Modern.js.</p> + </a> + <a + href="https://modernjs.dev/tutorials/foundations/introduction.html" + target="_blank" + className="card" + rel="noreferrer" + > + <h2> + Tutorials + <img + className="arrow-right" + src="https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/arrow-right.svg" + alt="Tutorials" + /> + </h2> + <p>Learn to use Modern.js to create your first application.</p> + </a> + <a + href="https://modernjs.dev/configure/app/usage.html" + target="_blank" + className="card" + rel="noreferrer" + > + <h2> + Config + <img + className="arrow-right" + src="https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/arrow-right.svg" + alt="Config" + /> + </h2> + <p>Find all configuration options provided by Modern.js.</p> + </a> + <a + href="https://github.com/web-infra-dev/modern.js" + target="_blank" + rel="noopener noreferrer" + className="card" + > + <h2> + Github + <img + className="arrow-right" + src="https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/arrow-right.svg" + alt="Github" + /> + </h2> + <p>View the source code of Github, feel free to contribute.</p> + </a> + </div> + ); +}; + +export default Footer; diff --git a/packages/create-module-federation/templates/provider-modern-ts/src/components/Header.css b/packages/create-module-federation/templates/provider-modern-ts/src/components/Header.css new file mode 100644 index 00000000000..02c9c808702 --- /dev/null +++ b/packages/create-module-federation/templates/provider-modern-ts/src/components/Header.css @@ -0,0 +1,11 @@ +.header { + display: flex; + margin: 4rem 0 4rem; + align-items: center; + font-size: 4rem; + font-weight: 600; +} + +.name { + color: #4ecaff; +} diff --git a/packages/create-module-federation/templates/provider-modern-ts/src/components/Header.tsx b/packages/create-module-federation/templates/provider-modern-ts/src/components/Header.tsx new file mode 100644 index 00000000000..89da81b8a6f --- /dev/null +++ b/packages/create-module-federation/templates/provider-modern-ts/src/components/Header.tsx @@ -0,0 +1,17 @@ +import './Header.css'; + +const Header = () => { + return ( + <div className="header"> + Welcome to + <img + className="logo" + src="https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/modern-js-logo.svg" + alt="Modern.js Logo" + /> + <p className="name">Modern.js</p> + </div> + ); +}; + +export default Header; diff --git a/packages/create-module-federation/templates/provider-modern-ts/src/routes/page.tsx b/packages/create-module-federation/templates/provider-modern-ts/src/routes/page.tsx new file mode 100644 index 00000000000..18bbf92c261 --- /dev/null +++ b/packages/create-module-federation/templates/provider-modern-ts/src/routes/page.tsx @@ -0,0 +1,34 @@ +import { Helmet } from '@modern-js/runtime/head'; +import './index.css'; +import { ComponentInspector } from '../components/ComponentInspector'; +import Header from '../components/Header'; +import Description from '../components/Description'; +import Footer from '../components/Footer'; + +const Index = () => ( + <div className="container-box"> + <Helmet> + <link + rel="icon" + type="image/x-icon" + href="https://lf3-static.bytednsdoc.com/obj/eden-cn/uhbfnupenuhf/favicon.ico" + /> + </Helmet> + + <div className="landing-page"> + <ComponentInspector componentName="Header" mfName="provider"> + <Header /> + </ComponentInspector> + + <ComponentInspector componentName="Description" mfName="provider"> + <Description /> + </ComponentInspector> + + <ComponentInspector componentName="Footer" mfName="provider"> + <Footer /> + </ComponentInspector> + </div> + </div> +); + +export default Index; diff --git a/packages/create-module-federation/templates/provider-rsbuild-ts/module-federation.config.ts.handlebars b/packages/create-module-federation/templates/provider-rsbuild-ts/module-federation.config.ts.handlebars new file mode 100644 index 00000000000..7ee76fdad18 --- /dev/null +++ b/packages/create-module-federation/templates/provider-rsbuild-ts/module-federation.config.ts.handlebars @@ -0,0 +1,14 @@ +import { createModuleFederationConfig } from '@module-federation/rsbuild-plugin'; + +export default createModuleFederationConfig({ + name: '{{mfName}}', + exposes: { + './Header': './src/components/Header.tsx', + './Description': './src/components/Description.tsx', + './Footer': './src/components/Footer.tsx', + }, + shared: { + react: { singleton: true }, + 'react-dom': { singleton: true }, + }, +}); diff --git a/packages/create-module-federation/templates/provider-rsbuild-ts/src/App.tsx b/packages/create-module-federation/templates/provider-rsbuild-ts/src/App.tsx new file mode 100644 index 00000000000..fbd2f7a18e3 --- /dev/null +++ b/packages/create-module-federation/templates/provider-rsbuild-ts/src/App.tsx @@ -0,0 +1,25 @@ +import './App.css'; +import { ComponentInspector } from './components/ComponentInspector'; +import Header from './components/Header'; +import Description from './components/Description'; +import Footer from './components/Footer'; + +const App = () => { + return ( + <div className="content"> + <ComponentInspector componentName="Header" mfName="provider"> + <Header /> + </ComponentInspector> + + <ComponentInspector componentName="Description" mfName="provider"> + <Description /> + </ComponentInspector> + + <ComponentInspector componentName="Footer" mfName="provider"> + <Footer /> + </ComponentInspector> + </div> + ); +}; + +export default App; diff --git a/packages/create-module-federation/templates/provider-rsbuild-ts/src/components/Description.tsx b/packages/create-module-federation/templates/provider-rsbuild-ts/src/components/Description.tsx new file mode 100644 index 00000000000..d096ea42e4d --- /dev/null +++ b/packages/create-module-federation/templates/provider-rsbuild-ts/src/components/Description.tsx @@ -0,0 +1,7 @@ +const Description = () => { + return ( + <p className="description">Start building amazing things with Rsbuild.</p> + ); +}; + +export default Description; diff --git a/packages/create-module-federation/templates/provider-rsbuild-ts/src/components/Footer.css b/packages/create-module-federation/templates/provider-rsbuild-ts/src/components/Footer.css new file mode 100644 index 00000000000..f305fc60934 --- /dev/null +++ b/packages/create-module-federation/templates/provider-rsbuild-ts/src/components/Footer.css @@ -0,0 +1,46 @@ +.footer { + width: 100%; + display: flex; + align-items: center; + justify-content: center; + margin-top: 3rem; +} + +.card { + padding: 1.5rem; + display: flex; + flex-direction: column; + justify-content: center; + height: 100px; + color: inherit; + text-decoration: none; + transition: 0.15s ease; + width: 45%; +} + +.card:hover, +.card:focus { + transform: scale(1.05); +} + +.card h2 { + display: flex; + align-items: center; + font-size: 1.5rem; + margin: 0; + padding: 0; +} + +.card p { + display: flex; + opacity: 0.6; + font-size: 0.9rem; + line-height: 1.5; + margin-top: 1rem; +} + +.arrow-right { + width: 1.3rem; + margin-left: 0.5rem; + margin-top: 3px; +} diff --git a/packages/create-module-federation/templates/provider-rsbuild-ts/src/components/Footer.tsx b/packages/create-module-federation/templates/provider-rsbuild-ts/src/components/Footer.tsx new file mode 100644 index 00000000000..00d1cbd97b1 --- /dev/null +++ b/packages/create-module-federation/templates/provider-rsbuild-ts/src/components/Footer.tsx @@ -0,0 +1,74 @@ +import './Footer.css'; + +const Footer = () => { + return ( + <div className="footer"> + <a + href="https://rsbuild.dev/guide/start/index" + target="_blank" + rel="noopener noreferrer" + className="card" + > + <h2> + Guide + <img + className="arrow-right" + src="https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/arrow-right.svg" + alt="Guide" + /> + </h2> + <p>Follow the guides to use all features of Rsbuild.</p> + </a> + <a + href="https://rsbuild.dev/guide/start/quick-start" + target="_blank" + className="card" + rel="noreferrer" + > + <h2> + Tutorials + <img + className="arrow-right" + src="https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/arrow-right.svg" + alt="Tutorials" + /> + </h2> + <p>Learn to use Rsbuild to create your first application.</p> + </a> + <a + href="https://rsbuild.dev/config/index" + target="_blank" + className="card" + rel="noreferrer" + > + <h2> + Config + <img + className="arrow-right" + src="https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/arrow-right.svg" + alt="Config" + /> + </h2> + <p>Find all configuration options provided by Modern.js.</p> + </a> + <a + href="https://github.com/web-infra-dev/rsbuild" + target="_blank" + rel="noopener noreferrer" + className="card" + > + <h2> + Github + <img + className="arrow-right" + src="https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/arrow-right.svg" + alt="Github" + /> + </h2> + <p>View the source code of Github, feel free to contribute.</p> + </a> + </div> + ); +}; + +export default Footer; diff --git a/packages/create-module-federation/templates/provider-rsbuild-ts/src/components/Header.tsx b/packages/create-module-federation/templates/provider-rsbuild-ts/src/components/Header.tsx new file mode 100644 index 00000000000..53aff275ee8 --- /dev/null +++ b/packages/create-module-federation/templates/provider-rsbuild-ts/src/components/Header.tsx @@ -0,0 +1,9 @@ +const Header = () => { + return ( + <div className="header"> + <h1>Rsbuild with React</h1> + </div> + ); +}; + +export default Header; diff --git a/packages/create-module-federation/templates/provider-rslib-storybook-ts/.storybook/main.ts b/packages/create-module-federation/templates/provider-rslib-storybook-ts/.storybook/main.ts new file mode 100644 index 00000000000..7fddb66944c --- /dev/null +++ b/packages/create-module-federation/templates/provider-rslib-storybook-ts/.storybook/main.ts @@ -0,0 +1,41 @@ +import { dirname, join } from 'node:path'; +import type { StorybookConfig } from 'storybook-react-rsbuild'; + +/** + * This function is used to resolve the absolute path of a package. + * It is needed in projects that use Yarn PnP or are set up within a monorepo. + */ +function getAbsolutePath(value: string): any { + return dirname(require.resolve(join(value, 'package.json'))); +} + +const config: StorybookConfig = { + stories: [ + '../stories/**/*.mdx', + '../stories/**/*.stories.@(js|jsx|mjs|ts|tsx)', + ], + framework: { + name: getAbsolutePath('storybook-react-rsbuild'), + options: {}, + }, + addons: [ + { + name: getAbsolutePath('storybook-addon-rslib'), + options: { + rslib: { + include: ['**/stories/**'], + }, + }, + }, + { + name: '@module-federation/storybook-addon/preset', + options: { + remotes: { + provider: 'provider@http://localhost:3001/mf-manifest.json', + }, + }, + }, + ], +}; + +export default config; diff --git a/packages/create-module-federation/templates/provider-rslib-storybook-ts/README.md b/packages/create-module-federation/templates/provider-rslib-storybook-ts/README.md new file mode 100644 index 00000000000..f8d0efb3119 --- /dev/null +++ b/packages/create-module-federation/templates/provider-rslib-storybook-ts/README.md @@ -0,0 +1,27 @@ +# Rslib MF Project + +This example demonstrates how to use Rslib to build a simple Module Federation React component. + +### Command + +Build package + +``` +pnpm build +``` + +Dev package + +1. + +``` +pnpm mf-dev +``` + +2. + +``` +pnpm storybook +``` + +visit http://localhost:6006 diff --git a/packages/create-module-federation/templates/provider-rslib-storybook-ts/package.json.handlebars b/packages/create-module-federation/templates/provider-rslib-storybook-ts/package.json.handlebars new file mode 100644 index 00000000000..4d5eced7abc --- /dev/null +++ b/packages/create-module-federation/templates/provider-rslib-storybook-ts/package.json.handlebars @@ -0,0 +1,34 @@ +{ + "name": "{{ mfName }}", + "version": "0.0.0", + "type": "module", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "rslib build", + "dev": "rslib build --watch", + "mf-dev": "rslib mf-dev" + }, + "devDependencies": { + "@rsbuild/core": "1.2.0-beta.0", + "@rsbuild/plugin-react": "^1.1.0", + "@rslib/core": "^0.3.1", + "@types/react": "^19.0.4", + "react": "^19.0.0", + "typescript": "^5.7.3", + "@module-federation/rsbuild-plugin":"^0.8.9" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } +} diff --git a/packages/create-module-federation/templates/provider-rslib-storybook-ts/stories/Description.stories.tsx b/packages/create-module-federation/templates/provider-rslib-storybook-ts/stories/Description.stories.tsx new file mode 100644 index 00000000000..7076f97ef50 --- /dev/null +++ b/packages/create-module-federation/templates/provider-rslib-storybook-ts/stories/Description.stories.tsx @@ -0,0 +1,11 @@ +import React from 'react'; +import Description from 'provider/Description'; + +const Component = () => <Description />; + +export default { + title: 'Description Component', + component: Component, +}; + +export const Basic = {}; diff --git a/packages/create-module-federation/templates/provider-rslib-storybook-ts/stories/Footer.stories.tsx b/packages/create-module-federation/templates/provider-rslib-storybook-ts/stories/Footer.stories.tsx new file mode 100644 index 00000000000..32b189aac8b --- /dev/null +++ b/packages/create-module-federation/templates/provider-rslib-storybook-ts/stories/Footer.stories.tsx @@ -0,0 +1,11 @@ +import React from 'react'; +import Footer from 'provider/Footer'; + +const Component = () => <Footer />; + +export default { + title: 'Footer Component', + component: Component, +}; + +export const Basic = {}; diff --git a/packages/create-module-federation/templates/provider-rslib-storybook-ts/stories/Header.stories.tsx b/packages/create-module-federation/templates/provider-rslib-storybook-ts/stories/Header.stories.tsx new file mode 100644 index 00000000000..9b2fd51aeff --- /dev/null +++ b/packages/create-module-federation/templates/provider-rslib-storybook-ts/stories/Header.stories.tsx @@ -0,0 +1,11 @@ +import React from 'react'; +import Header from 'provider/Header'; + +const Component = () => <Header />; + +export default { + title: 'Header Component', + component: Component, +}; + +export const Basic = {}; diff --git a/packages/create-module-federation/templates/provider-rslib-ts/README.md b/packages/create-module-federation/templates/provider-rslib-ts/README.md new file mode 100644 index 00000000000..cffe4ed5fd3 --- /dev/null +++ b/packages/create-module-federation/templates/provider-rslib-ts/README.md @@ -0,0 +1,19 @@ +# Rslib MF Project + +This example demonstrates how to use Rslib to build a simple Module Federation React component. + +### Command + +Build package + +``` +pnpm build +``` + +Dev package + + +``` +pnpm mf-dev +``` + diff --git a/packages/create-module-federation/templates/provider-rslib-ts/package.json.handlebars b/packages/create-module-federation/templates/provider-rslib-ts/package.json.handlebars new file mode 100644 index 00000000000..0b45bb19815 --- /dev/null +++ b/packages/create-module-federation/templates/provider-rslib-ts/package.json.handlebars @@ -0,0 +1,48 @@ +{ + "name": "{{ mfName }}", + "version": "0.0.0", + "type": "module", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "rslib build", + "build:storybook": "storybook build", + "dev": "rslib build --watch", + "storybook": "storybook dev -p 6006", + "mf-dev": "rslib mf-dev" + }, + "devDependencies": { + "@rsbuild/core": "1.2.0-beta.0", + "@rsbuild/plugin-react": "^1.1.0", + "@rslib/core": "^0.3.1", + "@storybook/addon-essentials": "^8.4.7", + "@storybook/addon-interactions": "^8.4.7", + "@storybook/addon-links": "^8.4.7", + "@storybook/addon-onboarding": "^8.4.7", + "@storybook/blocks": "^8.4.7", + "@storybook/react": "^8.4.7", + "@storybook/test": "^8.4.7", + "@types/react": "^19.0.4", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "storybook": "^8.4.7", + "storybook-addon-rslib": "^0.1.7", + "storybook-react-rsbuild": "^0.1.7", + "typescript": "^5.7.3", + "@module-federation/rsbuild-plugin":"^0.8.9", + "@module-federation/storybook-addon":"^4.0.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } +} diff --git a/packages/create-module-federation/templates/rsbuild-common/.gitignore b/packages/create-module-federation/templates/rsbuild-common/.gitignore new file mode 100644 index 00000000000..38d7344c8ca --- /dev/null +++ b/packages/create-module-federation/templates/rsbuild-common/.gitignore @@ -0,0 +1,13 @@ +# Local +.DS_Store +*.local +*.log* + +# Dist +node_modules +dist/ + +# IDE +.vscode/* +!.vscode/extensions.json +.idea diff --git a/packages/create-module-federation/templates/rsbuild-common/README.md b/packages/create-module-federation/templates/rsbuild-common/README.md new file mode 100644 index 00000000000..37b1dd3328b --- /dev/null +++ b/packages/create-module-federation/templates/rsbuild-common/README.md @@ -0,0 +1,29 @@ +# Rsbuild Project + +## Setup + +Install the dependencies: + +```bash +pnpm install +``` + +## Get Started + +Start the dev server: + +```bash +pnpm dev +``` + +Build the app for production: + +```bash +pnpm build +``` + +Preview the production build locally: + +```bash +pnpm preview +``` diff --git a/packages/create-module-federation/templates/rsbuild-common/package.json.handlebars b/packages/create-module-federation/templates/rsbuild-common/package.json.handlebars new file mode 100644 index 00000000000..5269bf06974 --- /dev/null +++ b/packages/create-module-federation/templates/rsbuild-common/package.json.handlebars @@ -0,0 +1,22 @@ +{ + "name": "{{ mfName }}", + "private": true, + "version": "1.0.0", + "scripts": { + "dev": "rsbuild dev --open", + "build": "rsbuild build", + "preview": "rsbuild preview" + }, + "dependencies": { + "react": "^19.0.0", + "react-dom": "^19.0.0" + }, + "devDependencies": { + "@rsbuild/core": "^1.1.8", + "@rsbuild/plugin-react": "^1.0.7", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "typescript": "^5.7.2", + "@module-federation/rsbuild-plugin":"^0.8.9" + } +} diff --git a/packages/create-module-federation/templates/rsbuild-common/public/.gitkeep b/packages/create-module-federation/templates/rsbuild-common/public/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/create-module-federation/templates/rsbuild-common/rsbuild.config.ts b/packages/create-module-federation/templates/rsbuild-common/rsbuild.config.ts new file mode 100644 index 00000000000..b593e818429 --- /dev/null +++ b/packages/create-module-federation/templates/rsbuild-common/rsbuild.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from '@rsbuild/core'; +import { pluginReact } from '@rsbuild/plugin-react'; +import { pluginModuleFederation } from '@module-federation/rsbuild-plugin'; +import moduleFederationConfig from './module-federation.config'; + +export default defineConfig({ + plugins: [pluginReact(), pluginModuleFederation(moduleFederationConfig)], +}); diff --git a/packages/create-module-federation/templates/rsbuild-common/src/App.css b/packages/create-module-federation/templates/rsbuild-common/src/App.css new file mode 100644 index 00000000000..93464a0bbd1 --- /dev/null +++ b/packages/create-module-federation/templates/rsbuild-common/src/App.css @@ -0,0 +1,15 @@ +body { + margin: 0; + color: #fff; + font-family: Inter, Avenir, Helvetica, Arial, sans-serif; + background-image: linear-gradient(to bottom, #020917, #101725); +} + +.content { + display: flex; + min-height: 100vh; + line-height: 1.1; + text-align: center; + flex-direction: column; + justify-content: center; +} diff --git a/packages/create-module-federation/templates/rsbuild-common/src/bootstrap.tsx b/packages/create-module-federation/templates/rsbuild-common/src/bootstrap.tsx new file mode 100644 index 00000000000..55f29bff5c9 --- /dev/null +++ b/packages/create-module-federation/templates/rsbuild-common/src/bootstrap.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App'; + +const rootEl = document.getElementById('root'); +if (rootEl) { + const root = ReactDOM.createRoot(rootEl); + root.render( + <React.StrictMode> + <App /> + </React.StrictMode>, + ); +} diff --git a/packages/create-module-federation/templates/rsbuild-common/src/components/ComponentInspector.css b/packages/create-module-federation/templates/rsbuild-common/src/components/ComponentInspector.css new file mode 100644 index 00000000000..da68e5015ea --- /dev/null +++ b/packages/create-module-federation/templates/rsbuild-common/src/components/ComponentInspector.css @@ -0,0 +1,86 @@ +.component-inspector { + position: relative; + display: inline-block; +} + +.inspector-info { + position: fixed; + z-index: 1000; + background: #1a1a1a; + padding: 4px 8px; + border-radius: 4px; + font-size: 12px; + color: #fff; + pointer-events: none; + display: flex; + align-items: center; + gap: 8px; +} + +.inspector-overlay { + position: fixed; + border-radius: 4px; + pointer-events: none; + z-index: 999; + background: + linear-gradient(90deg, #3b82f6 0%, #ec4899 50%, #3b82f6 100%) 0 0, + linear-gradient(90deg, #3b82f6 0%, #ec4899 50%, #3b82f6 100%) 0 100%, + linear-gradient(0deg, #3b82f6 0%, #ec4899 50%, #3b82f6 100%) 0 0, + linear-gradient(0deg, #3b82f6 0%, #ec4899 50%, #3b82f6 100%) 100% 0; + background-repeat: repeat-x, repeat-x, repeat-y, repeat-y; + background-size: + 200% 3px, + 200% 3px, + 3px 200%, + 3px 200%; /* 将边框从 2px 加粗到 3px */ + animation: borderRotate 4s linear infinite; +} + +@keyframes borderRotate { + 0% { + background-position: + 0% 0, + 0% 100%, + 0 0%, + 100% 0%; + } + 100% { + background-position: + 200% 0, + -200% 100%, + 0 -200%, + 100% 200%; + } +} +.mf-tag { + color: #646cff; + font-weight: 500; + position: relative; + padding-left: 16px; +} + +.mf-tag::before { + content: ''; + position: absolute; + left: 0; + top: 50%; + transform: translateY(-50%); + width: 12px; + height: 12px; + background-image: url('https://module-federation.io/svg.svg'); + background-repeat: no-repeat; + background-position: center; + background-size: contain; +} + +.divider { + color: #4a4a4a; +} + +.gradient-text { + background: linear-gradient(90deg, #60a5fa, #ec4899); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + font-weight: 500; +} diff --git a/packages/create-module-federation/templates/rsbuild-common/src/components/ComponentInspector.tsx b/packages/create-module-federation/templates/rsbuild-common/src/components/ComponentInspector.tsx new file mode 100644 index 00000000000..50128edf471 --- /dev/null +++ b/packages/create-module-federation/templates/rsbuild-common/src/components/ComponentInspector.tsx @@ -0,0 +1,68 @@ +import React, { useState } from 'react'; +import './ComponentInspector.css'; + +interface InspectorInfo { + top: number; + left: number; + width: number; + height: number; +} + +export const ComponentInspector: React.FC<{ + children: React.ReactNode; + componentName: string; + mfName: string; +}> = ({ children, componentName, mfName }) => { + const [inspectorInfo, setInspectorInfo] = useState<InspectorInfo | null>( + null, + ); + + const handleMouseEnter = (e: React.MouseEvent<HTMLDivElement>) => { + const rect = e.currentTarget.getBoundingClientRect(); + setInspectorInfo({ + top: rect.top, + left: rect.left, + width: rect.width, + height: rect.height, + }); + }; + + const handleMouseLeave = () => { + setInspectorInfo(null); + }; + + return ( + <div + className="component-inspector" + onMouseEnter={handleMouseEnter} + onMouseLeave={handleMouseLeave} + > + {children} + {inspectorInfo && ( + <> + <div + className="inspector-info" + style={{ + top: `${inspectorInfo.top - 30}px`, + left: `${inspectorInfo.left}px`, + width: `${inspectorInfo.width}px`, + }} + > + <span className="mf-tag">{mfName}</span> + <span className="divider">|</span> + <span className="gradient-text">{componentName}</span> + </div> + <div + className="inspector-overlay" + style={{ + top: `${inspectorInfo.top}px`, + left: `${inspectorInfo.left}px`, + width: `${inspectorInfo.width}px`, + height: `${inspectorInfo.height}px`, + }} + /> + </> + )} + </div> + ); +}; diff --git a/packages/create-module-federation/templates/rsbuild-common/src/env.d.ts b/packages/create-module-federation/templates/rsbuild-common/src/env.d.ts new file mode 100644 index 00000000000..b0ac762b091 --- /dev/null +++ b/packages/create-module-federation/templates/rsbuild-common/src/env.d.ts @@ -0,0 +1 @@ +/// <reference types="@rsbuild/core/types" /> diff --git a/packages/create-module-federation/templates/rsbuild-common/src/index.tsx b/packages/create-module-federation/templates/rsbuild-common/src/index.tsx new file mode 100644 index 00000000000..b93c7a0268a --- /dev/null +++ b/packages/create-module-federation/templates/rsbuild-common/src/index.tsx @@ -0,0 +1 @@ +import('./bootstrap'); diff --git a/packages/create-module-federation/templates/rsbuild-common/tsconfig.json b/packages/create-module-federation/templates/rsbuild-common/tsconfig.json new file mode 100644 index 00000000000..9221337cd8f --- /dev/null +++ b/packages/create-module-federation/templates/rsbuild-common/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "lib": ["DOM", "ES2020"], + "jsx": "react-jsx", + "target": "ES2020", + "noEmit": true, + "skipLibCheck": true, + "useDefineForClassFields": true, + + /* modules */ + "module": "ESNext", + "isolatedModules": true, + "resolveJsonModule": true, + "moduleResolution": "Bundler", + "allowImportingTsExtensions": true, + + /* type checking */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "paths": { + "*": ["./@mf-types/*"] + } + }, + "include": ["src"] +} diff --git a/packages/create-module-federation/tsconfig.json b/packages/create-module-federation/tsconfig.json new file mode 100644 index 00000000000..2cd74a5bff2 --- /dev/null +++ b/packages/create-module-federation/tsconfig.json @@ -0,0 +1,30 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "lib": ["DOM", "ESNext"], + "target": "ES2020", + "module": "Node16", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noFallthroughCasesInSwitch": true, + "moduleResolution": "node16", + "resolveJsonModule": true, + "esModuleInterop": true, + "skipLibCheck": true, + "skipDefaultLibCheck": true, + "declaration": true, + "noImplicitReturns": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/packages/create-module-federation/tsconfig.lib.json b/packages/create-module-federation/tsconfig.lib.json new file mode 100644 index 00000000000..33eca2c2cdf --- /dev/null +++ b/packages/create-module-federation/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/packages/create-module-federation/tsconfig.spec.json b/packages/create-module-federation/tsconfig.spec.json new file mode 100644 index 00000000000..9b2a121d114 --- /dev/null +++ b/packages/create-module-federation/tsconfig.spec.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": [ + "jest.config.ts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/packages/data-prefetch/tsconfig.json b/packages/data-prefetch/tsconfig.json index fcf1b213e09..c047eec85c8 100644 --- a/packages/data-prefetch/tsconfig.json +++ b/packages/data-prefetch/tsconfig.json @@ -9,7 +9,6 @@ "skipLibCheck": true, "moduleResolution": "node", "allowJs": false, - "strict": true, "types": ["jest", "node"], "experimentalDecorators": true, "resolveJsonModule": true, diff --git a/packages/rsbuild-plugin/src/cli/index.ts b/packages/rsbuild-plugin/src/cli/index.ts index 04d6454a5ae..5c92dd39834 100644 --- a/packages/rsbuild-plugin/src/cli/index.ts +++ b/packages/rsbuild-plugin/src/cli/index.ts @@ -12,7 +12,7 @@ import type { moduleFederationPlugin, sharePlugin, } from '@module-federation/sdk'; -import type { RsbuildPlugin, Rspack } from '@rsbuild/core'; +import type { RsbuildConfig, RsbuildPlugin, Rspack } from '@rsbuild/core'; import logger from '../logger'; type ModuleFederationOptions = @@ -32,6 +32,17 @@ export { const LIB_FORMAT = ['commonjs', 'umd', 'modern-module']; +function isStoryBook(rsbuildConfig: RsbuildConfig) { + if ( + rsbuildConfig.plugins?.find( + (p) => + p && 'name' in p && p.name === 'module-federation-storybook-plugin', + ) + ) { + return true; + } +} + export function isMFFormat(bundlerConfig: Rspack.Configuration) { const library = bundlerConfig.output?.library; @@ -78,6 +89,8 @@ export const pluginModuleFederation = ( bundlerConfigs.forEach((bundlerConfig) => { if (!isMFFormat(bundlerConfig)) { return; + } else if (isStoryBook(api.getRsbuildConfig())) { + bundlerConfig.output!.uniqueName = `${moduleFederationOptions.name}-storybook-host`; } else { // mf autoDeleteSplitChunkCacheGroups( @@ -156,6 +169,10 @@ export const pluginModuleFederation = ( // dev config only works on format: 'mf' api.modifyRsbuildConfig((config) => { + // skip storybook + if (isStoryBook(config)) { + return; + } // Change some default configs for remote modules if (moduleFederationOptions.exposes) { config.dev ||= {}; @@ -192,3 +209,5 @@ export const pluginModuleFederation = ( }); }, }); + +export { createModuleFederationConfig } from '@module-federation/enhanced'; diff --git a/packages/runtime-plugins/inject-external-runtime-core-plugin/tsconfig.json b/packages/runtime-plugins/inject-external-runtime-core-plugin/tsconfig.json index bb69d249599..c45d1f4d3b0 100644 --- a/packages/runtime-plugins/inject-external-runtime-core-plugin/tsconfig.json +++ b/packages/runtime-plugins/inject-external-runtime-core-plugin/tsconfig.json @@ -3,7 +3,6 @@ "compilerOptions": { "module": "commonjs", "forceConsistentCasingInFileNames": true, - "strict": true, "noImplicitOverride": true, "noPropertyAccessFromIndexSignature": true, "noImplicitReturns": true, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index faa01cc23b7..dcca158a4fb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2040,6 +2040,46 @@ importers: specifier: ^5.40.0 version: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + packages/create-module-federation: + dependencies: + '@clack/prompts': + specifier: ^0.8.2 + version: 0.8.2 + execa: + specifier: 5.1.1 + version: 5.1.1 + fs-extra: + specifier: 9.1.0 + version: 9.1.0 + glob: + specifier: 7.2.0 + version: 7.2.0 + handlebars: + specifier: 4.7.7 + version: 4.7.7 + minimist: + specifier: ^1.2.8 + version: 1.2.8 + rslog: + specifier: ^1.2.3 + version: 1.2.3 + devDependencies: + '@rslib/core': + specifier: ^0.3.1 + version: 0.3.2(typescript@5.5.2) + '@types/fs-extra': + specifier: 9.0.6 + version: 9.0.6 + '@types/glob': + specifier: 7.2.0 + version: 7.2.0 + '@types/minimist': + specifier: ^1.2.5 + version: 1.2.5 + rsbuild-plugin-publint: + specifier: ^0.2.1 + version: 0.2.1(@rsbuild/core@1.2.0-beta.1) + packages/data-prefetch: dependencies: '@module-federation/runtime': @@ -2969,10 +3009,10 @@ packages: '@babel/helpers': 7.26.0 '@babel/parser': 7.26.2 '@babel/template': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 convert-source-map: 1.9.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) gensync: 1.0.0-beta.2 json5: 2.2.3 lodash: 4.17.21 @@ -2998,7 +3038,7 @@ packages: '@babel/traverse': 7.25.7 '@babel/types': 7.25.7 convert-source-map: 2.0.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -3017,10 +3057,10 @@ packages: '@babel/helpers': 7.26.0 '@babel/parser': 7.26.2 '@babel/template': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 convert-source-map: 2.0.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -3040,10 +3080,10 @@ packages: '@babel/helpers': 7.26.0 '@babel/parser': 7.26.2 '@babel/template': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 convert-source-map: 2.0.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -3063,10 +3103,10 @@ packages: '@babel/helpers': 7.26.0 '@babel/parser': 7.26.2 '@babel/template': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 convert-source-map: 2.0.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -3154,7 +3194,7 @@ packages: resolution: {integrity: sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -3191,7 +3231,7 @@ packages: '@babel/helper-optimise-call-expression': 7.25.7 '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.2) '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -3209,7 +3249,7 @@ packages: '@babel/helper-optimise-call-expression': 7.25.7 '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.7) '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -3227,7 +3267,7 @@ packages: '@babel/helper-optimise-call-expression': 7.25.7 '@babel/helper-replace-supers': 7.25.7(@babel/core@7.26.0) '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -3244,7 +3284,7 @@ packages: '@babel/helper-optimise-call-expression': 7.25.9 '@babel/helper-replace-supers': 7.25.9(@babel/core@7.25.7) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -3262,7 +3302,7 @@ packages: '@babel/helper-optimise-call-expression': 7.25.9 '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -3321,7 +3361,7 @@ packages: '@babel/core': 7.25.7 '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -3336,7 +3376,7 @@ packages: '@babel/core': 7.26.0 '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -3346,7 +3386,7 @@ packages: resolution: {integrity: sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -3355,7 +3395,7 @@ packages: resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -3364,7 +3404,16 @@ packages: resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + + /@babel/helper-module-imports@7.25.9: + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -3388,7 +3437,7 @@ packages: '@babel/helper-module-imports': 7.25.7 '@babel/helper-simple-access': 7.24.7 '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color @@ -3399,9 +3448,9 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -3413,9 +3462,9 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.25.7 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -3427,9 +3476,9 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.25.8 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -3441,9 +3490,9 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color @@ -3476,7 +3525,7 @@ packages: '@babel/core': 7.25.7 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -3490,7 +3539,7 @@ packages: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color @@ -3503,7 +3552,7 @@ packages: '@babel/core': 7.25.2 '@babel/helper-member-expression-to-functions': 7.25.7 '@babel/helper-optimise-call-expression': 7.25.7 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -3517,7 +3566,7 @@ packages: '@babel/core': 7.25.7 '@babel/helper-member-expression-to-functions': 7.25.7 '@babel/helper-optimise-call-expression': 7.25.7 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -3531,7 +3580,7 @@ packages: '@babel/core': 7.26.0 '@babel/helper-member-expression-to-functions': 7.25.7 '@babel/helper-optimise-call-expression': 7.25.7 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color @@ -3544,7 +3593,7 @@ packages: '@babel/core': 7.25.7 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -3558,7 +3607,7 @@ packages: '@babel/core': 7.26.0 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color @@ -3566,7 +3615,7 @@ packages: resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -3575,7 +3624,7 @@ packages: resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -3585,7 +3634,7 @@ packages: resolution: {integrity: sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -3594,7 +3643,7 @@ packages: resolution: {integrity: sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -3603,7 +3652,7 @@ packages: resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -3641,7 +3690,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -3708,7 +3757,7 @@ packages: dependencies: '@babel/core': 7.25.7 '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -3721,7 +3770,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color @@ -3798,7 +3847,7 @@ packages: dependencies: '@babel/core': 7.25.7 '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -3811,7 +3860,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color @@ -4547,7 +4596,7 @@ packages: '@babel/core': 7.25.7 '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.25.7) - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -4561,7 +4610,7 @@ packages: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color @@ -4572,7 +4621,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.7 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.25.7) transitivePeerDependencies: @@ -4586,7 +4635,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: @@ -4704,7 +4753,7 @@ packages: '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-replace-supers': 7.25.9(@babel/core@7.25.7) - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -4721,7 +4770,7 @@ packages: '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -4946,7 +4995,7 @@ packages: '@babel/core': 7.25.7 '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -4960,7 +5009,7 @@ packages: '@babel/core': 7.26.0 '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color @@ -5116,7 +5165,7 @@ packages: '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.7) '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -5131,7 +5180,7 @@ packages: '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color @@ -5623,7 +5672,7 @@ packages: dependencies: '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.25.2) '@babel/types': 7.26.0 @@ -5639,7 +5688,7 @@ packages: dependencies: '@babel/core': 7.25.7 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.25.7) '@babel/types': 7.26.0 @@ -5655,7 +5704,7 @@ packages: dependencies: '@babel/core': 7.25.8 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.25.8) '@babel/types': 7.26.0 @@ -5671,7 +5720,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) '@babel/types': 7.26.0 @@ -5789,7 +5838,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.7 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.7) babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.7) @@ -5806,7 +5855,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.26.0) babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) @@ -6400,7 +6449,21 @@ packages: '@babel/parser': 7.26.2 '@babel/template': 7.25.9 '@babel/types': 7.26.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + /@babel/traverse@7.25.9: + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 + debug: 4.3.7(supports-color@9.3.1) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -6704,6 +6767,21 @@ packages: - react dev: true + /@clack/core@0.3.5: + resolution: {integrity: sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==} + dependencies: + picocolors: 1.1.1 + sisteransi: 1.0.5 + dev: false + + /@clack/prompts@0.8.2: + resolution: {integrity: sha512-6b9Ab2UiZwJYA9iMyboYyW9yJvAO9V753ZhS+DHKEjZRKAxPPOb7MXXu84lsPFG+vZt6FRFniZ8rXi+zCIw4yQ==} + dependencies: + '@clack/core': 0.3.5 + picocolors: 1.1.1 + sisteransi: 1.0.5 + dev: false + /@colors/colors@1.5.0: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -7043,7 +7121,7 @@ packages: /@emotion/babel-plugin@11.12.0: resolution: {integrity: sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==} dependencies: - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/runtime': 7.26.0 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 @@ -8589,7 +8667,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 @@ -8665,7 +8743,7 @@ packages: deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -9017,7 +9095,7 @@ packages: chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 - glob: 7.2.3 + glob: 7.2.0 graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.2 istanbul-lib-instrument: 6.0.3 @@ -11229,6 +11307,10 @@ packages: resolution: {integrity: sha512-c38UWAIeK7n7MihCD4fnvD7/Bdh6G2jCwyF+bzold8BYFmId/ck2+tvRoX7qX6qeftWJr61PBfJceffozujG0w==} dev: true + /@module-federation/error-codes@0.8.4: + resolution: {integrity: sha512-55LYmrDdKb4jt+qr8qE8U3al62ZANp3FhfVaNPOaAmdTh0jHdD8M3yf5HKFlr5xVkVO4eV/F/J2NCfpbh+pEXQ==} + dev: true + /@module-federation/managers@0.6.11: resolution: {integrity: sha512-HVw9eFTHCegRlWSmNbHXAnY19XHSj19RHHpjZ1Oo71DaHgjJAPJlg4izifcdWt0w+ObAQLOH1DacjYKMIT4W6Q==} dependencies: @@ -11512,6 +11594,13 @@ packages: '@module-federation/webpack-bundler-runtime': 0.7.7 dev: true + /@module-federation/runtime-tools@0.8.4: + resolution: {integrity: sha512-fjVOsItJ1u5YY6E9FnS56UDwZgqEQUrWFnouRiPtK123LUuqUI9FH4redZoKWlE1PB0ir1Z3tnqy8eFYzPO38Q==} + dependencies: + '@module-federation/runtime': 0.8.4 + '@module-federation/webpack-bundler-runtime': 0.8.4 + dev: true + /@module-federation/runtime@0.0.8: resolution: {integrity: sha512-Hi9g10aHxHdQ7CbchSvke07YegYwkf162XPOmixNmJr5Oy4wVa2d9yIVSrsWFhBRbbvM5iJP6GrSuEq6HFO3ug==} dependencies: @@ -11554,6 +11643,13 @@ packages: '@module-federation/sdk': 0.7.7 dev: true + /@module-federation/runtime@0.8.4: + resolution: {integrity: sha512-yZeZ7z2Rx4gv/0E97oLTF3V6N25vglmwXGgoeju/W2YjsFvWzVtCDI7zRRb0mJhU6+jmSM8jP1DeQGbea/AiZQ==} + dependencies: + '@module-federation/error-codes': 0.8.4 + '@module-federation/sdk': 0.8.4 + dev: true + /@module-federation/sdk@0.0.8: resolution: {integrity: sha512-lkasywBItjUTNT0T0IskonDE2E/2tXE9UhUCPVoDL3NteDUSFGg4tpkF+cey1pD8mHh0XJcGrCuOW7s96peeAg==} dev: true @@ -11584,6 +11680,12 @@ packages: isomorphic-rslog: 0.0.6 dev: true + /@module-federation/sdk@0.8.4: + resolution: {integrity: sha512-waABomIjg/5m1rPDBWYG4KUhS5r7OUUY7S+avpaVIY/tkPWB3ibRDKy2dNLLAMaLKq0u+B1qIdEp4NIWkqhqpg==} + dependencies: + isomorphic-rslog: 0.0.6 + dev: true + /@module-federation/third-party-dts-extractor@0.6.11: resolution: {integrity: sha512-KEHF71/qmEhME1XK/0XpMHKaSRjwmINpul9iu5Z4UBNtoMIydq6SH41DsWF3HxAManhqe+ZwCxyoSn2Yxm5d0Q==} dependencies: @@ -11684,6 +11786,13 @@ packages: '@module-federation/sdk': 0.7.7 dev: true + /@module-federation/webpack-bundler-runtime@0.8.4: + resolution: {integrity: sha512-HggROJhvHPUX7uqBD/XlajGygMNM1DG0+4OAkk8MBQe4a18QzrRNzZt6XQbRTSG4OaEoyRWhQHvYD3Yps405tQ==} + dependencies: + '@module-federation/runtime': 0.8.4 + '@module-federation/sdk': 0.8.4 + dev: true + /@mole-inc/bin-wrapper@8.0.1: resolution: {integrity: sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -11713,7 +11822,7 @@ packages: '@open-draft/until': 1.0.3 '@types/debug': 4.1.12 '@xmldom/xmldom': 0.8.10 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) headers-polyfill: 3.2.5 outvariant: 1.4.3 strict-event-emitter: 0.2.8 @@ -14762,7 +14871,7 @@ packages: optional: true dependencies: '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@rollup/pluginutils': 5.1.3(rollup@4.24.0) rollup: 4.24.0 transitivePeerDependencies: @@ -14778,7 +14887,7 @@ packages: '@rollup/pluginutils': 3.1.0(rollup@2.79.2) commondir: 1.0.1 estree-walker: 2.0.2 - glob: 7.2.3 + glob: 7.2.0 is-reference: 1.2.1 magic-string: 0.25.9 resolve: 1.22.8 @@ -14799,7 +14908,7 @@ packages: estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 - magic-string: 0.30.12 + magic-string: 0.30.17 rollup: 4.24.0 dev: true @@ -15321,6 +15430,17 @@ packages: core-js: 3.39.0 dev: true + /@rsbuild/core@1.2.0-beta.1: + resolution: {integrity: sha512-+TzwALD2xEpgc2FQgjn1CtNtE2CTS1FELuWXpjI4AABjytYDGdaOHvHyCLXHiJpuvDdnyJumoN/T8i8zhbTkPg==} + engines: {node: '>=16.7.0'} + hasBin: true + dependencies: + '@rspack/core': 1.2.0-beta.0(@swc/helpers@0.5.15) + '@rspack/lite-tapable': 1.0.1 + '@swc/helpers': 0.5.15 + core-js: 3.40.0 + dev: true + /@rsbuild/plugin-assets-retry@1.0.2(@rsbuild/core@1.0.19): resolution: {integrity: sha512-vlQwCFibONxquQmQwDDv/crivmXAct8nsUtSovlgoMHE4UUQKFZbJ7jr54FVXvDlyL/Wp9yvOj4WhAEabBEVlA==} peerDependencies: @@ -15899,6 +16019,25 @@ packages: typescript: 5.5.2 dev: true + /@rslib/core@0.3.2(typescript@5.5.2): + resolution: {integrity: sha512-BdR/1kjR+Jk614je0ijjEwGoY44fLtPg6PoWHoKfzMkqNMtFg40AwMaBS04SylvR4BuUt1Q+9k6NQ/IWdE5HWg==} + engines: {node: '>=16.0.0'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7 + typescript: ^5 + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + typescript: + optional: true + dependencies: + '@rsbuild/core': 1.2.0-beta.1 + rsbuild-plugin-dts: 0.3.2(@rsbuild/core@1.2.0-beta.1)(typescript@5.5.2) + tinyglobby: 0.2.10 + typescript: 5.5.2 + dev: true + /@rspack/binding-darwin-arm64@0.5.0: resolution: {integrity: sha512-zRx4efhn2eCjdhHt6avhdkKur6FZvYy1TgPhNKpWbTg7fnrvtNGzcVQCAOnPUUPkJjnss3veOhZlWJ3paX0EDQ==} cpu: [arm64] @@ -15953,6 +16092,14 @@ packages: dev: true optional: true + /@rspack/binding-darwin-arm64@1.2.0-beta.0: + resolution: {integrity: sha512-g8NgY4OIjZf5LabAKOHNr2rs/WzVaxXpOSVsdHztQL6ETdeEpIPUul4p/5zivFNcrvJxVVeHzKJHyB5lqxDcTA==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@rspack/binding-darwin-x64@0.5.0: resolution: {integrity: sha512-d6SvBURfKow3WcKxTrjJPBkp+NLsuCPoIMaS8/bM4gHwgjVs2zuOsTQ9+l36dypOkjnu6QLkOIykTdiUKJ0eQg==} cpu: [x64] @@ -16007,6 +16154,14 @@ packages: dev: true optional: true + /@rspack/binding-darwin-x64@1.2.0-beta.0: + resolution: {integrity: sha512-+BH/1UpG96exJc6KhDOiSHAb05bUwxbYCd37HAJwcLxQgB7IEmPtBYvV5CtHysteM5NBtbNeeAcyXK+dIYvUew==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@rspack/binding-linux-arm64-gnu@0.5.0: resolution: {integrity: sha512-97xFbF7RjJc2VvX+0Hvb7Jzsk+eEE8oEUcc5Dnb7OIwGZulWKk6cLNcRkNfmL/F9kk1QEKlUTNC/VQI7ljf2tA==} cpu: [arm64] @@ -16061,6 +16216,14 @@ packages: dev: true optional: true + /@rspack/binding-linux-arm64-gnu@1.2.0-beta.0: + resolution: {integrity: sha512-LdIBNy5WAXJ1J9nB3bEyvqz7mJrMN/7cCtPHMmFBR1aTFbh1NAjYZl24fc+f59aSV5jAU9wfTrOtqtSwnXg4tQ==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@rspack/binding-linux-arm64-musl@0.5.0: resolution: {integrity: sha512-lk0IomCy276EoynmksoBwg0IcHvvVXuZPMeq7OgRPTvs33mdTExSzSTPtrGzx/D00bX1ybUqLQwJhcgGt6erPQ==} cpu: [arm64] @@ -16115,6 +16278,14 @@ packages: dev: true optional: true + /@rspack/binding-linux-arm64-musl@1.2.0-beta.0: + resolution: {integrity: sha512-4tRi87UyEWV25X6Ul68kJJ/de/cwmASmrIUrCYmdWEdtWMN46UOz0OvxCYvcHTf0DCP8M1CZf0cSiRuG/hsxGA==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@rspack/binding-linux-x64-gnu@0.5.0: resolution: {integrity: sha512-r15ddpse0S/8wHtfL85uJrVotvPVIMnQX06KlXyGUSw1jWrjxV+NXFDJ4xXnHCvk/YV6lCFTotAssk4wJEE0Fw==} cpu: [x64] @@ -16169,6 +16340,14 @@ packages: dev: true optional: true + /@rspack/binding-linux-x64-gnu@1.2.0-beta.0: + resolution: {integrity: sha512-rWWrPwUH3V4yG46acZDIlqr7H/yCxbu+WdPhdIRBvgT7bisQkZa2HYx6MXmUXxx94U2iFy5bh+un0ho5FZOeCg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@rspack/binding-linux-x64-musl@0.5.0: resolution: {integrity: sha512-lB9Dn1bi4xyzEe6Bf/GQ7Ktlrq4Kmt1LHwN+t0m6iVYH3Vb/3g8uQGDSkwnjP8NmlAtldK1cmvRMhR7flUrgZA==} cpu: [x64] @@ -16223,6 +16402,14 @@ packages: dev: true optional: true + /@rspack/binding-linux-x64-musl@1.2.0-beta.0: + resolution: {integrity: sha512-9pgL17Bk8aSrTBx6VfQbb313RInDjlY9DfgV5ybbSsWaFs/oAs4oPy+kepWWixfb9Y2q/74bSBPrBNTBYQpknw==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@rspack/binding-win32-arm64-msvc@0.5.0: resolution: {integrity: sha512-aDoF13puU8LxST/qKZndtXzlJbnbnxY2Bxyj0fu7UDh8nHJD4A2HQfWRN6BZFHaVSqM6Bnli410dJrIWeTNhZQ==} cpu: [arm64] @@ -16277,6 +16464,14 @@ packages: dev: true optional: true + /@rspack/binding-win32-arm64-msvc@1.2.0-beta.0: + resolution: {integrity: sha512-JQ06Q3uTclIk4AvKUqx0Royx2PqVcUuumEUFVWERbd01fntkQqI3RFrPazBYAIvk5JmXk40+CKA1CsFef4RKOA==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@rspack/binding-win32-ia32-msvc@0.5.0: resolution: {integrity: sha512-EYGeH4YKX5v4gtTL8mBAWnsKSkF+clsKu0z1hgWgSV/vnntNlqJQZUCb5CMdg5VqadNm+lUNDYYHeHNa3+Jp3w==} cpu: [ia32] @@ -16331,6 +16526,14 @@ packages: dev: true optional: true + /@rspack/binding-win32-ia32-msvc@1.2.0-beta.0: + resolution: {integrity: sha512-rNz/sXjXLAqCZkDuTumqm9Aa47Hiu45+vkJ0XvbirJ0A+dzuyGjdtlinwLyZtCY+dVAlS+AcX5znJLlpTSnjjA==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@rspack/binding-win32-x64-msvc@0.5.0: resolution: {integrity: sha512-RCECFW6otUrFiPbWQyOvLZOMNV/OL6AyAKMDbX9ejjk0TjLMrHjnhmI5X8EoA/SUc1/vEbgsJzDVLKTfn138cg==} cpu: [x64] @@ -16385,6 +16588,14 @@ packages: dev: true optional: true + /@rspack/binding-win32-x64-msvc@1.2.0-beta.0: + resolution: {integrity: sha512-LKFcgaeEo7G6YLE5aKIbeWzXUpVZc02u0q4as0TjTTRBHd8r21GeaGJVh1Xm9YBkHpIX8Ho1DMftYVd+F6gHzw==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@rspack/binding@0.5.0: resolution: {integrity: sha512-+v1elZMn6lKBqbXQzhcfeCaPzztFNGEkNDEcQ7weako6yQPsBihGCRzveMMzZkja4RyB9GRHjWRE+THm8V8+3w==} optionalDependencies: @@ -16481,6 +16692,20 @@ packages: '@rspack/binding-win32-x64-msvc': 1.1.8 dev: true + /@rspack/binding@1.2.0-beta.0: + resolution: {integrity: sha512-ZUBWVKCVC3uunZhjH7FAVLP83r/6QvPmYViA6n0JF3ycBmcJLkHJb26v42j6d5EfYfTtNvfRUlzHckIkFDQeDQ==} + optionalDependencies: + '@rspack/binding-darwin-arm64': 1.2.0-beta.0 + '@rspack/binding-darwin-x64': 1.2.0-beta.0 + '@rspack/binding-linux-arm64-gnu': 1.2.0-beta.0 + '@rspack/binding-linux-arm64-musl': 1.2.0-beta.0 + '@rspack/binding-linux-x64-gnu': 1.2.0-beta.0 + '@rspack/binding-linux-x64-musl': 1.2.0-beta.0 + '@rspack/binding-win32-arm64-msvc': 1.2.0-beta.0 + '@rspack/binding-win32-ia32-msvc': 1.2.0-beta.0 + '@rspack/binding-win32-x64-msvc': 1.2.0-beta.0 + dev: true + /@rspack/core@0.5.0(@swc/helpers@0.5.3): resolution: {integrity: sha512-/Bpujdtx28qYir7AK9VVSbY35GBFEcZ1NTJZBx/WIzZGZWLCxhlVYfjH8cj44y4RvXa0Y26tnj/q7VJ4U3sHug==} engines: {node: '>=16.0.0'} @@ -16628,6 +16853,22 @@ packages: caniuse-lite: 1.0.30001668 dev: true + /@rspack/core@1.2.0-beta.0(@swc/helpers@0.5.15): + resolution: {integrity: sha512-0o0EYNeCwbRrh1l+P6HEKGS3Y+SVE/+J6SqDGGBsOixt/YzFeYNeaePWUnFfQ8a27jp9s//Ix6iuxMYGjWmitA==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@swc/helpers': '>=0.5.1' + peerDependenciesMeta: + '@swc/helpers': + optional: true + dependencies: + '@module-federation/runtime-tools': 0.8.4 + '@rspack/binding': 1.2.0-beta.0 + '@rspack/lite-tapable': 1.0.1 + '@swc/helpers': 0.5.15 + caniuse-lite: 1.0.30001668 + dev: true + /@rspack/dev-server@1.0.9(@rspack/core@1.0.8)(@types/express@4.17.21)(webpack@5.93.0): resolution: {integrity: sha512-VF+apLFfl5LWIhVbfkJ5ccU0Atl5mi+sGTkx+XtE1tbUmMJkde0nm/4+eaQCud7oGl+ZCzt4kW14uuzLSiEGDw==} peerDependencies: @@ -17062,7 +17303,7 @@ packages: conventional-changelog-writer: 8.0.0 conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.0.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) import-from-esm: 1.3.4 lodash-es: 4.17.21 micromatch: 4.0.8 @@ -17089,7 +17330,7 @@ packages: dependencies: '@semantic-release/error': 3.0.0 aggregate-error: 3.1.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) execa: 5.1.1 lodash: 4.17.21 parse-json: 5.2.0 @@ -17106,7 +17347,7 @@ packages: dependencies: '@semantic-release/error': 3.0.0 aggregate-error: 3.1.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) dir-glob: 3.0.1 execa: 5.1.1 lodash: 4.17.21 @@ -17129,7 +17370,7 @@ packages: '@octokit/plugin-throttling': 9.3.1(@octokit/core@6.1.2) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) dir-glob: 3.0.1 globby: 14.0.2 http-proxy-agent: 7.0.2 @@ -17198,7 +17439,7 @@ packages: conventional-changelog-writer: 8.0.0 conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.0.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) get-stream: 7.0.1 import-from-esm: 1.3.4 into-stream: 7.0.0 @@ -17675,7 +17916,7 @@ packages: fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.5.2)(webpack@5.93.0) fs-extra: 11.2.0 html-webpack-plugin: 5.6.2(@rspack/core@1.0.8)(webpack@5.93.0) - magic-string: 0.30.12 + magic-string: 0.30.17 path-browserify: 1.0.1 process: 0.11.10 semver: 7.6.3 @@ -17869,7 +18110,7 @@ packages: find-up: 5.0.0 fs-extra: 11.2.0 glob: 10.4.5 - handlebars: 4.7.8 + handlebars: 4.7.7 lazy-universal-dotenv: 4.0.0 node-fetch: 2.7.0(encoding@0.1.13) picomatch: 2.3.1 @@ -17906,7 +18147,7 @@ packages: find-up: 5.0.0 fs-extra: 11.2.0 glob: 10.4.5 - handlebars: 4.7.8 + handlebars: 4.7.7 lazy-universal-dotenv: 4.0.0 node-fetch: 2.7.0(encoding@0.1.13) picomatch: 2.3.1 @@ -18137,7 +18378,7 @@ packages: dependencies: '@babel/generator': 7.26.2 '@babel/parser': 7.26.2 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 '@storybook/csf': 0.1.11 '@storybook/types': 7.6.20 @@ -18153,7 +18394,7 @@ packages: dependencies: '@babel/generator': 7.26.2 '@babel/parser': 7.26.2 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 '@storybook/csf': 0.1.11 '@storybook/types': 8.1.11 @@ -18368,7 +18609,7 @@ packages: '@types/semver': 7.5.8 find-up: 5.0.0 fs-extra: 11.2.0 - magic-string: 0.30.12 + magic-string: 0.30.17 react: 18.3.1 react-docgen: 7.1.0 react-dom: 18.3.1(react@18.3.1) @@ -18432,7 +18673,7 @@ packages: typescript: '>= 3.x' webpack: '>= 4' dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 @@ -18451,7 +18692,7 @@ packages: typescript: '>= 4.x' webpack: '>= 4' dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 @@ -18470,7 +18711,7 @@ packages: typescript: '>= 4.x' webpack: '>= 4' dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 @@ -18948,7 +19189,7 @@ packages: '@swc-node/sourcemap-support': 0.5.1 '@swc/core': 1.7.26(@swc/helpers@0.5.13) colorette: 2.0.20 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) oxc-resolver: 1.12.0 pirates: 4.0.6 tslib: 2.6.3 @@ -19917,6 +20158,10 @@ packages: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true + /@types/minimist@1.2.5: + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + dev: true + /@types/ms@0.7.34: resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} @@ -20191,7 +20436,7 @@ packages: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.0.4) '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.0.4) - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 @@ -20243,7 +20488,7 @@ packages: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.0.4) - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) eslint: 8.57.1 typescript: 5.0.4 transitivePeerDependencies: @@ -20264,7 +20509,7 @@ packages: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.2) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) eslint: 8.57.1 typescript: 5.5.2 transitivePeerDependencies: @@ -20285,7 +20530,7 @@ packages: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.2) '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) eslint: 8.57.1 typescript: 5.5.2 transitivePeerDependencies: @@ -20344,7 +20589,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.0.4) '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.0.4) - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) eslint: 8.57.1 tsutils: 3.21.0(typescript@5.0.4) typescript: 5.0.4 @@ -20364,7 +20609,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.2) '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.5.2) - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) eslint: 8.57.1 ts-api-utils: 1.3.0(typescript@5.5.2) typescript: 5.5.2 @@ -20383,7 +20628,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.5.2) '@typescript-eslint/utils': 8.8.0(eslint@8.57.1)(typescript@5.5.2) - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) ts-api-utils: 1.3.0(typescript@5.5.2) typescript: 5.5.2 transitivePeerDependencies: @@ -20427,7 +20672,7 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 @@ -20448,7 +20693,7 @@ packages: dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 @@ -20470,7 +20715,7 @@ packages: dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 @@ -20492,7 +20737,7 @@ packages: dependencies: '@typescript-eslint/types': 8.14.0 '@typescript-eslint/visitor-keys': 8.14.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 @@ -20514,7 +20759,7 @@ packages: dependencies: '@typescript-eslint/types': 8.8.0 '@typescript-eslint/visitor-keys': 8.8.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 @@ -20648,7 +20893,7 @@ packages: async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 - glob: 7.2.3 + glob: 7.2.0 graceful-fs: 4.2.11 micromatch: 4.0.8 node-gyp-build: 4.8.2 @@ -20864,7 +21109,7 @@ packages: peerDependencies: vitest: 1.6.0 dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) istanbul-lib-coverage: 3.2.2 istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.1 @@ -20885,7 +21130,7 @@ packages: dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 @@ -20954,7 +21199,7 @@ packages: /@vitest/snapshot@1.2.2: resolution: {integrity: sha512-SmGY4saEw1+bwE1th6S/cZmPxz/Q4JWsl7LvbQIky2tKE35US4gd0Mjzqfr84/4OD0tikGWaWdMja/nWL5NIPA==} dependencies: - magic-string: 0.30.12 + magic-string: 0.30.17 pathe: 1.1.2 pretty-format: 29.7.0 dev: true @@ -20962,7 +21207,7 @@ packages: /@vitest/snapshot@1.6.0: resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==} dependencies: - magic-string: 0.30.12 + magic-string: 0.30.17 pathe: 1.1.2 pretty-format: 29.7.0 dev: true @@ -21079,11 +21324,11 @@ packages: optional: true dependencies: '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.2) '@babel/template': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 '@vue/babel-helper-vue-transform-on': 1.2.5 '@vue/babel-plugin-resolve-type': 1.2.5(@babel/core@7.25.2) @@ -21100,7 +21345,7 @@ packages: dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 '@babel/parser': 7.26.2 '@vue/compiler-sfc': 3.5.10 @@ -21647,7 +21892,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) transitivePeerDependencies: - supports-color @@ -21655,7 +21900,7 @@ packages: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) transitivePeerDependencies: - supports-color dev: true @@ -22537,7 +22782,7 @@ packages: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color @@ -22556,7 +22801,7 @@ packages: /babel-plugin-import@1.13.5: resolution: {integrity: sha512-IkqnoV+ov1hdJVofly9pXRJmeDm9EtROfrc5i6eII0Hix2xMs5FEm8FG3ExMvazbnZBbgHIt6qdO8And6lCloQ==} dependencies: - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -22564,7 +22809,7 @@ packages: /babel-plugin-import@1.13.8: resolution: {integrity: sha512-36babpjra5m3gca44V6tSTomeBlPA7cHUynrE2WiQIm3rEGD9xy28MKsx5IdO45EbnpJY7Jrgd00C6Dwt/l/2Q==} dependencies: - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -22683,7 +22928,7 @@ packages: styled-components: '>= 2' dependencies: '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 babel-plugin-syntax-jsx: 6.18.0 lodash: 4.17.21 styled-components: 6.1.13(react-dom@18.3.1)(react@18.3.1) @@ -24077,7 +24322,7 @@ packages: dependencies: '@types/semver': 7.5.8 conventional-commits-filter: 5.0.0 - handlebars: 4.7.8 + handlebars: 4.7.7 meow: 13.2.0 semver: 7.6.3 dev: true @@ -24182,7 +24427,7 @@ packages: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) /copy-webpack-plugin@11.0.0(webpack@5.93.0): resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} @@ -24251,6 +24496,11 @@ packages: requiresBuild: true dev: true + /core-js@3.40.0: + resolution: {integrity: sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==} + requiresBuild: true + dev: true + /core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -24527,7 +24777,7 @@ packages: postcss-modules-values: 4.0.0(postcss@8.4.47) postcss-value-parser: 4.2.0 semver: 7.6.3 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) /css-loader@6.11.0(@rspack/core@1.1.1)(webpack@5.93.0): resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==} @@ -25290,7 +25540,6 @@ packages: dependencies: ms: 2.1.3 supports-color: 9.3.1 - dev: true /decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} @@ -25537,7 +25786,7 @@ packages: hasBin: true dependencies: address: 1.2.2 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) transitivePeerDependencies: - supports-color @@ -26222,7 +26471,7 @@ packages: peerDependencies: esbuild: '>=0.12 <1' dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) esbuild: 0.17.19 transitivePeerDependencies: - supports-color @@ -26233,7 +26482,7 @@ packages: peerDependencies: esbuild: '>=0.12 <1' dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) esbuild: 0.18.20 transitivePeerDependencies: - supports-color @@ -26244,7 +26493,7 @@ packages: peerDependencies: esbuild: '>=0.12 <1' dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) esbuild: 0.23.1 transitivePeerDependencies: - supports-color @@ -26633,7 +26882,7 @@ packages: optional: true dependencies: '@nolyfill/is-core-module': 1.0.39 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) enhanced-resolve: 5.17.1 eslint: 8.57.1 eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) @@ -27063,7 +27312,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -27140,7 +27389,7 @@ packages: resolution: {integrity: sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==} engines: {node: '>=8.3.0'} dependencies: - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 c8: 7.14.0 transitivePeerDependencies: @@ -27645,17 +27894,6 @@ packages: picomatch: 2.3.1 dev: false - /fdir@6.4.0(picomatch@4.0.2): - resolution: {integrity: sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - dependencies: - picomatch: 4.0.2 - dev: false - /fdir@6.4.2(picomatch@4.0.2): resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} peerDependencies: @@ -27665,7 +27903,6 @@ packages: optional: true dependencies: picomatch: 4.0.2 - dev: true /fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} @@ -27995,7 +28232,7 @@ packages: debug: optional: true dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -28663,6 +28900,17 @@ packages: path-is-absolute: 1.0.1 dev: true + /glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Glob versions prior to v9 are no longer supported + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -28673,6 +28921,7 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 + dev: true /glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} @@ -28759,7 +29008,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - glob: 7.2.3 + glob: 7.2.0 ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 @@ -28882,6 +29131,18 @@ packages: /handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + /handlebars@4.7.7: + resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} + engines: {node: '>=0.4.7'} + hasBin: true + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 + /handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} @@ -29569,7 +29830,7 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) transitivePeerDependencies: - supports-color dev: true @@ -29579,7 +29840,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.1 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) transitivePeerDependencies: - supports-color dev: true @@ -29607,7 +29868,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@types/http-proxy': 1.17.15 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) http-proxy: 1.18.1(debug@4.3.7) is-glob: 4.0.3 is-plain-object: 5.0.0 @@ -29687,7 +29948,7 @@ packages: engines: {node: '>= 6.0.0'} dependencies: agent-base: 5.1.1 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) transitivePeerDependencies: - supports-color dev: true @@ -29697,7 +29958,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) transitivePeerDependencies: - supports-color @@ -29706,7 +29967,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.1 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) transitivePeerDependencies: - supports-color dev: true @@ -29853,7 +30114,7 @@ packages: resolution: {integrity: sha512-7EyUlPFC0HOlBDpUFGfYstsU7XHxZJKAAMzCT8wZ0hMW7b+hG51LIKTDcsgtz8Pu6YC0HqRVbX+rVUtsGMUKvg==} engines: {node: '>=16.20'} dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) import-meta-resolve: 4.1.0 transitivePeerDependencies: - supports-color @@ -30687,7 +30948,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -30699,7 +30960,7 @@ packages: engines: {node: '>=10'} dependencies: '@jridgewell/trace-mapping': 0.3.25 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -30876,7 +31137,7 @@ packages: chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 - glob: 7.2.3 + glob: 7.2.0 graceful-fs: 4.2.11 jest-circus: 29.7.0 jest-environment-node: 29.7.0 @@ -30916,7 +31177,7 @@ packages: chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 - glob: 7.2.3 + glob: 7.2.0 graceful-fs: 4.2.11 jest-circus: 29.7.0 jest-environment-node: 29.7.0 @@ -30956,7 +31217,7 @@ packages: chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 - glob: 7.2.3 + glob: 7.2.0 graceful-fs: 4.2.11 jest-circus: 29.7.0 jest-environment-node: 29.7.0 @@ -31198,7 +31459,7 @@ packages: chalk: 4.1.2 cjs-module-lexer: 1.4.1 collect-v8-coverage: 1.0.2 - glob: 7.2.3 + glob: 7.2.0 graceful-fs: 4.2.11 jest-haste-map: 29.7.0 jest-message-util: 29.7.0 @@ -31741,7 +32002,7 @@ packages: content-disposition: 0.5.4 content-type: 1.0.5 cookies: 0.9.1 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) delegates: 1.0.0 depd: 2.0.0 destroy: 1.2.0 @@ -31895,7 +32156,7 @@ packages: webpack-sources: optional: true dependencies: - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) webpack-sources: 3.2.3 /lilconfig@2.1.0: @@ -32198,7 +32459,7 @@ packages: engines: {node: '>=8.0'} dependencies: date-format: 4.0.14 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) flatted: 3.3.1 rfdc: 1.4.1 streamroller: 3.1.5 @@ -33059,7 +33320,7 @@ packages: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: '@types/debug': 4.1.12 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -33875,7 +34136,7 @@ packages: engines: {node: '>=10'} hasBin: true dependencies: - glob: 7.2.3 + glob: 7.2.0 ignore-walk: 3.0.4 npm-bundled: 1.1.2 npm-normalize-package-bin: 1.0.1 @@ -36656,7 +36917,7 @@ packages: engines: {node: '>=8.16.0'} dependencies: '@types/mime-types': 2.1.4 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) extract-zip: 1.7.0 https-proxy-agent: 4.0.0 mime: 2.6.0 @@ -37827,7 +38088,7 @@ packages: engines: {node: '>=16.14.0'} dependencies: '@babel/core': 7.26.0 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 @@ -38837,7 +39098,7 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: - glob: 7.2.3 + glob: 7.2.0 dev: true /rimraf@2.7.1: @@ -38845,7 +39106,7 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: - glob: 7.2.3 + glob: 7.2.0 dev: true /rimraf@3.0.2: @@ -38853,7 +39114,7 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: - glob: 7.2.3 + glob: 7.2.0 /rimraf@5.0.10: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} @@ -39025,6 +39286,26 @@ packages: typescript: 5.5.2 dev: true + /rsbuild-plugin-dts@0.3.2(@rsbuild/core@1.2.0-beta.1)(typescript@5.5.2): + resolution: {integrity: sha512-Gjaf5ANA6R9t92Va6utNG1iyRxCE0QLoswKvR5UkOkX5GUpNyWveze+k/6L/qrkgqGRuJqUuYX3lrwatrOUZ3A==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@microsoft/api-extractor': ^7 + '@rsbuild/core': 1.x + typescript: ^5 + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + typescript: + optional: true + dependencies: + '@rsbuild/core': 1.2.0-beta.1 + magic-string: 0.30.17 + picocolors: 1.1.1 + tinyglobby: 0.2.10 + typescript: 5.5.2 + dev: true + /rsbuild-plugin-html-minifier-terser@1.1.1(@rsbuild/core@1.1.12): resolution: {integrity: sha512-rbDLv+XmGeSQo9JWKSwBst3Qwx1opLqtQCnQ3t9Z0F0ZTxKOC1S/ypPv5tSn/S3GMHct5Yb76mMgh6p80hjOAQ==} peerDependencies: @@ -39038,6 +39319,19 @@ packages: html-minifier-terser: 7.2.0 dev: true + /rsbuild-plugin-publint@0.2.1(@rsbuild/core@1.2.0-beta.1): + resolution: {integrity: sha512-iD/qeXWHmx2KKRT3cZ0lWa6Nz+K3NWFkVBfq+NQC3LAtHZCMftBbUzbjbJsjDiH195PVPdPmy+5qbxLf6HYqKg==} + peerDependencies: + '@rsbuild/core': 1.x + peerDependenciesMeta: + '@rsbuild/core': + optional: true + dependencies: + '@rsbuild/core': 1.2.0-beta.1 + picocolors: 1.1.1 + publint: 0.2.12 + dev: true + /rslog@1.2.3: resolution: {integrity: sha512-antALPJaKBRPBU1X2q9t085K4htWDOOv/K1qhTUk7h0l1ePU/KbDqKJn19eKP0dk7PqMioeA0+fu3gyPXCsXxQ==} engines: {node: '>=14.17.6'} @@ -39609,7 +39903,7 @@ packages: klona: 2.0.6 neo-async: 2.6.2 sass: 1.79.4 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) /sass-loader@13.3.3(webpack@5.93.0): resolution: {integrity: sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==} @@ -39732,7 +40026,7 @@ packages: '@semantic-release/release-notes-generator': 14.0.1(semantic-release@24.1.2) aggregate-error: 5.0.0 cosmiconfig: 9.0.0(typescript@5.5.2) - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) env-ci: 11.1.0 execa: 9.4.0 figures: 6.1.0 @@ -39843,7 +40137,7 @@ packages: resolution: {integrity: sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==} engines: {node: '>= 18'} dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) destroy: 1.2.0 encodeurl: 2.0.0 escape-html: 1.0.3 @@ -40088,7 +40382,6 @@ packages: /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: true /skin-tone@2.0.0: resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} @@ -40327,7 +40620,7 @@ packages: /spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -40340,7 +40633,7 @@ packages: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -40610,7 +40903,7 @@ packages: engines: {node: '>=8.0'} dependencies: date-format: 4.0.14 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) fs-extra: 8.1.0 transitivePeerDependencies: - supports-color @@ -40862,7 +41155,7 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) /style-to-object@0.3.0: resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} @@ -41034,7 +41327,7 @@ packages: hasBin: true dependencies: '@adobe/css-tools': 4.3.3 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) glob: 10.4.5 sax: 1.4.1 source-map: 0.7.4 @@ -41101,7 +41394,6 @@ packages: /supports-color@9.3.1: resolution: {integrity: sha512-knBY82pjmnIzK3NifMo3RxEIRD9E0kIzV4BKcyTZ9+9kWgLMxd4PrsTSMoFQUabgRBbF8KOLRDCyKgNV+iK44Q==} engines: {node: '>=12'} - dev: true /supports-hyperlinks@2.3.0: resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} @@ -41542,7 +41834,7 @@ packages: engines: {node: '>=8'} dependencies: '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 + glob: 7.2.0 minimatch: 3.1.2 dev: true @@ -41641,7 +41933,7 @@ packages: resolution: {integrity: sha512-8or1+BGEdk1Zkkw2ii16qSS7uVrQJPre5A9o/XkWPATkk23FZh/15BKFxPnlTy6vkljZxLqYCzzBMj30ZrSvjw==} engines: {node: '>=12.0.0'} dependencies: - fdir: 6.4.0(picomatch@4.0.2) + fdir: 6.4.2(picomatch@4.0.2) picomatch: 4.0.2 dev: false @@ -42187,7 +42479,7 @@ packages: bundle-require: 4.2.1(esbuild@0.18.20) cac: 6.7.14 chokidar: 3.6.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) esbuild: 0.18.20 execa: 5.1.1 globby: 11.1.0 @@ -42229,7 +42521,7 @@ packages: cac: 6.7.14 chokidar: 3.6.0 consola: 3.2.3 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) esbuild: 0.23.0 execa: 5.1.1 joycon: 3.1.1 @@ -43031,7 +43323,7 @@ packages: compression: 1.7.4 cookies: 0.9.1 cors: 2.8.5 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) envinfo: 7.11.0 express: 4.18.2 express-rate-limit: 5.5.1 @@ -43146,7 +43438,7 @@ packages: hasBin: true dependencies: cac: 6.7.14 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) pathe: 1.1.2 picocolors: 1.1.1 vite: 5.2.14(@types/node@20.12.14)(less@4.2.0)(stylus@0.64.0) @@ -43167,7 +43459,7 @@ packages: hasBin: true dependencies: cac: 6.7.14 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) pathe: 1.1.2 picocolors: 1.1.1 vite: 5.2.14(@types/node@18.16.9)(less@4.2.0)(stylus@0.64.0) @@ -43197,7 +43489,7 @@ packages: '@volar/typescript': 2.4.5 '@vue/language-core': 2.1.6(typescript@5.5.2) compare-versions: 6.1.1 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) kolorist: 1.8.0 local-pkg: 0.5.0 magic-string: 0.30.12 @@ -43224,7 +43516,7 @@ packages: '@volar/typescript': 2.4.5 '@vue/language-core': 2.1.6(typescript@5.5.2) compare-versions: 6.1.1 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) kolorist: 1.8.0 local-pkg: 0.5.0 magic-string: 0.30.12 @@ -43244,7 +43536,7 @@ packages: vite: optional: true dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) globrex: 0.1.2 tsconfck: 2.1.2(typescript@5.5.2) vite: 5.2.14(@types/node@18.16.9)(less@4.2.0)(stylus@0.64.0) @@ -43414,7 +43706,7 @@ packages: acorn-walk: 8.3.4 cac: 6.7.14 chai: 4.5.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) execa: 8.0.1 local-pkg: 0.5.0 magic-string: 0.30.11 @@ -43471,7 +43763,7 @@ packages: '@vitest/utils': 1.6.0 acorn-walk: 8.3.4 chai: 4.5.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) execa: 8.0.1 local-pkg: 0.5.0 magic-string: 0.30.11 @@ -43520,7 +43812,7 @@ packages: peerDependencies: eslint: '>=6.0.0' dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@9.3.1) eslint: 8.57.1 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 @@ -43724,7 +44016,7 @@ packages: on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) /webpack-dev-server@5.0.4(webpack@5.93.0): resolution: {integrity: sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==} @@ -43877,7 +44169,7 @@ packages: dependencies: html-webpack-plugin: 5.6.2(@rspack/core@1.0.8)(webpack@5.93.0) typed-assert: 1.0.9 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) /webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3)(webpack@5.95.0): resolution: {integrity: sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==} From a533fff602ee2895cb60b2c988ab55f789212d11 Mon Sep 17 00:00:00 2001 From: 2heal1 <TwoHeal@163.com> Date: Tue, 21 Jan 2025 17:15:16 +0800 Subject: [PATCH 2/2] chore: modify tempplate --- .../create-module-federation/package.json | 7 +- .../create-module-federation/project.json | 19 ++-- .../create-module-federation/src/create.ts | 76 ++++++---------- .../src/handlebars/index.ts | 4 +- .../create-module-federation/src/index.ts | 1 + .../module-federation.config.ts.handlebars | 2 +- .../consumer-modern-ts/src/routes/page.tsx | 15 +--- .../module-federation.config.ts.handlebars | 12 +++ .../templates/consumer-rsbuild-ts/src/App.tsx | 15 +--- .../src/components/ComponentInspector.css | 86 ------------------- .../src/components/ComponentInspector.tsx | 68 --------------- .../templates/modern-common/tsconfig.json | 3 +- .../provider-modern-ts/src/routes/page.tsx | 15 +--- .../templates/provider-rsbuild-ts/src/App.tsx | 15 +--- .../provider-rslib-storybook-ts/.gitignore | 16 ++++ .../package.json.handlebars | 21 ++++- .../.gitignore | 0 .../provider-rslib-ts/package.json.handlebars | 18 +--- .../src/components/ComponentInspector.css | 86 ------------------- .../src/components/ComponentInspector.tsx | 68 --------------- .../create-module-federation/tsconfig.json | 4 +- 21 files changed, 107 insertions(+), 444 deletions(-) create mode 100644 packages/create-module-federation/templates/consumer-rsbuild-ts/module-federation.config.ts.handlebars delete mode 100644 packages/create-module-federation/templates/modern-common/src/components/ComponentInspector.css delete mode 100644 packages/create-module-federation/templates/modern-common/src/components/ComponentInspector.tsx create mode 100644 packages/create-module-federation/templates/provider-rslib-storybook-ts/.gitignore rename packages/create-module-federation/templates/{lib-common => provider-rslib-ts}/.gitignore (100%) delete mode 100644 packages/create-module-federation/templates/rsbuild-common/src/components/ComponentInspector.css delete mode 100644 packages/create-module-federation/templates/rsbuild-common/src/components/ComponentInspector.tsx diff --git a/packages/create-module-federation/package.json b/packages/create-module-federation/package.json index 298cf225f7d..067d7bf00f9 100644 --- a/packages/create-module-federation/package.json +++ b/packages/create-module-federation/package.json @@ -3,7 +3,7 @@ "description": "Create a new Module Federation project", "public": true, "sideEffects": false, - "version": "0.0.0", + "version": "0.0.0-1737428758075", "license": "MIT", "repository": { "type": "git", @@ -18,11 +18,14 @@ "build": "rslib build" }, "main": "./dist/index.js", + "engines": { + "node": ">=16.7.0" + }, "bin": { "create-module-federation": "./dist/index.js" }, "files": [ - "template", + "templates", "dist" ], "dependencies": { diff --git a/packages/create-module-federation/project.json b/packages/create-module-federation/project.json index 98bc4c8d17a..97a9be02ad8 100644 --- a/packages/create-module-federation/project.json +++ b/packages/create-module-federation/project.json @@ -32,17 +32,16 @@ } }, "test": { - "executor": "@nx/jest:jest", - "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "executor": "nx:run-commands", "options": { - "jestConfig": "packages/create-module-federation/jest.config.js", - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "codeCoverage": true - } + "parallel": false, + "dependsOn": [ + { + "target": "build", + "dependencies": true + } + ], + "commands": ["echo 'no test'"] } }, "pre-release": { diff --git a/packages/create-module-federation/src/create.ts b/packages/create-module-federation/src/create.ts index 2b798ccba0d..fe9826af585 100644 --- a/packages/create-module-federation/src/create.ts +++ b/packages/create-module-federation/src/create.ts @@ -4,6 +4,7 @@ */ import path from 'path'; import fs from 'fs'; +import { fileURLToPath } from 'url'; import { cancel, isCancel, @@ -18,6 +19,10 @@ import { logger } from 'rslog'; import { FsMaterial } from './materials/FsMaterial'; import { HandlebarsAPI } from './handlebars'; +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const packageDir = path.resolve(__dirname, '..'); + type Argv = { help?: boolean; dir?: string; @@ -93,9 +98,11 @@ function checkCancel<T>(value: unknown) { * 5. Input: '/root/path/to/foo' * Output: folder -> `'/root/path/to/foo'` folder, `package.json#name` -> `foo` */ -function formatDir(input: string) { +function formatProjectName(input: string) { + const formatted = input.trim().replace(/\/+$/g, ''); return { - targetDir: input.trim().replace(/\/+$/g, ''), + packageName: input, + targetDir: formatted, }; } @@ -118,37 +125,6 @@ async function getAppTemplateName( return `${template}-ts`; } - let providerInfo: ProviderInfo = { - name: '', - entry: '', - }; - - if (roleType === 'consumer') { - const providerName = checkCancel<string>( - await text({ - message: - 'Please input your provider name (You can skip by press "enter"):', - defaultValue: '', - }), - ); - - if (providerName) { - providerInfo.name = providerName; - - const providerEntry = checkCancel<string>( - await text({ - message: `Please input your provider("${providerName}") entry:`, - validate(value) { - if (value.length === 0) { - return 'Entry is required'; - } - }, - }), - ); - providerInfo.entry = providerEntry; - } - } - return `${roleType}-${framework}-ts`; } @@ -187,7 +163,7 @@ async function getLibTemplateName({ template }: Argv) { return `${roleType}-${templateName}-ts`; } - return `${roleType}-${templateName}-[${Object.keys(tools)}]-ts`; + return `${roleType}-${templateName}-${tools[0]}-ts`; } function getTemplateName( @@ -263,7 +239,7 @@ async function forgeTemplate({ }, argv, ); - const material = new FsMaterial(__dirname); + const material = new FsMaterial(packageDir); const renderTemplate = async (templateDir: string) => { const templatePattern = `${templateDir}**/*`; @@ -331,24 +307,20 @@ export async function create({ const pkgInfo = pkgFromUserAgent(process.env['npm_config_user_agent']); const pkgManager = pkgInfo ? pkgInfo.name : 'npm'; - const mfName = - argv.dir ?? - checkCancel<string>( - await text({ - message: 'Please input Module Federation name:', - placeholder: 'mf-project-name', - defaultValue: 'mf-project-name', - validate(value) { - if (value.length === 0) { - return 'Name is required'; - } - }, - }), - ); - - const dir = argv.dir || 'mf-project'; + const mfName = checkCancel<string>( + await text({ + message: 'Please input Module Federation name:', + placeholder: 'mf_project_name', + defaultValue: 'mf_project_name', + validate(value) { + if (value.length === 0) { + return 'Name is required'; + } + }, + }), + ); - const { targetDir } = formatDir(dir); + const { targetDir } = formatProjectName(path.join(argv.dir || '', mfName)); const distFolder = path.isAbsolute(targetDir) ? targetDir : path.join(cwd, targetDir); diff --git a/packages/create-module-federation/src/handlebars/index.ts b/packages/create-module-federation/src/handlebars/index.ts index 871d0f4892a..09e55cb41f0 100644 --- a/packages/create-module-federation/src/handlebars/index.ts +++ b/packages/create-module-federation/src/handlebars/index.ts @@ -34,7 +34,9 @@ export class HandlebarsAPI { } await outputFs( target, - renderString(resourceValue.content, parameters), + templateResource.resourceKey.endsWith('.handlebars') + ? renderString(resourceValue.content, parameters) + : resourceValue.content, outputFilePath, { encoding: 'utf-8' }, ); diff --git a/packages/create-module-federation/src/index.ts b/packages/create-module-federation/src/index.ts index 165aa271a85..e934916c4b3 100644 --- a/packages/create-module-federation/src/index.ts +++ b/packages/create-module-federation/src/index.ts @@ -1,3 +1,4 @@ +#!/usr/bin/env node import { create } from './create'; interface Template { diff --git a/packages/create-module-federation/templates/consumer-modern-ts/module-federation.config.ts.handlebars b/packages/create-module-federation/templates/consumer-modern-ts/module-federation.config.ts.handlebars index 776aa71a4dd..28dbf654e4d 100644 --- a/packages/create-module-federation/templates/consumer-modern-ts/module-federation.config.ts.handlebars +++ b/packages/create-module-federation/templates/consumer-modern-ts/module-federation.config.ts.handlebars @@ -3,7 +3,7 @@ import { createModuleFederationConfig } from '@module-federation/modern-js'; export default createModuleFederationConfig({ name: '{{mfName}}', remotes: { - 'provider': 'provider@http://localhost:8080/mf-manifest.json', + 'provider': 'rslib_provider@https://unpkg.com/module-federation-rslib-provider@latest/dist/mf/mf-manifest.json', }, shared: { react: { singleton: true }, diff --git a/packages/create-module-federation/templates/consumer-modern-ts/src/routes/page.tsx b/packages/create-module-federation/templates/consumer-modern-ts/src/routes/page.tsx index b1970527406..68d8a4ff3a9 100644 --- a/packages/create-module-federation/templates/consumer-modern-ts/src/routes/page.tsx +++ b/packages/create-module-federation/templates/consumer-modern-ts/src/routes/page.tsx @@ -1,6 +1,5 @@ import { Helmet } from '@modern-js/runtime/head'; import './index.css'; -import { ComponentInspector } from '../components/ComponentInspector'; import Header from 'provider/Header'; import Description from 'provider/Description'; import Footer from 'provider/Footer'; @@ -16,17 +15,9 @@ const Index = () => ( </Helmet> <div className="landing-page"> - <ComponentInspector componentName="Header" mfName="provider"> - <Header /> - </ComponentInspector> - - <ComponentInspector componentName="Description" mfName="provider"> - <Description /> - </ComponentInspector> - - <ComponentInspector componentName="Footer" mfName="provider"> - <Footer /> - </ComponentInspector> + <Header /> + <Description /> + <Footer /> </div> </div> ); diff --git a/packages/create-module-federation/templates/consumer-rsbuild-ts/module-federation.config.ts.handlebars b/packages/create-module-federation/templates/consumer-rsbuild-ts/module-federation.config.ts.handlebars new file mode 100644 index 00000000000..51de1d0375f --- /dev/null +++ b/packages/create-module-federation/templates/consumer-rsbuild-ts/module-federation.config.ts.handlebars @@ -0,0 +1,12 @@ +import { createModuleFederationConfig } from '@module-federation/rsbuild-plugin'; + +export default createModuleFederationConfig({ + name: '{{mfName}}', + remotes: { + 'provider': 'rslib_provider@https://unpkg.com/module-federation-rslib-provider@latest/dist/mf/mf-manifest.json', + }, + shared: { + react: { singleton: true }, + 'react-dom': { singleton: true }, + }, +}); diff --git a/packages/create-module-federation/templates/consumer-rsbuild-ts/src/App.tsx b/packages/create-module-federation/templates/consumer-rsbuild-ts/src/App.tsx index 7932bce7d14..29fc3a59751 100644 --- a/packages/create-module-federation/templates/consumer-rsbuild-ts/src/App.tsx +++ b/packages/create-module-federation/templates/consumer-rsbuild-ts/src/App.tsx @@ -1,5 +1,4 @@ import './App.css'; -import { ComponentInspector } from './components/ComponentInspector'; import Header from 'provider/Header'; import Description from 'provider/Description'; import Footer from 'provider/Footer'; @@ -7,17 +6,9 @@ import Footer from 'provider/Footer'; const App = () => { return ( <div className="content"> - <ComponentInspector componentName="Header" mfName="provider"> - <Header /> - </ComponentInspector> - - <ComponentInspector componentName="Description" mfName="provider"> - <Description /> - </ComponentInspector> - - <ComponentInspector componentName="Footer" mfName="provider"> - <Footer /> - </ComponentInspector> + <Header /> + <Description /> + <Footer /> </div> ); }; diff --git a/packages/create-module-federation/templates/modern-common/src/components/ComponentInspector.css b/packages/create-module-federation/templates/modern-common/src/components/ComponentInspector.css deleted file mode 100644 index da68e5015ea..00000000000 --- a/packages/create-module-federation/templates/modern-common/src/components/ComponentInspector.css +++ /dev/null @@ -1,86 +0,0 @@ -.component-inspector { - position: relative; - display: inline-block; -} - -.inspector-info { - position: fixed; - z-index: 1000; - background: #1a1a1a; - padding: 4px 8px; - border-radius: 4px; - font-size: 12px; - color: #fff; - pointer-events: none; - display: flex; - align-items: center; - gap: 8px; -} - -.inspector-overlay { - position: fixed; - border-radius: 4px; - pointer-events: none; - z-index: 999; - background: - linear-gradient(90deg, #3b82f6 0%, #ec4899 50%, #3b82f6 100%) 0 0, - linear-gradient(90deg, #3b82f6 0%, #ec4899 50%, #3b82f6 100%) 0 100%, - linear-gradient(0deg, #3b82f6 0%, #ec4899 50%, #3b82f6 100%) 0 0, - linear-gradient(0deg, #3b82f6 0%, #ec4899 50%, #3b82f6 100%) 100% 0; - background-repeat: repeat-x, repeat-x, repeat-y, repeat-y; - background-size: - 200% 3px, - 200% 3px, - 3px 200%, - 3px 200%; /* 将边框从 2px 加粗到 3px */ - animation: borderRotate 4s linear infinite; -} - -@keyframes borderRotate { - 0% { - background-position: - 0% 0, - 0% 100%, - 0 0%, - 100% 0%; - } - 100% { - background-position: - 200% 0, - -200% 100%, - 0 -200%, - 100% 200%; - } -} -.mf-tag { - color: #646cff; - font-weight: 500; - position: relative; - padding-left: 16px; -} - -.mf-tag::before { - content: ''; - position: absolute; - left: 0; - top: 50%; - transform: translateY(-50%); - width: 12px; - height: 12px; - background-image: url('https://module-federation.io/svg.svg'); - background-repeat: no-repeat; - background-position: center; - background-size: contain; -} - -.divider { - color: #4a4a4a; -} - -.gradient-text { - background: linear-gradient(90deg, #60a5fa, #ec4899); - -webkit-background-clip: text; - background-clip: text; - -webkit-text-fill-color: transparent; - font-weight: 500; -} diff --git a/packages/create-module-federation/templates/modern-common/src/components/ComponentInspector.tsx b/packages/create-module-federation/templates/modern-common/src/components/ComponentInspector.tsx deleted file mode 100644 index 50128edf471..00000000000 --- a/packages/create-module-federation/templates/modern-common/src/components/ComponentInspector.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import React, { useState } from 'react'; -import './ComponentInspector.css'; - -interface InspectorInfo { - top: number; - left: number; - width: number; - height: number; -} - -export const ComponentInspector: React.FC<{ - children: React.ReactNode; - componentName: string; - mfName: string; -}> = ({ children, componentName, mfName }) => { - const [inspectorInfo, setInspectorInfo] = useState<InspectorInfo | null>( - null, - ); - - const handleMouseEnter = (e: React.MouseEvent<HTMLDivElement>) => { - const rect = e.currentTarget.getBoundingClientRect(); - setInspectorInfo({ - top: rect.top, - left: rect.left, - width: rect.width, - height: rect.height, - }); - }; - - const handleMouseLeave = () => { - setInspectorInfo(null); - }; - - return ( - <div - className="component-inspector" - onMouseEnter={handleMouseEnter} - onMouseLeave={handleMouseLeave} - > - {children} - {inspectorInfo && ( - <> - <div - className="inspector-info" - style={{ - top: `${inspectorInfo.top - 30}px`, - left: `${inspectorInfo.left}px`, - width: `${inspectorInfo.width}px`, - }} - > - <span className="mf-tag">{mfName}</span> - <span className="divider">|</span> - <span className="gradient-text">{componentName}</span> - </div> - <div - className="inspector-overlay" - style={{ - top: `${inspectorInfo.top}px`, - left: `${inspectorInfo.left}px`, - width: `${inspectorInfo.width}px`, - height: `${inspectorInfo.height}px`, - }} - /> - </> - )} - </div> - ); -}; diff --git a/packages/create-module-federation/templates/modern-common/tsconfig.json b/packages/create-module-federation/templates/modern-common/tsconfig.json index ce7f951eefc..26ef0ff0304 100644 --- a/packages/create-module-federation/templates/modern-common/tsconfig.json +++ b/packages/create-module-federation/templates/modern-common/tsconfig.json @@ -6,7 +6,8 @@ "baseUrl": "./", "paths": { "@/*": ["./src/*"], - "@shared/*": ["./shared/*"] + "@shared/*": ["./shared/*"], + "*": ["./@mf-types/*"] } }, "include": ["src", "shared", "config", "modern.config.ts"], diff --git a/packages/create-module-federation/templates/provider-modern-ts/src/routes/page.tsx b/packages/create-module-federation/templates/provider-modern-ts/src/routes/page.tsx index 18bbf92c261..862fa4f73cd 100644 --- a/packages/create-module-federation/templates/provider-modern-ts/src/routes/page.tsx +++ b/packages/create-module-federation/templates/provider-modern-ts/src/routes/page.tsx @@ -1,6 +1,5 @@ import { Helmet } from '@modern-js/runtime/head'; import './index.css'; -import { ComponentInspector } from '../components/ComponentInspector'; import Header from '../components/Header'; import Description from '../components/Description'; import Footer from '../components/Footer'; @@ -16,17 +15,9 @@ const Index = () => ( </Helmet> <div className="landing-page"> - <ComponentInspector componentName="Header" mfName="provider"> - <Header /> - </ComponentInspector> - - <ComponentInspector componentName="Description" mfName="provider"> - <Description /> - </ComponentInspector> - - <ComponentInspector componentName="Footer" mfName="provider"> - <Footer /> - </ComponentInspector> + <Header /> + <Description /> + <Footer /> </div> </div> ); diff --git a/packages/create-module-federation/templates/provider-rsbuild-ts/src/App.tsx b/packages/create-module-federation/templates/provider-rsbuild-ts/src/App.tsx index fbd2f7a18e3..efeaaa0cbf6 100644 --- a/packages/create-module-federation/templates/provider-rsbuild-ts/src/App.tsx +++ b/packages/create-module-federation/templates/provider-rsbuild-ts/src/App.tsx @@ -1,5 +1,4 @@ import './App.css'; -import { ComponentInspector } from './components/ComponentInspector'; import Header from './components/Header'; import Description from './components/Description'; import Footer from './components/Footer'; @@ -7,17 +6,9 @@ import Footer from './components/Footer'; const App = () => { return ( <div className="content"> - <ComponentInspector componentName="Header" mfName="provider"> - <Header /> - </ComponentInspector> - - <ComponentInspector componentName="Description" mfName="provider"> - <Description /> - </ComponentInspector> - - <ComponentInspector componentName="Footer" mfName="provider"> - <Footer /> - </ComponentInspector> + <Header /> + <Description /> + <Footer /> </div> ); }; diff --git a/packages/create-module-federation/templates/provider-rslib-storybook-ts/.gitignore b/packages/create-module-federation/templates/provider-rslib-storybook-ts/.gitignore new file mode 100644 index 00000000000..c5f1042988d --- /dev/null +++ b/packages/create-module-federation/templates/provider-rslib-storybook-ts/.gitignore @@ -0,0 +1,16 @@ +# Local +.DS_Store +*.local +*.log* + +# Dist +node_modules +dist/ + +# IDE +.vscode/* +!.vscode/extensions.json +.idea + +# Storybook dist +storybook-static/ diff --git a/packages/create-module-federation/templates/provider-rslib-storybook-ts/package.json.handlebars b/packages/create-module-federation/templates/provider-rslib-storybook-ts/package.json.handlebars index 4d5eced7abc..aa90a07f55c 100644 --- a/packages/create-module-federation/templates/provider-rslib-storybook-ts/package.json.handlebars +++ b/packages/create-module-federation/templates/provider-rslib-storybook-ts/package.json.handlebars @@ -15,17 +15,32 @@ ], "scripts": { "build": "rslib build", + "build:storybook": "storybook build", "dev": "rslib build --watch", + "storybook": "storybook dev -p 6006", "mf-dev": "rslib mf-dev" }, "devDependencies": { "@rsbuild/core": "1.2.0-beta.0", "@rsbuild/plugin-react": "^1.1.0", "@rslib/core": "^0.3.1", - "@types/react": "^19.0.4", - "react": "^19.0.0", + "@storybook/addon-essentials": "^8.4.7", + "@storybook/addon-interactions": "^8.4.7", + "@storybook/addon-links": "^8.4.7", + "@storybook/addon-onboarding": "^8.4.7", + "@storybook/blocks": "^8.4.7", + "@storybook/react": "^8.4.7", + "@storybook/test": "^8.4.7", + "@types/react": "^18.3.11", + "@types/react-dom": "~18.3.1", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "storybook": "^8.4.7", + "storybook-addon-rslib": "^0.1.7", + "storybook-react-rsbuild": "^0.1.7", "typescript": "^5.7.3", - "@module-federation/rsbuild-plugin":"^0.8.9" + "@module-federation/rsbuild-plugin":"^0.8.9", + "@module-federation/storybook-addon":"^4.0.1" }, "peerDependencies": { "react": ">=16.9.0", diff --git a/packages/create-module-federation/templates/lib-common/.gitignore b/packages/create-module-federation/templates/provider-rslib-ts/.gitignore similarity index 100% rename from packages/create-module-federation/templates/lib-common/.gitignore rename to packages/create-module-federation/templates/provider-rslib-ts/.gitignore diff --git a/packages/create-module-federation/templates/provider-rslib-ts/package.json.handlebars b/packages/create-module-federation/templates/provider-rslib-ts/package.json.handlebars index 0b45bb19815..0391fdb6a34 100644 --- a/packages/create-module-federation/templates/provider-rslib-ts/package.json.handlebars +++ b/packages/create-module-federation/templates/provider-rslib-ts/package.json.handlebars @@ -15,31 +15,17 @@ ], "scripts": { "build": "rslib build", - "build:storybook": "storybook build", "dev": "rslib build --watch", - "storybook": "storybook dev -p 6006", "mf-dev": "rslib mf-dev" }, "devDependencies": { "@rsbuild/core": "1.2.0-beta.0", "@rsbuild/plugin-react": "^1.1.0", "@rslib/core": "^0.3.1", - "@storybook/addon-essentials": "^8.4.7", - "@storybook/addon-interactions": "^8.4.7", - "@storybook/addon-links": "^8.4.7", - "@storybook/addon-onboarding": "^8.4.7", - "@storybook/blocks": "^8.4.7", - "@storybook/react": "^8.4.7", - "@storybook/test": "^8.4.7", - "@types/react": "^19.0.4", - "react": "^19.0.0", - "react-dom": "^19.0.0", - "storybook": "^8.4.7", - "storybook-addon-rslib": "^0.1.7", - "storybook-react-rsbuild": "^0.1.7", + "@types/react": "^18.3.11", + "react": "^18.3.1", "typescript": "^5.7.3", "@module-federation/rsbuild-plugin":"^0.8.9", - "@module-federation/storybook-addon":"^4.0.1" }, "peerDependencies": { "react": ">=16.9.0", diff --git a/packages/create-module-federation/templates/rsbuild-common/src/components/ComponentInspector.css b/packages/create-module-federation/templates/rsbuild-common/src/components/ComponentInspector.css deleted file mode 100644 index da68e5015ea..00000000000 --- a/packages/create-module-federation/templates/rsbuild-common/src/components/ComponentInspector.css +++ /dev/null @@ -1,86 +0,0 @@ -.component-inspector { - position: relative; - display: inline-block; -} - -.inspector-info { - position: fixed; - z-index: 1000; - background: #1a1a1a; - padding: 4px 8px; - border-radius: 4px; - font-size: 12px; - color: #fff; - pointer-events: none; - display: flex; - align-items: center; - gap: 8px; -} - -.inspector-overlay { - position: fixed; - border-radius: 4px; - pointer-events: none; - z-index: 999; - background: - linear-gradient(90deg, #3b82f6 0%, #ec4899 50%, #3b82f6 100%) 0 0, - linear-gradient(90deg, #3b82f6 0%, #ec4899 50%, #3b82f6 100%) 0 100%, - linear-gradient(0deg, #3b82f6 0%, #ec4899 50%, #3b82f6 100%) 0 0, - linear-gradient(0deg, #3b82f6 0%, #ec4899 50%, #3b82f6 100%) 100% 0; - background-repeat: repeat-x, repeat-x, repeat-y, repeat-y; - background-size: - 200% 3px, - 200% 3px, - 3px 200%, - 3px 200%; /* 将边框从 2px 加粗到 3px */ - animation: borderRotate 4s linear infinite; -} - -@keyframes borderRotate { - 0% { - background-position: - 0% 0, - 0% 100%, - 0 0%, - 100% 0%; - } - 100% { - background-position: - 200% 0, - -200% 100%, - 0 -200%, - 100% 200%; - } -} -.mf-tag { - color: #646cff; - font-weight: 500; - position: relative; - padding-left: 16px; -} - -.mf-tag::before { - content: ''; - position: absolute; - left: 0; - top: 50%; - transform: translateY(-50%); - width: 12px; - height: 12px; - background-image: url('https://module-federation.io/svg.svg'); - background-repeat: no-repeat; - background-position: center; - background-size: contain; -} - -.divider { - color: #4a4a4a; -} - -.gradient-text { - background: linear-gradient(90deg, #60a5fa, #ec4899); - -webkit-background-clip: text; - background-clip: text; - -webkit-text-fill-color: transparent; - font-weight: 500; -} diff --git a/packages/create-module-federation/templates/rsbuild-common/src/components/ComponentInspector.tsx b/packages/create-module-federation/templates/rsbuild-common/src/components/ComponentInspector.tsx deleted file mode 100644 index 50128edf471..00000000000 --- a/packages/create-module-federation/templates/rsbuild-common/src/components/ComponentInspector.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import React, { useState } from 'react'; -import './ComponentInspector.css'; - -interface InspectorInfo { - top: number; - left: number; - width: number; - height: number; -} - -export const ComponentInspector: React.FC<{ - children: React.ReactNode; - componentName: string; - mfName: string; -}> = ({ children, componentName, mfName }) => { - const [inspectorInfo, setInspectorInfo] = useState<InspectorInfo | null>( - null, - ); - - const handleMouseEnter = (e: React.MouseEvent<HTMLDivElement>) => { - const rect = e.currentTarget.getBoundingClientRect(); - setInspectorInfo({ - top: rect.top, - left: rect.left, - width: rect.width, - height: rect.height, - }); - }; - - const handleMouseLeave = () => { - setInspectorInfo(null); - }; - - return ( - <div - className="component-inspector" - onMouseEnter={handleMouseEnter} - onMouseLeave={handleMouseLeave} - > - {children} - {inspectorInfo && ( - <> - <div - className="inspector-info" - style={{ - top: `${inspectorInfo.top - 30}px`, - left: `${inspectorInfo.left}px`, - width: `${inspectorInfo.width}px`, - }} - > - <span className="mf-tag">{mfName}</span> - <span className="divider">|</span> - <span className="gradient-text">{componentName}</span> - </div> - <div - className="inspector-overlay" - style={{ - top: `${inspectorInfo.top}px`, - left: `${inspectorInfo.left}px`, - width: `${inspectorInfo.width}px`, - height: `${inspectorInfo.height}px`, - }} - /> - </> - )} - </div> - ); -}; diff --git a/packages/create-module-federation/tsconfig.json b/packages/create-module-federation/tsconfig.json index 2cd74a5bff2..56e67fa0f0c 100644 --- a/packages/create-module-federation/tsconfig.json +++ b/packages/create-module-federation/tsconfig.json @@ -3,13 +3,13 @@ "compilerOptions": { "lib": ["DOM", "ESNext"], "target": "ES2020", - "module": "Node16", + "module": "ESNext", + "moduleResolution": "Bundler", "forceConsistentCasingInFileNames": true, "strict": true, "noImplicitOverride": true, "noPropertyAccessFromIndexSignature": true, "noFallthroughCasesInSwitch": true, - "moduleResolution": "node16", "resolveJsonModule": true, "esModuleInterop": true, "skipLibCheck": true,