@bleedingdev/modern-js-app-tools 3.5.0-ultramodern.98 → 3.8.1-ultramodern.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/modern-bundle-docs.js +7 -0
- package/dist/cjs/builder/generator/createBuilderProviderConfig.js +5 -1
- package/dist/cjs/builder/generator/getBuilderEnvironments.js +80 -11
- package/dist/cjs/bundleDocs.js +114 -0
- package/dist/cjs/commands/build.js +2 -1
- package/dist/cjs/commands/deploy.js +4 -2
- package/dist/cjs/commands/index.js +0 -4
- package/dist/cjs/config/default.js +2 -0
- package/dist/cjs/index.js +56 -15
- package/dist/cjs/plugins/analyze/index.js +2 -2
- package/dist/cjs/plugins/analyze/utils.js +3 -2
- package/dist/cjs/plugins/deploy/platforms/cloudflare-output-verifier/index.js +1 -1
- package/dist/cjs/plugins/deploy/platforms/cloudflare-output-verifier/worker-bundles.js +94 -18
- package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.001-bootstrap-security.mjs +1 -0
- package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +14 -0
- package/dist/cjs/plugins/initialize/index.js +4 -3
- package/dist/cjs/plugins/serverBuild.js +3 -2
- package/dist/cjs/ultramodern-release-envelope/framework-output.js +109 -57
- package/dist/esm/builder/generator/createBuilderProviderConfig.mjs +5 -1
- package/dist/esm/builder/generator/getBuilderEnvironments.mjs +70 -10
- package/dist/esm/bundleDocs.mjs +62 -0
- package/dist/esm/commands/build.mjs +2 -1
- package/dist/esm/commands/deploy.mjs +4 -2
- package/dist/esm/commands/index.mjs +0 -4
- package/dist/esm/config/default.mjs +2 -0
- package/dist/esm/index.mjs +15 -1
- package/dist/esm/plugins/analyze/index.mjs +2 -2
- package/dist/esm/plugins/analyze/utils.mjs +3 -2
- package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/index.mjs +1 -1
- package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/worker-bundles.mjs +93 -18
- package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.001-bootstrap-security.mjs +1 -0
- package/dist/esm/plugins/deploy/platforms/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +14 -0
- package/dist/esm/plugins/initialize/index.mjs +4 -3
- package/dist/esm/plugins/serverBuild.mjs +3 -2
- package/dist/esm/ultramodern-release-envelope/framework-output.mjs +107 -58
- package/dist/esm-node/builder/generator/createBuilderProviderConfig.mjs +5 -1
- package/dist/esm-node/builder/generator/getBuilderEnvironments.mjs +70 -10
- package/dist/esm-node/bundleDocs.mjs +63 -0
- package/dist/esm-node/commands/build.mjs +2 -1
- package/dist/esm-node/commands/deploy.mjs +4 -2
- package/dist/esm-node/commands/index.mjs +0 -4
- package/dist/esm-node/config/default.mjs +2 -0
- package/dist/esm-node/index.mjs +15 -1
- package/dist/esm-node/plugins/analyze/index.mjs +2 -2
- package/dist/esm-node/plugins/analyze/utils.mjs +3 -2
- package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/index.mjs +1 -1
- package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/worker-bundles.mjs +93 -18
- package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.001-bootstrap-security.mjs +1 -0
- package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +14 -0
- package/dist/esm-node/plugins/initialize/index.mjs +4 -3
- package/dist/esm-node/plugins/serverBuild.mjs +3 -2
- package/dist/esm-node/ultramodern-release-envelope/framework-output.mjs +107 -58
- package/dist/types/builder/generator/getBuilderEnvironments.d.ts +29 -0
- package/dist/types/bundleDocs.d.ts +20 -0
- package/dist/types/commands/deploy.d.ts +2 -1
- package/dist/types/index.d.ts +4 -1
- package/dist/types/plugins/analyze/utils.d.ts +1 -1
- package/dist/types/plugins/deploy/platforms/cloudflare-output-verifier/worker-bundles.d.ts +1 -1
- package/dist/types/plugins/deploy/platforms/templates/cloudflare-entry.001-bootstrap-security.d.mts +1 -1
- package/dist/types/plugins/deploy/platforms/templates/cloudflare-worker-mf-ssr-runtime-plugin.d.mts +13 -0
- package/dist/types/types/config/dev.d.ts +6 -0
- package/dist/types/ultramodern-release-envelope/framework-output.d.ts +1 -0
- package/docs/apis/app/commands.md +231 -0
- package/docs/apis/app/hooks/api/lambda.md +9 -0
- package/docs/apis/app/hooks/config/favicon.md +24 -0
- package/docs/apis/app/hooks/config/html.md +5 -0
- package/docs/apis/app/hooks/config/icon.md +24 -0
- package/docs/apis/app/hooks/config/mock.md +6 -0
- package/docs/apis/app/hooks/config/public.md +26 -0
- package/docs/apis/app/hooks/config/upload.md +50 -0
- package/docs/apis/app/hooks/modern-config.md +5 -0
- package/docs/apis/app/hooks/server/server.md +5 -0
- package/docs/apis/app/hooks/shared.md +3 -0
- package/docs/apis/app/hooks/src/app.md +30 -0
- package/docs/apis/app/hooks/src/entry.md +34 -0
- package/docs/apis/app/hooks/src/entry.server.md +51 -0
- package/docs/apis/app/hooks/src/modern.runtime.md +5 -0
- package/docs/apis/app/hooks/src/routes.md +86 -0
- package/docs/apis/app/hooks/src/server.md +3 -0
- package/docs/apis/app/runtime/bff/use-backend-context.md +27 -0
- package/docs/apis/app/runtime/core/create-root.md +19 -0
- package/docs/apis/app/runtime/core/render.md +39 -0
- package/docs/apis/app/runtime/core/runtime-context.md +156 -0
- package/docs/apis/app/runtime/router/router.md +283 -0
- package/docs/apis/app/runtime/ssr/no-ssr.md +35 -0
- package/docs/apis/app/runtime/ssr/renderStreaming.md +67 -0
- package/docs/apis/app/runtime/ssr/renderString.md +60 -0
- package/docs/apis/app/runtime/ssr/requestHandler.md +44 -0
- package/docs/apis/app/runtime/utility/css-in-js.md +40 -0
- package/docs/apis/app/runtime/utility/head.md +35 -0
- package/docs/apis/app/runtime/utility/loadable.md +82 -0
- package/docs/community/blog/2022-0708-updates.md +91 -0
- package/docs/community/blog/2022-0910-updates.md +76 -0
- package/docs/community/blog/overview.md +63 -0
- package/docs/community/blog/v2-release-note.md +238 -0
- package/docs/community/blog/v3-release-note.md +622 -0
- package/docs/community/contributing-guide.md +252 -0
- package/docs/community/releases.md +23 -0
- package/docs/community/showcase.md +24 -0
- package/docs/community/team.md +14 -0
- package/docs/configure/app/bff/cross-project.md +20 -0
- package/docs/configure/app/bff/effect.md +313 -0
- package/docs/configure/app/bff/prefix.md +29 -0
- package/docs/configure/app/bff/runtime-framework.md +26 -0
- package/docs/configure/app/builder-plugins.md +66 -0
- package/docs/configure/app/dev/asset-prefix.md +13 -0
- package/docs/configure/app/dev/before-start-url.md +17 -0
- package/docs/configure/app/dev/client.md +41 -0
- package/docs/configure/app/dev/hmr.md +10 -0
- package/docs/configure/app/dev/host.md +18 -0
- package/docs/configure/app/dev/https.md +77 -0
- package/docs/configure/app/dev/lazy-compilation.md +39 -0
- package/docs/configure/app/dev/live-reload.md +10 -0
- package/docs/configure/app/dev/mock-dir.md +31 -0
- package/docs/configure/app/dev/progress-bar.md +19 -0
- package/docs/configure/app/dev/server.md +124 -0
- package/docs/configure/app/dev/setup-middlewares.md +32 -0
- package/docs/configure/app/dev/start-url.md +48 -0
- package/docs/configure/app/dev/watch-files.md +27 -0
- package/docs/configure/app/dev/write-to-disk.md +10 -0
- package/docs/configure/app/experiments/source-build.md +31 -0
- package/docs/configure/app/html/app-icon.md +28 -0
- package/docs/configure/app/html/crossorigin.md +10 -0
- package/docs/configure/app/html/favicon.md +16 -0
- package/docs/configure/app/html/inject.md +10 -0
- package/docs/configure/app/html/meta.md +24 -0
- package/docs/configure/app/html/mount-id.md +10 -0
- package/docs/configure/app/html/output-structure.md +10 -0
- package/docs/configure/app/html/script-loading.md +10 -0
- package/docs/configure/app/html/tags.md +15 -0
- package/docs/configure/app/html/template-parameters.md +33 -0
- package/docs/configure/app/html/template.md +10 -0
- package/docs/configure/app/html/title.md +18 -0
- package/docs/configure/app/output/asset-prefix.md +11 -0
- package/docs/configure/app/output/assets-retry.md +77 -0
- package/docs/configure/app/output/charset.md +10 -0
- package/docs/configure/app/output/clean-dist-path.md +16 -0
- package/docs/configure/app/output/convert-to-rem.md +79 -0
- package/docs/configure/app/output/copy.md +10 -0
- package/docs/configure/app/output/css-modules.md +48 -0
- package/docs/configure/app/output/data-uri-limit.md +26 -0
- package/docs/configure/app/output/disable-css-module-extension.md +55 -0
- package/docs/configure/app/output/disable-inline-runtime-chunk.md +41 -0
- package/docs/configure/app/output/disable-svgr.md +18 -0
- package/docs/configure/app/output/disable-ts-checker.md +49 -0
- package/docs/configure/app/output/dist-path.md +43 -0
- package/docs/configure/app/output/enable-asset-manifest.md +36 -0
- package/docs/configure/app/output/enable-css-module-tsdeclaration.md +28 -0
- package/docs/configure/app/output/enable-inline-route-manifests.md +16 -0
- package/docs/configure/app/output/externals.md +20 -0
- package/docs/configure/app/output/filename-hash.md +10 -0
- package/docs/configure/app/output/filename.md +55 -0
- package/docs/configure/app/output/inject-styles.md +10 -0
- package/docs/configure/app/output/inline-scripts.md +29 -0
- package/docs/configure/app/output/inline-styles.md +29 -0
- package/docs/configure/app/output/legal-comments.md +18 -0
- package/docs/configure/app/output/minify.md +22 -0
- package/docs/configure/app/output/override-browserslist.md +22 -0
- package/docs/configure/app/output/polyfill.md +12 -0
- package/docs/configure/app/output/source-map.md +30 -0
- package/docs/configure/app/output/split-route-chunks.md +16 -0
- package/docs/configure/app/output/ssg.md +81 -0
- package/docs/configure/app/output/ssgByEntries.md +90 -0
- package/docs/configure/app/output/svg-default-export.md +30 -0
- package/docs/configure/app/output/temp-dir.md +20 -0
- package/docs/configure/app/performance/build-cache.md +44 -0
- package/docs/configure/app/performance/chunk-split.md +40 -0
- package/docs/configure/app/performance/dns-prefetch.md +15 -0
- package/docs/configure/app/performance/preconnect.md +16 -0
- package/docs/configure/app/performance/prefetch.md +21 -0
- package/docs/configure/app/performance/preload.md +23 -0
- package/docs/configure/app/performance/print-file-size.md +40 -0
- package/docs/configure/app/performance/profile.md +10 -0
- package/docs/configure/app/performance/remove-console.md +10 -0
- package/docs/configure/app/performance/remove-moment-locale.md +10 -0
- package/docs/configure/app/performance/rsdoctor.md +38 -0
- package/docs/configure/app/plugins.md +59 -0
- package/docs/configure/app/resolve/alias-strategy.md +10 -0
- package/docs/configure/app/resolve/alias.md +9 -0
- package/docs/configure/app/resolve/condition-names.md +13 -0
- package/docs/configure/app/resolve/dedupe.md +9 -0
- package/docs/configure/app/resolve/extensions.md +13 -0
- package/docs/configure/app/runtime/0-intro.md +58 -0
- package/docs/configure/app/runtime/plugins.md +58 -0
- package/docs/configure/app/runtime/router.md +35 -0
- package/docs/configure/app/security/check-syntax.md +69 -0
- package/docs/configure/app/security/nonce.md +15 -0
- package/docs/configure/app/security/sri.md +20 -0
- package/docs/configure/app/server/base-url.md +26 -0
- package/docs/configure/app/server/port.md +18 -0
- package/docs/configure/app/server/public-routes.md +22 -0
- package/docs/configure/app/server/routes.md +86 -0
- package/docs/configure/app/server/rsc.md +22 -0
- package/docs/configure/app/server/ssr-by-entries.md +25 -0
- package/docs/configure/app/server/ssr.md +80 -0
- package/docs/configure/app/server/tsconfig-path.md +59 -0
- package/docs/configure/app/source/alias-strategy.md +14 -0
- package/docs/configure/app/source/alias.md +23 -0
- package/docs/configure/app/source/config-dir.md +20 -0
- package/docs/configure/app/source/decorators.md +25 -0
- package/docs/configure/app/source/define.md +16 -0
- package/docs/configure/app/source/disable-default-entries.md +28 -0
- package/docs/configure/app/source/enable-async-entry.md +54 -0
- package/docs/configure/app/source/enable-async-pre-entry.md +26 -0
- package/docs/configure/app/source/entries-dir.md +35 -0
- package/docs/configure/app/source/entries.md +179 -0
- package/docs/configure/app/source/exclude.md +10 -0
- package/docs/configure/app/source/global-vars.md +106 -0
- package/docs/configure/app/source/include.md +36 -0
- package/docs/configure/app/source/main-entry-name.md +24 -0
- package/docs/configure/app/source/pre-entry.md +10 -0
- package/docs/configure/app/source/react-compiler.md +68 -0
- package/docs/configure/app/source/transform-import.md +27 -0
- package/docs/configure/app/split-chunks.md +17 -0
- package/docs/configure/app/tools/autoprefixer.md +44 -0
- package/docs/configure/app/tools/bundler-chain.md +26 -0
- package/docs/configure/app/tools/css-extract.md +33 -0
- package/docs/configure/app/tools/css-loader.md +17 -0
- package/docs/configure/app/tools/dev-server.md +113 -0
- package/docs/configure/app/tools/html-plugin.md +41 -0
- package/docs/configure/app/tools/less.md +81 -0
- package/docs/configure/app/tools/lightningcss-loader.md +35 -0
- package/docs/configure/app/tools/minify-css.md +53 -0
- package/docs/configure/app/tools/postcss.md +34 -0
- package/docs/configure/app/tools/rspack.md +10 -0
- package/docs/configure/app/tools/sass.md +78 -0
- package/docs/configure/app/tools/style-loader.md +10 -0
- package/docs/configure/app/tools/swc.md +65 -0
- package/docs/configure/app/tools/ts-checker.md +116 -0
- package/docs/configure/app/usage.md +276 -0
- package/docs/guides/advanced-features/bff/cross-project.md +109 -0
- package/docs/guides/advanced-features/bff/data-platform.md +116 -0
- package/docs/guides/advanced-features/bff/extend-server.md +120 -0
- package/docs/guides/advanced-features/bff/frameworks.md +243 -0
- package/docs/guides/advanced-features/bff/function.md +318 -0
- package/docs/guides/advanced-features/bff/operators.md +554 -0
- package/docs/guides/advanced-features/bff/sdk.md +116 -0
- package/docs/guides/advanced-features/bff/upload.md +101 -0
- package/docs/guides/advanced-features/bff.md +18 -0
- package/docs/guides/advanced-features/build-performance.md +130 -0
- package/docs/guides/advanced-features/compatibility.md +120 -0
- package/docs/guides/advanced-features/international/advanced.md +128 -0
- package/docs/guides/advanced-features/international/api.md +267 -0
- package/docs/guides/advanced-features/international/best-practices.md +286 -0
- package/docs/guides/advanced-features/international/configuration.md +228 -0
- package/docs/guides/advanced-features/international/locale-detection.md +126 -0
- package/docs/guides/advanced-features/international/quick-start.md +128 -0
- package/docs/guides/advanced-features/international/resource-loading.md +154 -0
- package/docs/guides/advanced-features/international/routing.md +173 -0
- package/docs/guides/advanced-features/international.md +27 -0
- package/docs/guides/advanced-features/low-level.md +46 -0
- package/docs/guides/advanced-features/page-performance/code-split.md +77 -0
- package/docs/guides/advanced-features/page-performance/inline-assets.md +159 -0
- package/docs/guides/advanced-features/page-performance/optimize-bundle.md +97 -0
- package/docs/guides/advanced-features/page-performance/react-compiler.md +51 -0
- package/docs/guides/advanced-features/server-monitor/logger.md +41 -0
- package/docs/guides/advanced-features/server-monitor/metrics.md +58 -0
- package/docs/guides/advanced-features/server-monitor/monitors.md +242 -0
- package/docs/guides/advanced-features/source-build.md +164 -0
- package/docs/guides/advanced-features/web-server.md +288 -0
- package/docs/guides/basic-features/alias.md +102 -0
- package/docs/guides/basic-features/css/css-in-js.md +72 -0
- package/docs/guides/basic-features/css/css-modules.md +212 -0
- package/docs/guides/basic-features/css/css.md +27 -0
- package/docs/guides/basic-features/css/tailwindcss.md +27 -0
- package/docs/guides/basic-features/data/data-cache.md +510 -0
- package/docs/guides/basic-features/data/data-fetch.md +415 -0
- package/docs/guides/basic-features/data/data-write.md +227 -0
- package/docs/guides/basic-features/debug/mock.md +109 -0
- package/docs/guides/basic-features/debug/proxy.md +21 -0
- package/docs/guides/basic-features/debug/rsdoctor.md +47 -0
- package/docs/guides/basic-features/debug/using-storybook.md +112 -0
- package/docs/guides/basic-features/deploy.md +458 -0
- package/docs/guides/basic-features/env-vars.md +177 -0
- package/docs/guides/basic-features/html.md +255 -0
- package/docs/guides/basic-features/output-files.md +141 -0
- package/docs/guides/basic-features/render/before-render.md +108 -0
- package/docs/guides/basic-features/render/overview.md +47 -0
- package/docs/guides/basic-features/render/rsc.md +516 -0
- package/docs/guides/basic-features/render/ssg.md +228 -0
- package/docs/guides/basic-features/render/ssr-cache.md +201 -0
- package/docs/guides/basic-features/render/ssr.md +321 -0
- package/docs/guides/basic-features/render/streaming-ssr.md +264 -0
- package/docs/guides/basic-features/routes/config-routes.md +426 -0
- package/docs/guides/basic-features/routes/routes.md +524 -0
- package/docs/guides/basic-features/static-assets/json-files.md +120 -0
- package/docs/guides/basic-features/static-assets/svg-assets.md +168 -0
- package/docs/guides/basic-features/static-assets/wasm-assets.md +62 -0
- package/docs/guides/basic-features/static-assets.md +160 -0
- package/docs/guides/basic-features/testing/playwright.md +120 -0
- package/docs/guides/basic-features/testing/rstest.md +251 -0
- package/docs/guides/concept/builder.md +37 -0
- package/docs/guides/concept/entries.md +319 -0
- package/docs/guides/concept/server.md +35 -0
- package/docs/guides/get-started/ai-coding-agents.md +58 -0
- package/docs/guides/get-started/glossary.md +63 -0
- package/docs/guides/get-started/introduction.md +40 -0
- package/docs/guides/get-started/quick-start.md +269 -0
- package/docs/guides/get-started/tech-stack.md +91 -0
- package/docs/guides/get-started/ultramodern.md +440 -0
- package/docs/guides/get-started/upgrade.md +118 -0
- package/docs/guides/topic-detail/module-federation/application.md +116 -0
- package/docs/guides/topic-detail/module-federation/deploy.md +104 -0
- package/docs/guides/topic-detail/module-federation/i18n.md +670 -0
- package/docs/guides/topic-detail/module-federation/introduce.md +35 -0
- package/docs/guides/topic-detail/module-federation/ssr.md +182 -0
- package/docs/guides/topic-detail/module-federation/usage.md +219 -0
- package/docs/guides/troubleshooting/builder.md +110 -0
- package/docs/guides/troubleshooting/cli.md +35 -0
- package/docs/guides/troubleshooting/dependencies.md +119 -0
- package/docs/guides/troubleshooting/hmr.md +144 -0
- package/docs/guides/upgrade/config.md +954 -0
- package/docs/guides/upgrade/entry.md +463 -0
- package/docs/guides/upgrade/other.md +183 -0
- package/docs/guides/upgrade/overview.md +33 -0
- package/docs/guides/upgrade/tailwindcss.md +91 -0
- package/docs/guides/upgrade/web-server.md +109 -0
- package/docs/index.md +33 -0
- package/docs/llms.txt +290 -0
- package/docs/plugin/cli-plugins/api.md +573 -0
- package/docs/plugin/cli-plugins/life-cycle.md +2 -0
- package/docs/plugin/introduction.md +152 -0
- package/docs/plugin/official/cli-plugins/plugin-bff.md +5 -0
- package/docs/plugin/official/cli-plugins/plugin-ssg.md +5 -0
- package/docs/plugin/official/cli-plugins/plugin-styled-components.md +5 -0
- package/docs/plugin/official/cli-plugins.md +4 -0
- package/docs/plugin/plugin-system.md +238 -0
- package/docs/plugin/runtime-plugins/api.md +194 -0
- package/docs/plugin/runtime-plugins/life-cycle.md +2 -0
- package/docs/plugin/server-plugins/api.md +209 -0
- package/docs/plugin/server-plugins/life-cycle.md +13 -0
- package/docs/tutorials/examples/csr-auth.md +9 -0
- package/docs/tutorials/foundations/introduction.md +16 -0
- package/package.json +63 -22
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import node_fs from "node:fs";
|
|
2
|
+
import node_path from "node:path";
|
|
3
|
+
const DEFAULT_INDEX_FILE = 'llms.txt';
|
|
4
|
+
const DEFAULT_EXCLUDED_DIRS = [
|
|
5
|
+
'zh'
|
|
6
|
+
];
|
|
7
|
+
function bundleDocs({ source, target, indexFile = DEFAULT_INDEX_FILE, excludedDirs = DEFAULT_EXCLUDED_DIRS }) {
|
|
8
|
+
if (!node_fs.existsSync(source)) {
|
|
9
|
+
console.warn(`[bundle-docs] docs build output not found: ${source}`);
|
|
10
|
+
console.warn('[bundle-docs] skipping the bundled docs — build the docs site first if you need them');
|
|
11
|
+
return 0;
|
|
12
|
+
}
|
|
13
|
+
node_fs.rmSync(target, {
|
|
14
|
+
recursive: true,
|
|
15
|
+
force: true
|
|
16
|
+
});
|
|
17
|
+
const isBundled = (rel)=>rel === indexFile || rel.endsWith('.md') && !excludedDirs.some((dir)=>rel.startsWith(`${dir}${node_path.sep}`));
|
|
18
|
+
let count = 0;
|
|
19
|
+
for (const entry of node_fs.readdirSync(source, {
|
|
20
|
+
recursive: true,
|
|
21
|
+
withFileTypes: true
|
|
22
|
+
})){
|
|
23
|
+
if (!entry.isFile()) continue;
|
|
24
|
+
const from = node_path.join(entry.parentPath ?? entry.path, entry.name);
|
|
25
|
+
const rel = node_path.relative(source, from);
|
|
26
|
+
if (!isBundled(rel)) continue;
|
|
27
|
+
const to = node_path.join(target, rel);
|
|
28
|
+
node_fs.mkdirSync(node_path.dirname(to), {
|
|
29
|
+
recursive: true
|
|
30
|
+
});
|
|
31
|
+
node_fs.copyFileSync(from, to);
|
|
32
|
+
count++;
|
|
33
|
+
}
|
|
34
|
+
if (0 === count) throw new Error(`[bundle-docs] no files copied from ${source}`);
|
|
35
|
+
return count;
|
|
36
|
+
}
|
|
37
|
+
function parseArgs(argv) {
|
|
38
|
+
const options = {};
|
|
39
|
+
for(let i = 0; i < argv.length; i += 2){
|
|
40
|
+
const key = argv[i]?.replace(/^--/, '');
|
|
41
|
+
const value = argv[i + 1];
|
|
42
|
+
if (key && value) options[key] = value;
|
|
43
|
+
}
|
|
44
|
+
return options;
|
|
45
|
+
}
|
|
46
|
+
function runBundleDocsCli(pkgRoot) {
|
|
47
|
+
const args = parseArgs(process.argv.slice(2));
|
|
48
|
+
const source = args.source ? node_path.resolve(process.cwd(), args.source) : node_path.resolve(pkgRoot, '../../document/doc_build');
|
|
49
|
+
const target = args.target ? node_path.resolve(process.cwd(), args.target) : node_path.resolve(pkgRoot, 'docs');
|
|
50
|
+
try {
|
|
51
|
+
const count = bundleDocs({
|
|
52
|
+
source,
|
|
53
|
+
target,
|
|
54
|
+
indexFile: args.index
|
|
55
|
+
});
|
|
56
|
+
if (count > 0) console.log(`[bundle-docs] bundled ${count} doc files into docs`);
|
|
57
|
+
} catch (error) {
|
|
58
|
+
console.error(error.message);
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export { bundleDocs, runBundleDocsCli };
|
|
@@ -56,8 +56,9 @@ const build = async (api, options)=>{
|
|
|
56
56
|
logger.info('Starting production build...');
|
|
57
57
|
if (!appContext.builder) throw new Error('Expect the Builder to have been initialized, But the appContext.builder received `undefined`');
|
|
58
58
|
await appContext.builder.onAfterBuild(async ()=>copyEnvFiles(appContext.appDirectory, appContext.distDirectory));
|
|
59
|
-
await appContext.builder.build({
|
|
59
|
+
const buildResult = await appContext.builder.build({
|
|
60
60
|
watch: options?.watch
|
|
61
61
|
});
|
|
62
|
+
if (!options?.watch) await buildResult?.close();
|
|
62
63
|
};
|
|
63
64
|
export { build };
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { getServerPlugins } from "../utils/loadPlugins.mjs";
|
|
2
|
-
|
|
2
|
+
import { build } from "./build.mjs";
|
|
3
|
+
const deploy = async (api, options = {})=>{
|
|
3
4
|
const hooks = api.getHooks();
|
|
4
5
|
const { metaName } = api.getAppContext();
|
|
5
|
-
await getServerPlugins(api, metaName);
|
|
6
|
+
if (options.skipBuild) await getServerPlugins(api, metaName);
|
|
7
|
+
else await build(api);
|
|
6
8
|
await hooks.onBeforeDeploy.call(options);
|
|
7
9
|
await hooks.deploy.call();
|
|
8
10
|
await hooks.onAfterDeploy.call(options);
|
|
@@ -19,10 +19,6 @@ const serverCommand = (program, api)=>{
|
|
|
19
19
|
};
|
|
20
20
|
const deployCommand = (program, api)=>{
|
|
21
21
|
program.command('deploy').usage('[options]').option('-c --config <config>', i18n.t(localeKeys.command.shared.config)).option('-s --skip-build', i18n.t(localeKeys.command.shared.skipBuild)).description(i18n.t(localeKeys.command.deploy.describe)).action(async (options)=>{
|
|
22
|
-
if (!options.skipBuild) {
|
|
23
|
-
const { build } = await import("./build.mjs");
|
|
24
|
-
await build(api);
|
|
25
|
-
}
|
|
26
22
|
const { deploy } = await import("./deploy.mjs");
|
|
27
23
|
await deploy(api, options);
|
|
28
24
|
process.exit(0);
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { AGGRED_DIR } from "@modern-js/server-core";
|
|
1
2
|
import { DEFAULT_ENTRY_NAME } from "@modern-js/utils";
|
|
2
3
|
import { getAutoInjectEnv } from "../utils/env.mjs";
|
|
3
4
|
function createDefaultConfig(appContext) {
|
|
4
5
|
const dev = {
|
|
6
|
+
mockDir: `./${AGGRED_DIR.mock}`,
|
|
5
7
|
cliShortcuts: {
|
|
6
8
|
help: false,
|
|
7
9
|
custom: (shortcuts = [])=>shortcuts.filter(({ key })=>'r' !== key && 'u' !== key && 'o' !== key)
|
package/dist/esm/index.mjs
CHANGED
|
@@ -85,7 +85,18 @@ const appTools = ()=>({
|
|
|
85
85
|
].some((tag)=>getArgv().includes(tag));
|
|
86
86
|
if (isSkipBuild) return;
|
|
87
87
|
}
|
|
88
|
-
|
|
88
|
+
const { command: contextCommand } = api.getAppContext();
|
|
89
|
+
const shouldClean = [
|
|
90
|
+
'dev',
|
|
91
|
+
'start',
|
|
92
|
+
'build',
|
|
93
|
+
'deploy'
|
|
94
|
+
].includes(command) || [
|
|
95
|
+
'dev',
|
|
96
|
+
'start',
|
|
97
|
+
'build'
|
|
98
|
+
].includes(contextCommand);
|
|
99
|
+
if (shouldClean) {
|
|
89
100
|
const resolvedConfig = api.getNormalizedConfig();
|
|
90
101
|
if (resolvedConfig.output.cleanDistPath) {
|
|
91
102
|
const appContext = api.getAppContext();
|
|
@@ -125,9 +136,12 @@ const appTools = ()=>({
|
|
|
125
136
|
});
|
|
126
137
|
const src = appTools;
|
|
127
138
|
export { defineConfig } from "./defineConfig.mjs";
|
|
139
|
+
export { build } from "./commands/build.mjs";
|
|
140
|
+
export { deploy } from "./commands/deploy.mjs";
|
|
128
141
|
export { dev } from "./commands/dev.mjs";
|
|
129
142
|
export { serve } from "./commands/serve.mjs";
|
|
130
143
|
export { resolveModernRsbuildConfig } from "./rsbuild.mjs";
|
|
144
|
+
export { closeServer } from "./utils/createServer.mjs";
|
|
131
145
|
export { mergeConfig } from "@modern-js/plugin/cli";
|
|
132
146
|
export default src;
|
|
133
147
|
export { appTools, generateWatchFiles, initAppContext };
|
|
@@ -23,7 +23,7 @@ const analyze = ()=>({
|
|
|
23
23
|
const resolvedConfig = api.getNormalizedConfig();
|
|
24
24
|
const hooks = api.getHooks();
|
|
25
25
|
try {
|
|
26
|
-
if (checkIsBuildCommands()) fs.emptydirSync(appContext.internalDirectory);
|
|
26
|
+
if (checkIsBuildCommands(appContext.command)) fs.emptydirSync(appContext.internalDirectory);
|
|
27
27
|
} catch {}
|
|
28
28
|
const apiOnly = await isApiOnly(appContext.appDirectory, resolvedConfig.source?.entriesDir, appContext.apiDirectory);
|
|
29
29
|
const [{ getProdEntrypoints, getProdServerRoutes }] = await Promise.all([
|
|
@@ -125,7 +125,7 @@ const analyze = ()=>({
|
|
|
125
125
|
htmlTemplates
|
|
126
126
|
};
|
|
127
127
|
api.updateAppContext(appContext);
|
|
128
|
-
if (checkIsBuildCommands()) {
|
|
128
|
+
if (checkIsBuildCommands(appContext.command)) {
|
|
129
129
|
await hooks.generateEntryCode.call({
|
|
130
130
|
entrypoints
|
|
131
131
|
});
|
|
@@ -38,7 +38,7 @@ const parseModule = async ({ source, filename })=>{
|
|
|
38
38
|
return await parse(content);
|
|
39
39
|
};
|
|
40
40
|
const getServerCombinedModuleFile = (internalDirectory, entryName)=>path.join(internalDirectory, entryName, 'server-loader-combined.js');
|
|
41
|
-
const checkIsBuildCommands = ()=>{
|
|
41
|
+
const checkIsBuildCommands = (contextCommand)=>{
|
|
42
42
|
const buildCommands = [
|
|
43
43
|
'dev',
|
|
44
44
|
'start',
|
|
@@ -48,7 +48,8 @@ const checkIsBuildCommands = ()=>{
|
|
|
48
48
|
'dev-worker'
|
|
49
49
|
];
|
|
50
50
|
const command = getCommand();
|
|
51
|
-
|
|
51
|
+
if (buildCommands.includes(command)) return true;
|
|
52
|
+
return 'dev' === contextCommand || 'start' === contextCommand || 'build' === contextCommand || 'deploy' === contextCommand;
|
|
52
53
|
};
|
|
53
54
|
const checkIsServeCommand = ()=>{
|
|
54
55
|
const command = getCommand();
|
|
@@ -116,7 +116,7 @@ const verifyCloudflareOutput = async (options)=>{
|
|
|
116
116
|
path: publicPath
|
|
117
117
|
});
|
|
118
118
|
}
|
|
119
|
-
if (false !== options.importWorker && await pathExists(outputPlan.paths.workerEntry)) await verifyWorkerImport(issues, outputPlan.paths.workerEntry);
|
|
119
|
+
if (false !== options.importWorker && await pathExists(outputPlan.paths.workerEntry)) await verifyWorkerImport(issues, outputPlan.paths.workerEntry, manifest);
|
|
120
120
|
return {
|
|
121
121
|
ok: 0 === issues.length,
|
|
122
122
|
issues
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import promises from "node:fs/promises";
|
|
2
2
|
import node_path from "node:path";
|
|
3
3
|
import { pathToFileURL } from "node:url";
|
|
4
|
+
import { isDeepStrictEqual } from "node:util";
|
|
4
5
|
import { parse } from "@babel/parser";
|
|
6
|
+
import traverse from "@babel/traverse";
|
|
5
7
|
import { CLOUDFLARE_WORKER_BUNDLE_DIRECTORY, CLOUDFLARE_WORKER_NODE_BUILTINS } from "../cloudflare-output-contract.mjs";
|
|
6
8
|
import { addIssue } from "./issues.mjs";
|
|
7
9
|
const getReferencedRouteWorkers = (manifest)=>Array.isArray(manifest?.routeSpec?.routes) ? manifest.routeSpec.routes.map((route)=>'string' == typeof route?.worker && route.worker.length > 0 ? route.worker : void 0).filter((worker)=>'string' == typeof worker) : [];
|
|
@@ -45,6 +47,7 @@ const getNodeName = (node)=>{
|
|
|
45
47
|
if (!isAstNode(node)) return;
|
|
46
48
|
return 'Identifier' === node.type && 'string' == typeof node.name ? node.name : 'StringLiteral' === node.type && 'string' == typeof node.value ? node.value : void 0;
|
|
47
49
|
};
|
|
50
|
+
const getStringLiteralValue = (node)=>isAstNode(node) && 'StringLiteral' === node.type && 'string' == typeof node.value ? node.value : void 0;
|
|
48
51
|
const collectBindingNames = (node, names)=>{
|
|
49
52
|
if (!isAstNode(node)) return;
|
|
50
53
|
const name = getNodeName(node);
|
|
@@ -54,7 +57,11 @@ const collectBindingNames = (node, names)=>{
|
|
|
54
57
|
} else if ('ArrayPattern' === node.type && Array.isArray(node.elements)) for (const element of node.elements)collectBindingNames(element, names);
|
|
55
58
|
else if ('AssignmentPattern' === node.type || 'RestElement' === node.type) collectBindingNames('AssignmentPattern' === node.type ? node.left : node.argument, names);
|
|
56
59
|
};
|
|
57
|
-
const getMemberPropertyName = (node)=>
|
|
60
|
+
const getMemberPropertyName = (node)=>{
|
|
61
|
+
if ('MemberExpression' !== node.type) return;
|
|
62
|
+
return true === node.computed ? getStringLiteralValue(node.property) : getNodeName(node.property);
|
|
63
|
+
};
|
|
64
|
+
const isAmbientModuleRequire = (node, modulePath)=>isAstNode(node) && 'MemberExpression' === node.type && isAstNode(node.object) && 'Identifier' === node.object.type && 'module' === node.object.name && void 0 === modulePath.scope.getBinding('module') && 'require' === getMemberPropertyName(node);
|
|
58
65
|
const isModuleExports = (node)=>isAstNode(node) && 'MemberExpression' === node.type && isAstNode(node.object) && 'Identifier' === node.object.type && 'module' === node.object.name && 'exports' === getMemberPropertyName(node);
|
|
59
66
|
const collectCommonJsExports = (statement, exports)=>{
|
|
60
67
|
if ('ExpressionStatement' !== statement.type || !isAstNode(statement.expression) || 'AssignmentExpression' !== statement.expression.type) return;
|
|
@@ -89,19 +96,31 @@ const collectEsmExports = (statement, exports)=>{
|
|
|
89
96
|
}
|
|
90
97
|
}
|
|
91
98
|
};
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
99
|
+
const getStaticImport = (modulePath)=>{
|
|
100
|
+
const node = modulePath.node;
|
|
101
|
+
if (('ImportDeclaration' === node.type || 'ExportNamedDeclaration' === node.type || 'ExportAllDeclaration' === node.type) && isAstNode(node.source)) return getStringLiteralValue(node.source);
|
|
102
|
+
if ('ImportExpression' === node.type && isAstNode(node.source)) return getStringLiteralValue(node.source);
|
|
103
|
+
if ('CallExpression' === node.type && Array.isArray(node.arguments) && 1 === node.arguments.length && isAstNode(node.callee) && ('Identifier' === node.callee.type && 'require' === node.callee.name && void 0 === modulePath.scope.getBinding('require') || isAmbientModuleRequire(node.callee, modulePath) || 'Import' === node.callee.type)) return getStringLiteralValue(node.arguments[0]);
|
|
104
|
+
};
|
|
105
|
+
const isAmbientLoaderWrite = (modulePath)=>{
|
|
106
|
+
let targetPath = modulePath;
|
|
107
|
+
while(targetPath.parentPath){
|
|
108
|
+
const parentPath = targetPath.parentPath;
|
|
109
|
+
if (parentPath.isAssignmentExpression()) return 'left' === targetPath.key;
|
|
110
|
+
if (parentPath.isUpdateExpression()) return 'argument' === targetPath.key;
|
|
111
|
+
if (parentPath.isForInStatement() || parentPath.isForOfStatement()) return 'left' === targetPath.key;
|
|
112
|
+
if (parentPath.isObjectProperty()) {
|
|
113
|
+
if ('value' !== targetPath.key) return false;
|
|
114
|
+
targetPath = parentPath;
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
if (parentPath.isObjectPattern() || parentPath.isArrayPattern() || parentPath.isRestElement() || parentPath.isAssignmentPattern()) {
|
|
118
|
+
targetPath = parentPath;
|
|
119
|
+
continue;
|
|
98
120
|
}
|
|
121
|
+
break;
|
|
99
122
|
}
|
|
100
|
-
|
|
101
|
-
const getStaticImport = (node)=>{
|
|
102
|
-
if (('ImportDeclaration' === node.type || 'ExportNamedDeclaration' === node.type || 'ExportAllDeclaration' === node.type) && isAstNode(node.source)) return getNodeName(node.source);
|
|
103
|
-
if ('ImportExpression' === node.type && isAstNode(node.source)) return getNodeName(node.source);
|
|
104
|
-
if ('CallExpression' === node.type && Array.isArray(node.arguments) && 1 === node.arguments.length && isAstNode(node.callee) && ('Identifier' === node.callee.type && 'require' === node.callee.name || 'Import' === node.callee.type)) return getNodeName(node.arguments[0]);
|
|
123
|
+
return false;
|
|
105
124
|
};
|
|
106
125
|
const analyzeWorkerModule = (source)=>{
|
|
107
126
|
const ast = parse(source, {
|
|
@@ -109,17 +128,49 @@ const analyzeWorkerModule = (source)=>{
|
|
|
109
128
|
});
|
|
110
129
|
const exports = new Set();
|
|
111
130
|
const imports = new Set();
|
|
131
|
+
let unsafeCommonJsLoaderUsage = false;
|
|
132
|
+
let unsafeDynamicImport = false;
|
|
112
133
|
for (const statement of ast.program.body){
|
|
113
134
|
collectEsmExports(statement, exports);
|
|
114
135
|
collectCommonJsExports(statement, exports);
|
|
115
136
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
137
|
+
traverse(ast, {
|
|
138
|
+
enter (modulePath) {
|
|
139
|
+
const node = modulePath.node;
|
|
140
|
+
if (('ImportExpression' === node.type || 'CallExpression' === node.type && isAstNode(node.callee) && 'Import' === node.callee.type) && void 0 === getStaticImport(modulePath)) unsafeDynamicImport = true;
|
|
141
|
+
if (modulePath.isReferencedIdentifier({
|
|
142
|
+
name: 'require'
|
|
143
|
+
}) && void 0 === modulePath.scope.getBinding('require')) {
|
|
144
|
+
const parentPath = modulePath.parentPath;
|
|
145
|
+
const isStaticRequireCall = parentPath?.isCallExpression() && 'callee' === modulePath.key && void 0 !== getStaticImport(parentPath);
|
|
146
|
+
const isAvailabilityCheck = parentPath?.isUnaryExpression({
|
|
147
|
+
operator: 'typeof'
|
|
148
|
+
});
|
|
149
|
+
if (!isStaticRequireCall && !isAvailabilityCheck) unsafeCommonJsLoaderUsage = true;
|
|
150
|
+
}
|
|
151
|
+
if ('Identifier' === node.type && isAmbientLoaderWrite(modulePath) && ('require' === node.name || 'module' === node.name) && void 0 === modulePath.scope.getBinding(node.name)) unsafeCommonJsLoaderUsage = true;
|
|
152
|
+
if (modulePath.isReferencedIdentifier({
|
|
153
|
+
name: 'module'
|
|
154
|
+
}) && void 0 === modulePath.scope.getBinding('module')) {
|
|
155
|
+
const parentPath = modulePath.parentPath;
|
|
156
|
+
const isExportsAccess = null !== parentPath && isModuleExports(parentPath.node);
|
|
157
|
+
const isStaticModuleRequireCall = null !== parentPath && isAmbientModuleRequire(parentPath.node, parentPath) && parentPath.parentPath?.isCallExpression() === true && 'callee' === parentPath.key && void 0 !== getStaticImport(parentPath.parentPath);
|
|
158
|
+
if (!isExportsAccess && !isStaticModuleRequireCall) unsafeCommonJsLoaderUsage = true;
|
|
159
|
+
}
|
|
160
|
+
if (isAmbientModuleRequire(node, modulePath)) {
|
|
161
|
+
const parentPath = modulePath.parentPath;
|
|
162
|
+
const isStaticRequireCall = parentPath?.isCallExpression() && 'callee' === modulePath.key && void 0 !== getStaticImport(parentPath);
|
|
163
|
+
if (!isStaticRequireCall) unsafeCommonJsLoaderUsage = true;
|
|
164
|
+
}
|
|
165
|
+
const specifier = getStaticImport(modulePath);
|
|
166
|
+
if (void 0 !== specifier) imports.add(specifier);
|
|
167
|
+
}
|
|
119
168
|
});
|
|
120
169
|
return {
|
|
121
170
|
exports,
|
|
122
|
-
imports
|
|
171
|
+
imports,
|
|
172
|
+
unsafeCommonJsLoaderUsage,
|
|
173
|
+
unsafeDynamicImport
|
|
123
174
|
};
|
|
124
175
|
};
|
|
125
176
|
const getPackageName = (specifier)=>specifier.startsWith('@') ? specifier.split('/').slice(0, 2).join('/') : specifier.split('/')[0];
|
|
@@ -170,7 +221,25 @@ const verifyWorkerModuleClosure = async (issues, entryPath, entrySource, contrac
|
|
|
170
221
|
return;
|
|
171
222
|
}
|
|
172
223
|
if (isEntry) entryAnalysis = analysis;
|
|
224
|
+
if (analysis.unsafeCommonJsLoaderUsage) addIssue(issues, {
|
|
225
|
+
code: 'invalid-worker-bundle',
|
|
226
|
+
message: 'Cloudflare worker bundles must use exactly one string-literal specifier in ambient CommonJS loader calls and must not pass or alias the loader.',
|
|
227
|
+
path: modulePath
|
|
228
|
+
});
|
|
229
|
+
if (analysis.unsafeDynamicImport) addIssue(issues, {
|
|
230
|
+
code: 'invalid-worker-bundle',
|
|
231
|
+
message: 'Cloudflare worker bundles must not contain non-static dynamic module imports.',
|
|
232
|
+
path: modulePath
|
|
233
|
+
});
|
|
173
234
|
for (const specifier of analysis.imports){
|
|
235
|
+
if (0 === specifier.length) {
|
|
236
|
+
addIssue(issues, {
|
|
237
|
+
code: 'invalid-worker-bundle',
|
|
238
|
+
message: 'Cloudflare worker bundle module specifiers must not be empty.',
|
|
239
|
+
path: modulePath
|
|
240
|
+
});
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
174
243
|
if (!specifier.startsWith('.') && !node_path.isAbsolute(specifier)) {
|
|
175
244
|
if (CLOUDFLARE_WORKER_NODE_BUILTIN_SPECIFIERS.has(specifier)) continue;
|
|
176
245
|
if (specifier.startsWith('node:')) {
|
|
@@ -219,14 +288,20 @@ const verifyWorkerBundleReferences = async (issues, worker, source, contract)=>{
|
|
|
219
288
|
path: worker.path
|
|
220
289
|
});
|
|
221
290
|
};
|
|
222
|
-
const verifyWorkerImport = async (issues, entryPath)=>{
|
|
291
|
+
const verifyWorkerImport = async (issues, entryPath, expectedManifest)=>{
|
|
223
292
|
try {
|
|
224
|
-
const
|
|
293
|
+
const workerModule = await import(`${pathToFileURL(entryPath).href}?t=${Date.now()}`);
|
|
294
|
+
const worker = workerModule.default;
|
|
225
295
|
if (!worker || 'function' != typeof worker.fetch) addIssue(issues, {
|
|
226
296
|
code: 'worker-import-failed',
|
|
227
297
|
message: 'Cloudflare server entry must default-export a Worker with fetch.',
|
|
228
298
|
path: entryPath
|
|
229
299
|
});
|
|
300
|
+
if (void 0 !== expectedManifest && !isDeepStrictEqual(workerModule.modernWorkerManifest, expectedManifest)) addIssue(issues, {
|
|
301
|
+
code: 'worker-import-failed',
|
|
302
|
+
message: 'Cloudflare server entry runtime manifest must exactly match modern-worker-manifest.json.',
|
|
303
|
+
path: entryPath
|
|
304
|
+
});
|
|
230
305
|
} catch (error) {
|
|
231
306
|
addIssue(issues, {
|
|
232
307
|
code: 'worker-import-failed',
|
package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.001-bootstrap-security.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const ASSETS_BINDING = 'ASSETS';
|
|
2
2
|
const MODERN_WORKER_MANIFEST = p_workerManifest;
|
|
3
|
+
export const modernWorkerManifest = MODERN_WORKER_MANIFEST;
|
|
3
4
|
const WORKER_MODULE_LOADERS = p_workerModuleLoaders;
|
|
4
5
|
const workerModulePromises = new Map();
|
|
5
6
|
const effectBffDispatcherPromises = new Map();
|
package/dist/esm/plugins/deploy/platforms/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workerd cannot initialize Module Federation's Node-oriented SSR data-fetch
|
|
3
|
+
* runtime. Cloudflare workers do not load native MF remotes, so retain the
|
|
4
|
+
* runtime-plugin contract without installing its server data-fetch hooks.
|
|
5
|
+
*/
|
|
6
|
+
export const injectDataFetchFunctionPlugin = () => ({
|
|
7
|
+
name: '@module-federation/inject-data-fetch-function-plugin',
|
|
8
|
+
setup() {},
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
export const mfSSRDevPlugin = () => ({
|
|
12
|
+
name: '@module-federation/modern-js-v3',
|
|
13
|
+
setup() {},
|
|
14
|
+
});
|
|
@@ -25,7 +25,7 @@ const initialize = ()=>({
|
|
|
25
25
|
api.modifyResolvedConfig(async (resolved)=>{
|
|
26
26
|
let appContext = api.getAppContext();
|
|
27
27
|
const userConfig = api.getConfig();
|
|
28
|
-
const port = await getServerPort(resolved);
|
|
28
|
+
const port = await getServerPort(resolved, appContext.command);
|
|
29
29
|
appContext = {
|
|
30
30
|
...appContext,
|
|
31
31
|
port,
|
|
@@ -60,9 +60,10 @@ function stabilizeConfig(resolve, config, keys) {
|
|
|
60
60
|
resolve[key] = config[key] || {};
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
|
-
async function getServerPort(config) {
|
|
63
|
+
async function getServerPort(config, contextCommand) {
|
|
64
64
|
const prodPort = Number(process.env.PORT) || config.server.port || 8080;
|
|
65
|
-
|
|
65
|
+
const isProgrammaticDev = 'dev' === contextCommand || 'start' === contextCommand;
|
|
66
|
+
if (isDev() && (isDevCommand() || isProgrammaticDev)) return getPort(Number(process.env.PORT) || prodPort);
|
|
66
67
|
return prodPort;
|
|
67
68
|
}
|
|
68
69
|
export default initialize;
|
|
@@ -17,7 +17,7 @@ const serverBuild = ()=>({
|
|
|
17
17
|
name: '@modern-js/server-build',
|
|
18
18
|
setup (api) {
|
|
19
19
|
api.onAfterBuild(async ()=>{
|
|
20
|
-
const { appDirectory, distDirectory, metaName } = api.getAppContext();
|
|
20
|
+
const { appDirectory, distDirectory, metaName, moduleType } = api.getAppContext();
|
|
21
21
|
if (!checkHasCache(appDirectory) && !checkHasConfig(appDirectory, metaName)) return;
|
|
22
22
|
const modernConfig = api.getNormalizedConfig();
|
|
23
23
|
const distDir = path.resolve(distDirectory);
|
|
@@ -37,7 +37,8 @@ const serverBuild = ()=>({
|
|
|
37
37
|
}, {
|
|
38
38
|
sourceDirs,
|
|
39
39
|
distDir,
|
|
40
|
-
tsconfigPath
|
|
40
|
+
tsconfigPath,
|
|
41
|
+
moduleType
|
|
41
42
|
});
|
|
42
43
|
});
|
|
43
44
|
}
|