@bleedingdev/modern-js-app-tools 3.5.0-ultramodern.1 → 3.5.0-ultramodern.100
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.js +0 -0
- package/dist/cjs/builder/generator/createBuilderProviderConfig.js +5 -1
- package/dist/cjs/builder/generator/getBuilderEnvironments.js +20 -16
- package/dist/cjs/builder/shared/builderPlugins/adapterPrecompress.js +13 -4
- package/dist/cjs/builder/shared/builderPlugins/adapterSSR.js +14 -11
- package/dist/cjs/builder/shared/bundlerPlugins/CssExtractRuntimePlugin.js +72 -0
- package/dist/cjs/builder/shared/bundlerPlugins/RouterPlugin.js +28 -11
- package/dist/cjs/builder/shared/bundlerPlugins/index.js +13 -6
- package/dist/cjs/builder/shared/lazyCompilation.js +2 -10
- package/dist/cjs/commands/build.js +2 -1
- package/dist/cjs/commands/deploy.js +4 -2
- package/dist/cjs/commands/index.js +0 -8
- package/dist/cjs/config/build-environment.js +268 -0
- package/dist/cjs/config/default.js +2 -0
- package/dist/cjs/config/index.js +11 -4
- package/dist/cjs/config/public.js +46 -0
- package/dist/cjs/index.js +93 -75
- package/dist/cjs/plugins/analyze/getServerRoutes.js +19 -0
- package/dist/cjs/plugins/analyze/index.js +22 -14
- package/dist/cjs/plugins/analyze/utils.js +3 -2
- package/dist/cjs/plugins/backend-federation/codegen.js +255 -0
- package/dist/cjs/plugins/backend-federation/config.js +204 -0
- package/dist/cjs/plugins/backend-federation/emit.js +148 -0
- package/dist/cjs/plugins/backendFederationBuild.js +53 -0
- package/dist/cjs/plugins/deploy/index.js +4 -4
- package/dist/cjs/plugins/deploy/platforms/cloudflare/artifacts.js +127 -0
- package/dist/cjs/plugins/deploy/platforms/cloudflare/constants.js +141 -0
- package/dist/cjs/plugins/deploy/platforms/cloudflare/delivery-unit.js +139 -0
- package/dist/cjs/plugins/deploy/platforms/cloudflare/i18n-worker.js +135 -0
- package/dist/cjs/plugins/deploy/platforms/cloudflare/index.js +150 -0
- package/dist/cjs/plugins/deploy/platforms/cloudflare/security-policies.js +205 -0
- package/dist/cjs/plugins/deploy/platforms/cloudflare/types.js +18 -0
- package/dist/cjs/plugins/deploy/platforms/cloudflare/utils.js +66 -0
- package/dist/cjs/plugins/deploy/platforms/cloudflare/worker-manifest.js +208 -0
- package/dist/cjs/plugins/deploy/platforms/cloudflare/wrangler-config.js +204 -0
- package/dist/cjs/plugins/deploy/platforms/cloudflare-output-contract.js +108 -0
- package/dist/cjs/plugins/deploy/platforms/cloudflare-output-plan.js +93 -0
- package/dist/cjs/plugins/deploy/platforms/cloudflare-output-verifier/identity.js +83 -0
- package/dist/cjs/plugins/deploy/platforms/cloudflare-output-verifier/index.js +188 -0
- package/dist/cjs/{baseline.js → plugins/deploy/platforms/cloudflare-output-verifier/issues.js} +19 -10
- package/dist/cjs/plugins/deploy/platforms/cloudflare-output-verifier/manifest.js +89 -0
- package/dist/cjs/plugins/deploy/platforms/cloudflare-output-verifier/mutation-policy.js +151 -0
- package/dist/cjs/plugins/deploy/platforms/cloudflare-output-verifier/worker-bundles.js +302 -0
- package/dist/cjs/plugins/deploy/platforms/node.js +20 -2
- package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.001-bootstrap-security.mjs +250 -0
- package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.002-assets-routes.mjs +191 -0
- package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.003-i18n-locales.mjs +514 -0
- package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.004-rendering-css.mjs +1012 -0
- package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.005-worker-dispatch.mjs +363 -0
- package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.006-fetch-handler.mjs +93 -0
- package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-worker-fs-promises.mjs +8 -4
- package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-worker-loadable-server.mjs +251 -155
- package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-worker-path.mjs +78 -39
- package/dist/cjs/plugins/deploy/platforms/templates/netlify-entry.cjs +62 -41
- package/dist/cjs/plugins/deploy/platforms/templates/netlify-entry.mjs +63 -41
- package/dist/cjs/plugins/deploy/platforms/templates/node-entry.cjs +52 -35
- package/dist/cjs/plugins/deploy/platforms/templates/node-entry.mjs +53 -35
- package/dist/cjs/plugins/deploy/platforms/templates/vercel-entry.cjs +61 -41
- package/dist/cjs/plugins/deploy/platforms/templates/vercel-entry.mjs +61 -40
- package/dist/cjs/plugins/deploy/utils/npmAliases.js +226 -0
- package/dist/cjs/plugins/initialize/index.js +4 -3
- package/dist/cjs/plugins/serverBuild.js +3 -2
- package/dist/cjs/plugins/ultramodernReleaseEnvelope.js +100 -0
- package/dist/cjs/presetUltramodern.js +33 -2
- package/dist/cjs/ultramodern-release-envelope/canonical.js +68 -0
- package/dist/cjs/ultramodern-release-envelope/framework-output.js +597 -0
- package/dist/cjs/ultramodern-release-envelope/index.js +399 -0
- package/dist/cjs/ultramodern-release-envelope/types.js +51 -0
- package/dist/cjs/ultramodern-release-identity.js +110 -0
- package/dist/esm/builder/generator/createBuilderProviderConfig.mjs +5 -1
- package/dist/esm/builder/generator/getBuilderEnvironments.mjs +19 -15
- package/dist/esm/builder/shared/builderPlugins/adapterPrecompress.mjs +13 -4
- package/dist/esm/builder/shared/builderPlugins/adapterSSR.mjs +15 -12
- package/dist/esm/builder/shared/bundlerPlugins/CssExtractRuntimePlugin.mjs +30 -0
- package/dist/esm/builder/shared/bundlerPlugins/RouterPlugin.mjs +24 -10
- package/dist/esm/builder/shared/bundlerPlugins/index.mjs +1 -0
- package/dist/esm/builder/shared/lazyCompilation.mjs +1 -3
- package/dist/esm/commands/build.mjs +2 -1
- package/dist/esm/commands/deploy.mjs +4 -2
- package/dist/esm/commands/index.mjs +0 -5
- package/dist/esm/config/build-environment.mjs +224 -0
- package/dist/esm/config/default.mjs +2 -0
- package/dist/esm/config/index.mjs +1 -0
- package/dist/esm/config/public.mjs +1 -0
- package/dist/esm/index.mjs +20 -5
- package/dist/esm/plugins/analyze/getHtmlTemplate.mjs +2 -2
- package/dist/esm/plugins/analyze/getServerRoutes.mjs +17 -1
- package/dist/esm/plugins/analyze/index.mjs +22 -14
- package/dist/esm/plugins/analyze/isDefaultExportFunction.mjs +2 -2
- package/dist/esm/plugins/analyze/utils.mjs +3 -2
- package/dist/esm/plugins/backend-federation/codegen.mjs +204 -0
- package/dist/esm/plugins/backend-federation/config.mjs +128 -0
- package/dist/esm/plugins/backend-federation/emit.mjs +97 -0
- package/dist/esm/plugins/backendFederationBuild.mjs +1 -0
- package/dist/esm/plugins/deploy/index.mjs +1 -1
- package/dist/esm/plugins/deploy/platforms/cloudflare/artifacts.mjs +64 -0
- package/dist/esm/plugins/deploy/platforms/cloudflare/constants.mjs +34 -0
- package/dist/esm/plugins/deploy/platforms/cloudflare/delivery-unit.mjs +88 -0
- package/dist/esm/plugins/deploy/platforms/cloudflare/i18n-worker.mjs +97 -0
- package/dist/esm/plugins/deploy/platforms/cloudflare/index.mjs +102 -0
- package/dist/esm/plugins/deploy/platforms/cloudflare/security-policies.mjs +167 -0
- package/dist/esm/plugins/deploy/platforms/cloudflare/types.mjs +0 -0
- package/dist/esm/plugins/deploy/platforms/cloudflare/utils.mjs +12 -0
- package/dist/esm/plugins/deploy/platforms/cloudflare/worker-manifest.mjs +148 -0
- package/dist/esm/plugins/deploy/platforms/cloudflare/wrangler-config.mjs +150 -0
- package/dist/esm/plugins/deploy/platforms/cloudflare-output-contract.mjs +31 -0
- package/dist/esm/plugins/deploy/platforms/cloudflare-output-plan.mjs +45 -0
- package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/identity.mjs +45 -0
- package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/index.mjs +133 -0
- package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/issues.mjs +10 -0
- package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/manifest.mjs +51 -0
- package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/mutation-policy.mjs +99 -0
- package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/worker-bundles.mjs +238 -0
- package/dist/esm/plugins/deploy/platforms/node.mjs +20 -2
- package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.001-bootstrap-security.mjs +250 -0
- package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.002-assets-routes.mjs +191 -0
- package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.003-i18n-locales.mjs +514 -0
- package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.004-rendering-css.mjs +1012 -0
- package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.005-worker-dispatch.mjs +363 -0
- package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.006-fetch-handler.mjs +93 -0
- package/dist/esm/plugins/deploy/platforms/templates/cloudflare-worker-fs-promises.mjs +8 -4
- package/dist/esm/plugins/deploy/platforms/templates/cloudflare-worker-loadable-server.mjs +251 -155
- package/dist/esm/plugins/deploy/platforms/templates/cloudflare-worker-path.mjs +78 -39
- package/dist/esm/plugins/deploy/platforms/templates/netlify-entry.cjs +62 -41
- package/dist/esm/plugins/deploy/platforms/templates/netlify-entry.mjs +63 -41
- package/dist/esm/plugins/deploy/platforms/templates/node-entry.cjs +52 -35
- package/dist/esm/plugins/deploy/platforms/templates/node-entry.mjs +53 -35
- package/dist/esm/plugins/deploy/platforms/templates/vercel-entry.cjs +61 -41
- package/dist/esm/plugins/deploy/platforms/templates/vercel-entry.mjs +61 -40
- package/dist/esm/plugins/deploy/utils/npmAliases.mjs +174 -0
- package/dist/esm/plugins/initialize/index.mjs +4 -3
- package/dist/esm/plugins/serverBuild.mjs +3 -2
- package/dist/esm/plugins/ultramodernReleaseEnvelope.mjs +52 -0
- package/dist/esm/presetUltramodern.mjs +33 -2
- package/dist/esm/ultramodern-release-envelope/canonical.mjs +21 -0
- package/dist/esm/ultramodern-release-envelope/framework-output.mjs +524 -0
- package/dist/esm/ultramodern-release-envelope/index.mjs +335 -0
- package/dist/esm/ultramodern-release-envelope/types.mjs +7 -0
- package/dist/esm/ultramodern-release-identity.mjs +66 -0
- package/dist/esm-node/builder/generator/createBuilderProviderConfig.mjs +5 -1
- package/dist/esm-node/builder/generator/getBuilderEnvironments.mjs +21 -17
- package/dist/esm-node/builder/shared/builderPlugins/adapterBasic.mjs +2 -2
- package/dist/esm-node/builder/shared/builderPlugins/adapterPrecompress.mjs +13 -4
- package/dist/esm-node/builder/shared/builderPlugins/adapterSSR.mjs +15 -12
- package/dist/esm-node/builder/shared/bundlerPlugins/CssExtractRuntimePlugin.mjs +31 -0
- package/dist/esm-node/builder/shared/bundlerPlugins/RouterPlugin.mjs +24 -10
- package/dist/esm-node/builder/shared/bundlerPlugins/index.mjs +1 -0
- package/dist/esm-node/builder/shared/lazyCompilation.mjs +1 -3
- 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 -5
- package/dist/esm-node/config/build-environment.mjs +225 -0
- package/dist/esm-node/config/default.mjs +2 -0
- package/dist/esm-node/config/index.mjs +1 -0
- package/dist/esm-node/config/public.mjs +2 -0
- package/dist/esm-node/index.mjs +20 -5
- package/dist/esm-node/plugins/analyze/getHtmlTemplate.mjs +2 -2
- package/dist/esm-node/plugins/analyze/getServerRoutes.mjs +17 -1
- package/dist/esm-node/plugins/analyze/index.mjs +22 -14
- package/dist/esm-node/plugins/analyze/isDefaultExportFunction.mjs +2 -2
- package/dist/esm-node/plugins/analyze/utils.mjs +3 -2
- package/dist/esm-node/plugins/backend-federation/codegen.mjs +205 -0
- package/dist/esm-node/plugins/backend-federation/config.mjs +129 -0
- package/dist/esm-node/plugins/backend-federation/emit.mjs +98 -0
- package/dist/esm-node/plugins/backendFederationBuild.mjs +2 -0
- package/dist/esm-node/plugins/deploy/index.mjs +1 -1
- package/dist/esm-node/plugins/deploy/platforms/cloudflare/artifacts.mjs +65 -0
- package/dist/esm-node/plugins/deploy/platforms/cloudflare/constants.mjs +35 -0
- package/dist/esm-node/plugins/deploy/platforms/cloudflare/delivery-unit.mjs +89 -0
- package/dist/esm-node/plugins/deploy/platforms/cloudflare/i18n-worker.mjs +98 -0
- package/dist/esm-node/plugins/deploy/platforms/cloudflare/index.mjs +103 -0
- package/dist/esm-node/plugins/deploy/platforms/cloudflare/security-policies.mjs +168 -0
- package/dist/esm-node/plugins/deploy/platforms/cloudflare/types.mjs +1 -0
- package/dist/esm-node/plugins/deploy/platforms/cloudflare/utils.mjs +13 -0
- package/dist/esm-node/plugins/deploy/platforms/cloudflare/worker-manifest.mjs +149 -0
- package/dist/esm-node/plugins/deploy/platforms/cloudflare/wrangler-config.mjs +151 -0
- package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-contract.mjs +32 -0
- package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-plan.mjs +46 -0
- package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/identity.mjs +46 -0
- package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/index.mjs +134 -0
- package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/issues.mjs +11 -0
- package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/manifest.mjs +52 -0
- package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/mutation-policy.mjs +100 -0
- package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/worker-bundles.mjs +239 -0
- package/dist/esm-node/plugins/deploy/platforms/node.mjs +20 -2
- package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.001-bootstrap-security.mjs +250 -0
- package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.002-assets-routes.mjs +191 -0
- package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.003-i18n-locales.mjs +514 -0
- package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.004-rendering-css.mjs +1012 -0
- package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.005-worker-dispatch.mjs +363 -0
- package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.006-fetch-handler.mjs +93 -0
- package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-worker-fs-promises.mjs +8 -4
- package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-worker-loadable-server.mjs +251 -155
- package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-worker-path.mjs +78 -39
- package/dist/esm-node/plugins/deploy/platforms/templates/netlify-entry.cjs +62 -41
- package/dist/esm-node/plugins/deploy/platforms/templates/netlify-entry.mjs +63 -41
- package/dist/esm-node/plugins/deploy/platforms/templates/node-entry.cjs +52 -35
- package/dist/esm-node/plugins/deploy/platforms/templates/node-entry.mjs +53 -35
- package/dist/esm-node/plugins/deploy/platforms/templates/vercel-entry.cjs +61 -41
- package/dist/esm-node/plugins/deploy/platforms/templates/vercel-entry.mjs +61 -40
- package/dist/esm-node/plugins/deploy/utils/index.mjs +5 -5
- package/dist/esm-node/plugins/deploy/utils/npmAliases.mjs +175 -0
- package/dist/esm-node/plugins/initialize/index.mjs +4 -3
- package/dist/esm-node/plugins/serverBuild.mjs +3 -2
- package/dist/esm-node/plugins/ultramodernReleaseEnvelope.mjs +53 -0
- package/dist/esm-node/presetUltramodern.mjs +33 -2
- package/dist/esm-node/ultramodern-release-envelope/canonical.mjs +22 -0
- package/dist/esm-node/ultramodern-release-envelope/framework-output.mjs +525 -0
- package/dist/esm-node/ultramodern-release-envelope/index.mjs +336 -0
- package/dist/esm-node/ultramodern-release-envelope/types.mjs +8 -0
- package/dist/esm-node/ultramodern-release-identity.mjs +67 -0
- package/dist/types/builder/generator/createCopyPattern.d.ts +7 -5
- package/dist/types/builder/shared/bundlerPlugins/CssExtractRuntimePlugin.d.ts +6 -0
- package/dist/types/builder/shared/bundlerPlugins/RouterPlugin.d.ts +1 -0
- package/dist/types/builder/shared/bundlerPlugins/index.d.ts +1 -0
- package/dist/types/builder/shared/lazyCompilation.d.ts +2 -4
- package/dist/types/commands/deploy.d.ts +2 -1
- package/dist/types/commands/index.d.ts +0 -1
- package/dist/types/config/build-environment.d.ts +22 -0
- package/dist/types/config/index.d.ts +1 -0
- package/dist/types/config/public.d.ts +2 -0
- package/dist/types/index.d.ts +4 -3
- package/dist/types/plugins/analyze/getServerRoutes.d.ts +1 -0
- package/dist/types/plugins/analyze/utils.d.ts +1 -1
- package/dist/types/plugins/backend-federation/codegen.d.ts +83 -0
- package/dist/types/plugins/backend-federation/config.d.ts +103 -0
- package/dist/types/plugins/backend-federation/emit.d.ts +13 -0
- package/dist/types/plugins/backendFederationBuild.d.ts +2 -0
- package/dist/types/plugins/deploy/platforms/cloudflare/artifacts.d.ts +15 -0
- package/dist/types/plugins/deploy/platforms/cloudflare/constants.d.ts +24 -0
- package/dist/types/plugins/deploy/platforms/cloudflare/delivery-unit.d.ts +23 -0
- package/dist/types/plugins/deploy/platforms/cloudflare/i18n-worker.d.ts +22 -0
- package/dist/types/plugins/deploy/platforms/{cloudflare.d.ts → cloudflare/index.d.ts} +1 -1
- package/dist/types/plugins/deploy/platforms/cloudflare/security-policies.d.ts +51 -0
- package/dist/types/plugins/deploy/platforms/cloudflare/types.d.ts +5 -0
- package/dist/types/plugins/deploy/platforms/cloudflare/utils.d.ts +6 -0
- package/dist/types/plugins/deploy/platforms/cloudflare/worker-manifest.d.ts +122 -0
- package/dist/types/plugins/deploy/platforms/cloudflare/wrangler-config.d.ts +46 -0
- package/dist/types/plugins/deploy/platforms/cloudflare-output-contract.d.ts +14 -0
- package/dist/types/plugins/deploy/platforms/cloudflare-output-plan.d.ts +34 -0
- package/dist/types/plugins/deploy/platforms/cloudflare-output-verifier/identity.d.ts +4 -0
- package/dist/types/plugins/deploy/platforms/cloudflare-output-verifier/index.d.ts +18 -0
- package/dist/types/plugins/deploy/platforms/cloudflare-output-verifier/issues.d.ts +14 -0
- package/dist/types/plugins/deploy/platforms/cloudflare-output-verifier/manifest.d.ts +2 -0
- package/dist/types/plugins/deploy/platforms/cloudflare-output-verifier/mutation-policy.d.ts +14 -0
- package/dist/types/plugins/deploy/platforms/cloudflare-output-verifier/worker-bundles.d.ts +20 -0
- package/dist/types/plugins/deploy/platforms/templates/cloudflare-entry.001-bootstrap-security.d.mts +1 -0
- package/dist/types/plugins/deploy/platforms/templates/cloudflare-entry.002-assets-routes.d.mts +1 -0
- package/dist/types/plugins/deploy/platforms/templates/cloudflare-entry.003-i18n-locales.d.mts +1 -0
- package/dist/types/plugins/deploy/platforms/templates/cloudflare-entry.004-rendering-css.d.mts +1 -0
- package/dist/types/plugins/deploy/platforms/templates/cloudflare-entry.005-worker-dispatch.d.mts +1 -0
- package/dist/types/plugins/deploy/utils/npmAliases.d.ts +14 -0
- package/dist/types/plugins/ultramodernReleaseEnvelope.d.ts +3 -0
- package/dist/types/presetUltramodern.d.ts +10 -0
- package/dist/types/run/index.d.ts +1 -1
- package/dist/types/types/config/cloudflareDeploy.d.ts +41 -0
- package/dist/types/types/config/deploy.d.ts +15 -2
- package/dist/types/types/config/dev.d.ts +6 -0
- package/dist/types/ultramodern-release-envelope/canonical.d.ts +5 -0
- package/dist/types/ultramodern-release-envelope/framework-output.d.ts +31 -0
- package/dist/types/ultramodern-release-envelope/index.d.ts +6 -0
- package/dist/types/ultramodern-release-envelope/types.d.ts +62 -0
- package/dist/types/ultramodern-release-identity.d.ts +16 -0
- package/docs/_nav.json +36 -0
- package/docs/apis/_meta.json +13 -0
- package/docs/apis/app/commands.mdx +205 -0
- package/docs/apis/app/hooks/_meta.json +28 -0
- package/docs/apis/app/hooks/api/lambda.mdx +13 -0
- package/docs/apis/app/hooks/config/_meta.json +1 -0
- package/docs/apis/app/hooks/config/favicon.mdx +29 -0
- package/docs/apis/app/hooks/config/html.mdx +9 -0
- package/docs/apis/app/hooks/config/icon.mdx +29 -0
- package/docs/apis/app/hooks/config/mock.mdx +10 -0
- package/docs/apis/app/hooks/config/public.mdx +30 -0
- package/docs/apis/app/hooks/config/upload.mdx +54 -0
- package/docs/apis/app/hooks/modern-config.mdx +9 -0
- package/docs/apis/app/hooks/server/server.mdx +10 -0
- package/docs/apis/app/hooks/shared.mdx +7 -0
- package/docs/apis/app/hooks/src/app.mdx +30 -0
- package/docs/apis/app/hooks/src/entry.mdx +39 -0
- package/docs/apis/app/hooks/src/entry.server.mdx +56 -0
- package/docs/apis/app/hooks/src/modern.runtime.mdx +9 -0
- package/docs/apis/app/hooks/src/routes.mdx +90 -0
- package/docs/apis/app/hooks/src/server.mdx +7 -0
- package/docs/apis/app/runtime/_meta.json +32 -0
- package/docs/apis/app/runtime/bff/use-backend-context.mdx +30 -0
- package/docs/apis/app/runtime/core/create-root.mdx +22 -0
- package/docs/apis/app/runtime/core/render.mdx +42 -0
- package/docs/apis/app/runtime/core/runtime-context.mdx +160 -0
- package/docs/apis/app/runtime/router/router.mdx +288 -0
- package/docs/apis/app/runtime/ssr/no-ssr.mdx +38 -0
- package/docs/apis/app/runtime/ssr/renderStreaming.mdx +71 -0
- package/docs/apis/app/runtime/ssr/renderString.mdx +64 -0
- package/docs/apis/app/runtime/ssr/requestHandler.mdx +48 -0
- package/docs/apis/app/runtime/utility/css-in-js.mdx +44 -0
- package/docs/apis/app/runtime/utility/head.mdx +38 -0
- package/docs/apis/app/runtime/utility/loadable.mdx +85 -0
- package/docs/components/auto-upgrade.mdx +0 -0
- package/docs/components/bff-upload.mdx +97 -0
- package/docs/components/build-output.mdx +45 -0
- package/docs/components/bundler.mdx +3 -0
- package/docs/components/convention-routing-motivation.mdx +0 -0
- package/docs/components/debug-app.mdx +15 -0
- package/docs/components/default-browserslist.mdx +7 -0
- package/docs/components/deploy-command.mdx +14 -0
- package/docs/components/deploy.mdx +1 -0
- package/docs/components/enable-bff-caution.mdx +3 -0
- package/docs/components/enable-bff.mdx +56 -0
- package/docs/components/enable-ssg.mdx +49 -0
- package/docs/components/entry-mode.mdx +0 -0
- package/docs/components/entry-scan-logic.mdx +7 -0
- package/docs/components/extend-bff-function.mdx +3 -0
- package/docs/components/hono.mdx +120 -0
- package/docs/components/init-app.mdx +93 -0
- package/docs/components/init-rspack-app.mdx +5 -0
- package/docs/components/internal-logger.mdx +25 -0
- package/docs/components/internal-metrics.mdx +20 -0
- package/docs/components/international/custom-instance-code.mdx +16 -0
- package/docs/components/international/init-options-desc.mdx +1 -0
- package/docs/components/international/install-command.mdx +10 -0
- package/docs/components/international/instance-code.mdx +16 -0
- package/docs/components/international/introduce.mdx +5 -0
- package/docs/components/international/platform-support.mdx +0 -0
- package/docs/components/language-config.mdx +9 -0
- package/docs/components/micro-frontend.mdx +6 -0
- package/docs/components/micro-master-manifest-config.mdx +15 -0
- package/docs/components/micro-runtime-config.mdx +17 -0
- package/docs/components/module-federation.mdx +7 -0
- package/docs/components/new-entry-tooltip.mdx +0 -0
- package/docs/components/nodeVersion.mdx +28 -0
- package/docs/components/other-plugins.mdx +0 -0
- package/docs/components/output-asset-prefix-extend.mdx +0 -0
- package/docs/components/output-distpath-warning.mdx +0 -0
- package/docs/components/output-polyfill-extend.mdx +1 -0
- package/docs/components/prerequisites.mdx +18 -0
- package/docs/components/release-note.mdx +1 -0
- package/docs/components/routes-practice.mdx +0 -0
- package/docs/components/rsbuild-config-tooltip.mdx +5 -0
- package/docs/components/rsbuild.mdx +3 -0
- package/docs/components/rsc-deploy-tip.mdx +1 -0
- package/docs/components/rspack.mdx +3 -0
- package/docs/components/rspackTip.mdx +7 -0
- package/docs/components/runtime-cli-config.mdx +0 -0
- package/docs/components/serve-command.mdx +22 -0
- package/docs/components/ssr-monitor.mdx +3 -0
- package/docs/components/stream-ssr-performance.mdx +0 -0
- package/docs/components/swc.mdx +3 -0
- package/docs/components/tech-stack-node-framework.mdx +1 -0
- package/docs/components/turtorials-example-list.mdx +2 -0
- package/docs/components/ua-polyfill.mdx +44 -0
- package/docs/components/upgrade-browserslist.mdx +0 -0
- package/docs/components/upgrade-config-deploy.mdx +0 -0
- package/docs/components/upgrade-faq.mdx +0 -0
- package/docs/configure/_meta.json +78 -0
- package/docs/configure/app/bff/cross-project.mdx +24 -0
- package/docs/configure/app/bff/effect.mdx +319 -0
- package/docs/configure/app/bff/prefix.mdx +33 -0
- package/docs/configure/app/bff/runtime-framework.mdx +30 -0
- package/docs/configure/app/builder-plugins.mdx +70 -0
- package/docs/configure/app/dev/asset-prefix.mdx +18 -0
- package/docs/configure/app/dev/before-start-url.mdx +21 -0
- package/docs/configure/app/dev/client.mdx +45 -0
- package/docs/configure/app/dev/hmr.mdx +14 -0
- package/docs/configure/app/dev/host.mdx +22 -0
- package/docs/configure/app/dev/https.mdx +81 -0
- package/docs/configure/app/dev/lazy-compilation.mdx +45 -0
- package/docs/configure/app/dev/live-reload.mdx +14 -0
- package/docs/configure/app/dev/mock-dir.mdx +35 -0
- package/docs/configure/app/dev/progress-bar.mdx +23 -0
- package/docs/configure/app/dev/server.mdx +128 -0
- package/docs/configure/app/dev/setup-middlewares.mdx +36 -0
- package/docs/configure/app/dev/start-url.mdx +53 -0
- package/docs/configure/app/dev/watch-files.mdx +31 -0
- package/docs/configure/app/dev/write-to-disk.mdx +14 -0
- package/docs/configure/app/experiments/source-build.mdx +33 -0
- package/docs/configure/app/html/app-icon.mdx +32 -0
- package/docs/configure/app/html/crossorigin.mdx +14 -0
- package/docs/configure/app/html/favicon.mdx +20 -0
- package/docs/configure/app/html/inject.mdx +14 -0
- package/docs/configure/app/html/meta.mdx +28 -0
- package/docs/configure/app/html/mount-id.mdx +14 -0
- package/docs/configure/app/html/output-structure.mdx +14 -0
- package/docs/configure/app/html/script-loading.mdx +14 -0
- package/docs/configure/app/html/tags.mdx +19 -0
- package/docs/configure/app/html/template-parameters.mdx +37 -0
- package/docs/configure/app/html/template.mdx +14 -0
- package/docs/configure/app/html/title.mdx +22 -0
- package/docs/configure/app/output/asset-prefix.mdx +18 -0
- package/docs/configure/app/output/assets-retry.mdx +81 -0
- package/docs/configure/app/output/charset.mdx +14 -0
- package/docs/configure/app/output/clean-dist-path.mdx +20 -0
- package/docs/configure/app/output/convert-to-rem.mdx +83 -0
- package/docs/configure/app/output/copy.mdx +14 -0
- package/docs/configure/app/output/css-modules.mdx +52 -0
- package/docs/configure/app/output/data-uri-limit.mdx +30 -0
- package/docs/configure/app/output/disable-css-module-extension.mdx +59 -0
- package/docs/configure/app/output/disable-inline-runtime-chunk.mdx +45 -0
- package/docs/configure/app/output/disable-svgr.mdx +22 -0
- package/docs/configure/app/output/disable-ts-checker.mdx +53 -0
- package/docs/configure/app/output/dist-path.mdx +51 -0
- package/docs/configure/app/output/enable-asset-manifest.mdx +40 -0
- package/docs/configure/app/output/enable-css-module-tsdeclaration.mdx +32 -0
- package/docs/configure/app/output/enable-inline-route-manifests.mdx +20 -0
- package/docs/configure/app/output/externals.mdx +24 -0
- package/docs/configure/app/output/filename-hash.mdx +14 -0
- package/docs/configure/app/output/filename.mdx +59 -0
- package/docs/configure/app/output/inject-styles.mdx +14 -0
- package/docs/configure/app/output/inline-scripts.mdx +33 -0
- package/docs/configure/app/output/inline-styles.mdx +33 -0
- package/docs/configure/app/output/legal-comments.mdx +22 -0
- package/docs/configure/app/output/minify.mdx +26 -0
- package/docs/configure/app/output/override-browserslist.mdx +26 -0
- package/docs/configure/app/output/polyfill.mdx +18 -0
- package/docs/configure/app/output/source-map.mdx +34 -0
- package/docs/configure/app/output/split-route-chunks.mdx +20 -0
- package/docs/configure/app/output/ssg.mdx +85 -0
- package/docs/configure/app/output/ssgByEntries.mdx +93 -0
- package/docs/configure/app/output/svg-default-export.mdx +34 -0
- package/docs/configure/app/output/temp-dir.mdx +24 -0
- package/docs/configure/app/performance/build-cache.mdx +48 -0
- package/docs/configure/app/performance/chunk-split.mdx +44 -0
- package/docs/configure/app/performance/dns-prefetch.mdx +19 -0
- package/docs/configure/app/performance/preconnect.mdx +20 -0
- package/docs/configure/app/performance/prefetch.mdx +25 -0
- package/docs/configure/app/performance/preload.mdx +27 -0
- package/docs/configure/app/performance/print-file-size.mdx +44 -0
- package/docs/configure/app/performance/profile.mdx +14 -0
- package/docs/configure/app/performance/remove-console.mdx +14 -0
- package/docs/configure/app/performance/remove-moment-locale.mdx +14 -0
- package/docs/configure/app/performance/rsdoctor.mdx +42 -0
- package/docs/configure/app/plugins.mdx +59 -0
- package/docs/configure/app/resolve/alias-strategy.mdx +14 -0
- package/docs/configure/app/resolve/alias.mdx +13 -0
- package/docs/configure/app/resolve/condition-names.mdx +18 -0
- package/docs/configure/app/resolve/dedupe.mdx +13 -0
- package/docs/configure/app/resolve/extensions.mdx +18 -0
- package/docs/configure/app/runtime/0-intro.mdx +61 -0
- package/docs/configure/app/runtime/plugins.mdx +58 -0
- package/docs/configure/app/runtime/router.mdx +39 -0
- package/docs/configure/app/security/check-syntax.mdx +73 -0
- package/docs/configure/app/security/nonce.mdx +19 -0
- package/docs/configure/app/security/sri.mdx +24 -0
- package/docs/configure/app/server/base-url.mdx +30 -0
- package/docs/configure/app/server/port.mdx +22 -0
- package/docs/configure/app/server/public-routes.mdx +26 -0
- package/docs/configure/app/server/routes.mdx +90 -0
- package/docs/configure/app/server/rsc.mdx +30 -0
- package/docs/configure/app/server/ssr-by-entries.mdx +29 -0
- package/docs/configure/app/server/ssr.mdx +85 -0
- package/docs/configure/app/server/tsconfig-path.mdx +63 -0
- package/docs/configure/app/source/alias-strategy.mdx +18 -0
- package/docs/configure/app/source/alias.mdx +27 -0
- package/docs/configure/app/source/config-dir.mdx +24 -0
- package/docs/configure/app/source/decorators.mdx +29 -0
- package/docs/configure/app/source/define.mdx +20 -0
- package/docs/configure/app/source/disable-default-entries.mdx +32 -0
- package/docs/configure/app/source/enable-async-entry.mdx +54 -0
- package/docs/configure/app/source/enable-async-pre-entry.mdx +30 -0
- package/docs/configure/app/source/entries-dir.mdx +39 -0
- package/docs/configure/app/source/entries.mdx +183 -0
- package/docs/configure/app/source/exclude.mdx +14 -0
- package/docs/configure/app/source/global-vars.mdx +110 -0
- package/docs/configure/app/source/include.mdx +40 -0
- package/docs/configure/app/source/main-entry-name.mdx +28 -0
- package/docs/configure/app/source/pre-entry.mdx +14 -0
- package/docs/configure/app/source/react-compiler.mdx +72 -0
- package/docs/configure/app/source/transform-import.mdx +31 -0
- package/docs/configure/app/split-chunks.mdx +17 -0
- package/docs/configure/app/tools/autoprefixer.mdx +48 -0
- package/docs/configure/app/tools/bundler-chain.mdx +30 -0
- package/docs/configure/app/tools/css-extract.mdx +37 -0
- package/docs/configure/app/tools/css-loader.mdx +21 -0
- package/docs/configure/app/tools/dev-server.mdx +117 -0
- package/docs/configure/app/tools/html-plugin.mdx +45 -0
- package/docs/configure/app/tools/less.mdx +85 -0
- package/docs/configure/app/tools/lightningcss-loader.mdx +39 -0
- package/docs/configure/app/tools/minify-css.mdx +57 -0
- package/docs/configure/app/tools/postcss.mdx +38 -0
- package/docs/configure/app/tools/rspack.mdx +14 -0
- package/docs/configure/app/tools/sass.mdx +82 -0
- package/docs/configure/app/tools/style-loader.mdx +14 -0
- package/docs/configure/app/tools/swc.mdx +69 -0
- package/docs/configure/app/tools/ts-checker.mdx +103 -0
- package/docs/configure/app/usage.mdx +276 -0
- package/docs/guides/_meta.json +37 -0
- package/docs/guides/advanced-features/_meta.json +32 -0
- package/docs/guides/advanced-features/bff/_meta.json +10 -0
- package/docs/guides/advanced-features/bff/cross-project.mdx +110 -0
- package/docs/guides/advanced-features/bff/data-platform.mdx +120 -0
- package/docs/guides/advanced-features/bff/extend-server.mdx +120 -0
- package/docs/guides/advanced-features/bff/frameworks.mdx +131 -0
- package/docs/guides/advanced-features/bff/function.mdx +265 -0
- package/docs/guides/advanced-features/bff/operators.mdx +629 -0
- package/docs/guides/advanced-features/bff/sdk.mdx +116 -0
- package/docs/guides/advanced-features/bff/upload.mdx +7 -0
- package/docs/guides/advanced-features/bff.mdx +22 -0
- package/docs/guides/advanced-features/build-performance.mdx +134 -0
- package/docs/guides/advanced-features/compatibility.mdx +81 -0
- package/docs/guides/advanced-features/international/_meta.json +10 -0
- package/docs/guides/advanced-features/international/advanced.mdx +132 -0
- package/docs/guides/advanced-features/international/api.mdx +271 -0
- package/docs/guides/advanced-features/international/best-practices.mdx +290 -0
- package/docs/guides/advanced-features/international/configuration.mdx +222 -0
- package/docs/guides/advanced-features/international/locale-detection.mdx +130 -0
- package/docs/guides/advanced-features/international/quick-start.mdx +112 -0
- package/docs/guides/advanced-features/international/resource-loading.mdx +158 -0
- package/docs/guides/advanced-features/international/routing.mdx +177 -0
- package/docs/guides/advanced-features/international.mdx +29 -0
- package/docs/guides/advanced-features/low-level.mdx +50 -0
- package/docs/guides/advanced-features/page-performance/_meta.json +1 -0
- package/docs/guides/advanced-features/page-performance/code-split.mdx +81 -0
- package/docs/guides/advanced-features/page-performance/inline-assets.mdx +163 -0
- package/docs/guides/advanced-features/page-performance/optimize-bundle.mdx +101 -0
- package/docs/guides/advanced-features/page-performance/react-compiler.mdx +51 -0
- package/docs/guides/advanced-features/server-monitor/_meta.json +1 -0
- package/docs/guides/advanced-features/server-monitor/logger.mdx +19 -0
- package/docs/guides/advanced-features/server-monitor/metrics.mdx +41 -0
- package/docs/guides/advanced-features/server-monitor/monitors.mdx +242 -0
- package/docs/guides/advanced-features/source-build.mdx +168 -0
- package/docs/guides/advanced-features/web-server.mdx +296 -0
- package/docs/guides/basic-features/_meta.json +49 -0
- package/docs/guides/basic-features/alias.mdx +106 -0
- package/docs/guides/basic-features/css/_meta.json +1 -0
- package/docs/guides/basic-features/css/css-in-js.mdx +69 -0
- package/docs/guides/basic-features/css/css-modules.mdx +212 -0
- package/docs/guides/basic-features/css/css.mdx +31 -0
- package/docs/guides/basic-features/css/tailwindcss.mdx +27 -0
- package/docs/guides/basic-features/data/_meta.json +1 -0
- package/docs/guides/basic-features/data/data-cache.mdx +515 -0
- package/docs/guides/basic-features/data/data-fetch.mdx +419 -0
- package/docs/guides/basic-features/data/data-write.mdx +230 -0
- package/docs/guides/basic-features/debug/_meta.json +1 -0
- package/docs/guides/basic-features/debug/mock.mdx +113 -0
- package/docs/guides/basic-features/debug/proxy.mdx +25 -0
- package/docs/guides/basic-features/debug/rsdoctor.mdx +47 -0
- package/docs/guides/basic-features/debug/using-storybook.mdx +100 -0
- package/docs/guides/basic-features/deploy.mdx +448 -0
- package/docs/guides/basic-features/env-vars.mdx +181 -0
- package/docs/guides/basic-features/html.mdx +259 -0
- package/docs/guides/basic-features/output-files.mdx +145 -0
- package/docs/guides/basic-features/render/_meta.json +1 -0
- package/docs/guides/basic-features/render/before-render.mdx +108 -0
- package/docs/guides/basic-features/render/overview.mdx +51 -0
- package/docs/guides/basic-features/render/rsc.mdx +533 -0
- package/docs/guides/basic-features/render/ssg.mdx +167 -0
- package/docs/guides/basic-features/render/ssr-cache.mdx +201 -0
- package/docs/guides/basic-features/render/ssr.mdx +323 -0
- package/docs/guides/basic-features/render/streaming-ssr.mdx +267 -0
- package/docs/guides/basic-features/routes/_meta.json +1 -0
- package/docs/guides/basic-features/routes/config-routes.mdx +427 -0
- package/docs/guides/basic-features/routes/routes.mdx +532 -0
- package/docs/guides/basic-features/static-assets/_meta.json +1 -0
- package/docs/guides/basic-features/static-assets/json-files.mdx +124 -0
- package/docs/guides/basic-features/static-assets/svg-assets.mdx +172 -0
- package/docs/guides/basic-features/static-assets/wasm-assets.mdx +66 -0
- package/docs/guides/basic-features/static-assets.mdx +164 -0
- package/docs/guides/basic-features/testing/_meta.json +1 -0
- package/docs/guides/basic-features/testing/playwright.mdx +111 -0
- package/docs/guides/basic-features/testing/rstest.mdx +192 -0
- package/docs/guides/concept/_meta.json +1 -0
- package/docs/guides/concept/builder.mdx +60 -0
- package/docs/guides/concept/entries.mdx +325 -0
- package/docs/guides/concept/server.mdx +35 -0
- package/docs/guides/get-started/_meta.json +9 -0
- package/docs/guides/get-started/ai-coding-agents.mdx +63 -0
- package/docs/guides/get-started/glossary.mdx +63 -0
- package/docs/guides/get-started/introduction.mdx +45 -0
- package/docs/guides/get-started/quick-start.mdx +92 -0
- package/docs/guides/get-started/tech-stack.mdx +97 -0
- package/docs/guides/get-started/ultramodern.mdx +433 -0
- package/docs/guides/get-started/upgrade.mdx +114 -0
- package/docs/guides/topic-detail/_meta.json +8 -0
- package/docs/guides/topic-detail/module-federation/_meta.json +1 -0
- package/docs/guides/topic-detail/module-federation/application.mdx +116 -0
- package/docs/guides/topic-detail/module-federation/deploy.mdx +104 -0
- package/docs/guides/topic-detail/module-federation/i18n.mdx +670 -0
- package/docs/guides/topic-detail/module-federation/introduce.mdx +36 -0
- package/docs/guides/topic-detail/module-federation/ssr.mdx +177 -0
- package/docs/guides/topic-detail/module-federation/usage.mdx +202 -0
- package/docs/guides/troubleshooting/_meta.json +1 -0
- package/docs/guides/troubleshooting/builder.mdx +114 -0
- package/docs/guides/troubleshooting/cli.mdx +39 -0
- package/docs/guides/troubleshooting/dependencies.mdx +123 -0
- package/docs/guides/troubleshooting/hmr.mdx +148 -0
- package/docs/guides/upgrade/_meta.json +1 -0
- package/docs/guides/upgrade/config.mdx +951 -0
- package/docs/guides/upgrade/entry.mdx +463 -0
- package/docs/guides/upgrade/other.mdx +183 -0
- package/docs/guides/upgrade/overview.mdx +33 -0
- package/docs/guides/upgrade/tailwindcss.mdx +92 -0
- package/docs/guides/upgrade/web-server.md +109 -0
- package/docs/index.md +4 -0
- package/lib/types.d.ts +2 -3
- package/package.json +69 -31
- package/rslib.config.mts +11 -12
- package/scripts/copy-main-doc.mjs +50 -0
- package/dist/cjs/commands/runtime.js +0 -196
- package/dist/cjs/plugins/deploy/platforms/cloudflare.js +0 -540
- package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.mjs +0 -576
- package/dist/cjs/ultramodern/designSystem.js +0 -123
- package/dist/esm/baseline.mjs +0 -4
- package/dist/esm/commands/runtime.mjs +0 -146
- package/dist/esm/plugins/deploy/platforms/cloudflare.mjs +0 -492
- package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.mjs +0 -576
- package/dist/esm/ultramodern/designSystem.mjs +0 -73
- package/dist/esm-node/baseline.mjs +0 -5
- package/dist/esm-node/commands/runtime.mjs +0 -147
- package/dist/esm-node/plugins/deploy/platforms/cloudflare.mjs +0 -493
- package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.mjs +0 -576
- package/dist/esm-node/ultramodern/designSystem.mjs +0 -74
- package/dist/types/baseline.d.ts +0 -16
- package/dist/types/commands/runtime.d.ts +0 -12
- package/dist/types/ultramodern/designSystem.d.ts +0 -54
- /package/dist/types/plugins/deploy/platforms/templates/{cloudflare-entry.d.mts → cloudflare-entry.006-fetch-handler.d.mts} +0 -0
|
@@ -5,6 +5,13 @@ import { ROUTE_MANIFEST } from "@modern-js/utils/universal/constants";
|
|
|
5
5
|
import { createHash } from "crypto";
|
|
6
6
|
const PLUGIN_NAME = 'ModernjsRoutePlugin';
|
|
7
7
|
const generateContentHash = (content)=>createHash('md5').update(content).digest('hex').slice(0, 8);
|
|
8
|
+
const isAutomaticPublicPath = (publicPath)=>'auto' === publicPath || 'auto/' === publicPath;
|
|
9
|
+
const normalizeAutomaticHtmlAsset = (asset)=>asset.startsWith('auto/') ? `/${asset.slice(5)}` : asset;
|
|
10
|
+
const normalizeRouterAssetPublicPath = (publicPath)=>{
|
|
11
|
+
if (!publicPath) return '';
|
|
12
|
+
if (isAutomaticPublicPath(publicPath)) return '/';
|
|
13
|
+
return publicPath.endsWith('/') ? publicPath : `${publicPath}/`;
|
|
14
|
+
};
|
|
8
15
|
class RouterPlugin {
|
|
9
16
|
isTargetNodeOrWebWorker(target) {
|
|
10
17
|
if ('node' === target || Array.isArray(target) && target.includes('node')) return true;
|
|
@@ -30,15 +37,21 @@ class RouterPlugin {
|
|
|
30
37
|
const { rspack } = compiler;
|
|
31
38
|
const { Compilation, sources } = rspack;
|
|
32
39
|
const { RawSource } = sources;
|
|
33
|
-
const normalizePath = (path)=>{
|
|
34
|
-
if (!path.endsWith('/')) return `${path}/`;
|
|
35
|
-
return path;
|
|
36
|
-
};
|
|
37
40
|
const chunksToHtmlName = new Map();
|
|
38
41
|
const ROUTE_MANIFEST_HOLDER = "route-manifest";
|
|
39
42
|
const placeholder = `<!--<?- ${ROUTE_MANIFEST_HOLDER} ?>-->`;
|
|
40
43
|
compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation)=>{
|
|
41
|
-
this.HtmlBundlerPlugin.getCompilationHooks(compilation)
|
|
44
|
+
const htmlPluginHooks = this.HtmlBundlerPlugin.getCompilationHooks(compilation);
|
|
45
|
+
htmlPluginHooks.beforeAssetTagGeneration.tapAsync('RouterManifestPlugin', (data, callback)=>{
|
|
46
|
+
if (isAutomaticPublicPath(compiler.options.output.publicPath)) {
|
|
47
|
+
data.assets.publicPath = '/';
|
|
48
|
+
data.assets.js = data.assets.js.map(normalizeAutomaticHtmlAsset);
|
|
49
|
+
data.assets.css = data.assets.css.map(normalizeAutomaticHtmlAsset);
|
|
50
|
+
if (data.assets.favicon) data.assets.favicon = normalizeAutomaticHtmlAsset(data.assets.favicon);
|
|
51
|
+
}
|
|
52
|
+
callback(null, data);
|
|
53
|
+
});
|
|
54
|
+
htmlPluginHooks.beforeEmit.tapAsync('RouterManifestPlugin', (data, callback)=>{
|
|
42
55
|
const { outputName } = data;
|
|
43
56
|
const { chunks } = data.plugin.options;
|
|
44
57
|
chunksToHtmlName.set(chunks, outputName);
|
|
@@ -58,6 +71,7 @@ class RouterPlugin {
|
|
|
58
71
|
ids: true
|
|
59
72
|
});
|
|
60
73
|
const { publicPath, chunks = [], namedChunkGroups } = stats;
|
|
74
|
+
const assetPublicPath = normalizeRouterAssetPublicPath(publicPath);
|
|
61
75
|
const routeAssets = {};
|
|
62
76
|
if (!namedChunkGroups) return;
|
|
63
77
|
const prevManifestAsset = compilation.getAsset(ROUTE_MANIFEST_FILE);
|
|
@@ -79,7 +93,7 @@ class RouterPlugin {
|
|
|
79
93
|
const child = stack.pop();
|
|
80
94
|
if (visited.has(child)) continue;
|
|
81
95
|
visited.add(child);
|
|
82
|
-
for (const chunk of child.chunks)for (const file of chunk.files)if (/\.css$/.test(file)) cssFiles.add(
|
|
96
|
+
for (const chunk of child.chunks)for (const file of chunk.files)if (/\.css$/.test(file)) cssFiles.add(assetPublicPath + file);
|
|
83
97
|
for (const c of child.childrenIterable)stack.push(c);
|
|
84
98
|
}
|
|
85
99
|
return Array.from(cssFiles);
|
|
@@ -89,7 +103,7 @@ class RouterPlugin {
|
|
|
89
103
|
if (name.startsWith('async-')) asyncEntryNames.push(name);
|
|
90
104
|
const assets = chunkGroup.assets.map((asset)=>{
|
|
91
105
|
const filename = asset.name;
|
|
92
|
-
return
|
|
106
|
+
return assetPublicPath + filename;
|
|
93
107
|
});
|
|
94
108
|
const directCssAssets = assets.filter((asset)=>/\.css$/.test(asset));
|
|
95
109
|
const descendantCssAssets = collectDescendantCssAssets(name).filter((asset)=>!directCssAssets.includes(asset));
|
|
@@ -144,7 +158,7 @@ class RouterPlugin {
|
|
|
144
158
|
window.${ROUTE_MANIFEST} = ${JSON.stringify(manifest, (k, v)=>{
|
|
145
159
|
if (('assets' === k || 'referenceCssAssets' === k) && Array.isArray(v)) {
|
|
146
160
|
if (!useRsc) return;
|
|
147
|
-
return v.map((item)=>item.replace(
|
|
161
|
+
return v.map((item)=>assetPublicPath ? item.replace(assetPublicPath, '') : item);
|
|
148
162
|
}
|
|
149
163
|
return v;
|
|
150
164
|
})};
|
|
@@ -161,7 +175,7 @@ class RouterPlugin {
|
|
|
161
175
|
if (oldHtml) if (enableInlineRouteManifests) compilation.updateAsset(htmlName, new RawSource(oldHtml.source().toString().replace(placeholder, `<script ${nonceAttr}>${injectedContent}</script>`)), void 0);
|
|
162
176
|
else {
|
|
163
177
|
const scriptPath = `${staticJsDir}/${ROUTE_MANIFEST_HOLDER}-${entryName}${disableFilenameHash ? '.js' : `.${generateContentHash(injectedContent)}.js`}`;
|
|
164
|
-
const scriptUrl = `${
|
|
178
|
+
const scriptUrl = `${assetPublicPath}${scriptPath}`;
|
|
165
179
|
const scriptLoadingAttr = 'defer' === scriptLoading ? scriptLoading : 'module' === scriptLoading ? 'type="module"' : '';
|
|
166
180
|
const script = `<script ${scriptLoadingAttr} ${nonceAttr} src="${scriptUrl}"></script>`;
|
|
167
181
|
compilation.updateAsset(htmlName, new RawSource(oldHtml.source().toString().replace(placeholder, script)), void 0);
|
|
@@ -184,4 +198,4 @@ class RouterPlugin {
|
|
|
184
198
|
this.useRsc = useRsc;
|
|
185
199
|
}
|
|
186
200
|
}
|
|
187
|
-
export { RouterPlugin };
|
|
201
|
+
export { RouterPlugin, normalizeRouterAssetPublicPath };
|
|
@@ -21,7 +21,6 @@ function buildRouteEagerLazyCompilationTest(eagerRouteFiles, userTest) {
|
|
|
21
21
|
return userTestFn(m);
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
|
-
const buildSSRLazyCompilationTest = buildRouteEagerLazyCompilationTest;
|
|
25
24
|
function planRouteEagerLazyCompilation(current, info) {
|
|
26
25
|
if (!current) return {
|
|
27
26
|
apply: false
|
|
@@ -43,5 +42,4 @@ function planRouteEagerLazyCompilation(current, info) {
|
|
|
43
42
|
}
|
|
44
43
|
};
|
|
45
44
|
}
|
|
46
|
-
|
|
47
|
-
export { aggregateEagerRouteComponentFiles, buildRouteEagerLazyCompilationTest, buildSSRLazyCompilationTest, collectRouteComponentFiles, normalizeModulePath, planRouteEagerLazyCompilation, planSSRLazyCompilation };
|
|
45
|
+
export { aggregateEagerRouteComponentFiles, buildRouteEagerLazyCompilationTest, collectRouteComponentFiles, normalizeModulePath, planRouteEagerLazyCompilation };
|
|
@@ -57,8 +57,9 @@ const build = async (api, options)=>{
|
|
|
57
57
|
logger.info('Starting production build...');
|
|
58
58
|
if (!appContext.builder) throw new Error('Expect the Builder to have been initialized, But the appContext.builder received `undefined`');
|
|
59
59
|
await appContext.builder.onAfterBuild(async ()=>copyEnvFiles(appContext.appDirectory, appContext.distDirectory));
|
|
60
|
-
await appContext.builder.build({
|
|
60
|
+
const buildResult = await appContext.builder.build({
|
|
61
61
|
watch: options?.watch
|
|
62
62
|
});
|
|
63
|
+
if (!options?.watch) await buildResult?.close();
|
|
63
64
|
};
|
|
64
65
|
export { build };
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import "node:module";
|
|
2
2
|
import { getServerPlugins } from "../utils/loadPlugins.mjs";
|
|
3
|
-
|
|
3
|
+
import { build } from "./build.mjs";
|
|
4
|
+
const deploy = async (api, options = {})=>{
|
|
4
5
|
const hooks = api.getHooks();
|
|
5
6
|
const { metaName } = api.getAppContext();
|
|
6
|
-
await getServerPlugins(api, metaName);
|
|
7
|
+
if (options.skipBuild) await getServerPlugins(api, metaName);
|
|
8
|
+
else await build(api);
|
|
7
9
|
await hooks.onBeforeDeploy.call(options);
|
|
8
10
|
await hooks.deploy.call();
|
|
9
11
|
await hooks.onAfterDeploy.call(options);
|
|
@@ -20,10 +20,6 @@ const serverCommand = (program, api)=>{
|
|
|
20
20
|
};
|
|
21
21
|
const deployCommand = (program, api)=>{
|
|
22
22
|
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)=>{
|
|
23
|
-
if (!options.skipBuild) {
|
|
24
|
-
const { build } = await import("./build.mjs");
|
|
25
|
-
await build(api);
|
|
26
|
-
}
|
|
27
23
|
const { deploy } = await import("./deploy.mjs");
|
|
28
24
|
await deploy(api, options);
|
|
29
25
|
process.exit(0);
|
|
@@ -41,5 +37,4 @@ const infoCommand = (program, api)=>{
|
|
|
41
37
|
await info(api, options);
|
|
42
38
|
});
|
|
43
39
|
};
|
|
44
|
-
export { runtimeCommand } from "./runtime.mjs";
|
|
45
40
|
export { buildCommand, deployCommand, devCommand, infoCommand, inspectCommand, serverCommand };
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import "node:module";
|
|
2
|
+
import { execFileSync } from "node:child_process";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
import { accessSync, chmodSync, constants, lstatSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
5
|
+
import { createRequire } from "node:module";
|
|
6
|
+
import { tmpdir } from "node:os";
|
|
7
|
+
import { basename, dirname, join, resolve } from "node:path";
|
|
8
|
+
const EFFECT_TSGO_PACKAGE = '@effect/tsgo';
|
|
9
|
+
const EFFECT_TSGO_BIN = 'effect-tsgo';
|
|
10
|
+
const EFFECT_TSGO_RESOLUTION_ERROR = 'Unable to resolve the Effect TS-Go compiler. Install "@effect/tsgo" and a native TypeScript backend for this build config, or set EFFECT_TSGO_BIN.';
|
|
11
|
+
const executableEffectTsgoCompilers = new Map();
|
|
12
|
+
const BUILD_CONFIG_ENVIRONMENT_PLUGIN = 'ModernJsBuildConfigEnvironmentLeasePlugin';
|
|
13
|
+
const ENVIRONMENT_LEASE_REGISTRY_KEY = Symbol.for('@modern-js/app-tools/build-config-environment-lease-registry/v1');
|
|
14
|
+
const ENVIRONMENT_LEASE_REGISTRY_BRAND = Symbol.for('@modern-js/app-tools/build-config-environment-lease-registry-brand/v1');
|
|
15
|
+
const LIFECYCLE_HOOK_NAMES = [
|
|
16
|
+
'run',
|
|
17
|
+
'watchRun',
|
|
18
|
+
'afterDone',
|
|
19
|
+
'failed',
|
|
20
|
+
'shutdown',
|
|
21
|
+
'watchClose'
|
|
22
|
+
];
|
|
23
|
+
function restoreEnvironment(name, value) {
|
|
24
|
+
if (void 0 === value) delete process.env[name];
|
|
25
|
+
else process.env[name] = value;
|
|
26
|
+
}
|
|
27
|
+
function createEnvironmentLeaseRegistry() {
|
|
28
|
+
const environmentLeases = new Map();
|
|
29
|
+
return Object.freeze({
|
|
30
|
+
acquire (name, value) {
|
|
31
|
+
let lease = environmentLeases.get(name);
|
|
32
|
+
if (lease) {
|
|
33
|
+
if (lease.value !== value) throw new Error(`Build config environment "${name}" already has an active lease for a different value.`);
|
|
34
|
+
if (process.env[name] !== lease.value) throw new Error(`Build config environment lease for "${name}" lost ownership before another lease was acquired.`);
|
|
35
|
+
} else {
|
|
36
|
+
lease = {
|
|
37
|
+
originalValue: process.env[name],
|
|
38
|
+
owners: new Set(),
|
|
39
|
+
value
|
|
40
|
+
};
|
|
41
|
+
process.env[name] = value;
|
|
42
|
+
environmentLeases.set(name, lease);
|
|
43
|
+
}
|
|
44
|
+
const owner = Symbol(name);
|
|
45
|
+
lease.owners.add(owner);
|
|
46
|
+
let released = false;
|
|
47
|
+
return ()=>{
|
|
48
|
+
if (released) return;
|
|
49
|
+
if (environmentLeases.get(name) !== lease || !lease.owners.has(owner)) throw new Error(`Build config environment lease for "${name}" cannot be restored because its ownership record was lost.`);
|
|
50
|
+
released = true;
|
|
51
|
+
const lostOwnership = process.env[name] !== lease.value;
|
|
52
|
+
lease.owners.delete(owner);
|
|
53
|
+
if (0 === lease.owners.size) {
|
|
54
|
+
environmentLeases.delete(name);
|
|
55
|
+
restoreEnvironment(name, lease.originalValue);
|
|
56
|
+
} else if (lostOwnership) process.env[name] = lease.value;
|
|
57
|
+
if (lostOwnership) throw new Error(`Build config environment lease for "${name}" lost ownership before restoration.`);
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
brand: ENVIRONMENT_LEASE_REGISTRY_BRAND
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function getEnvironmentLeaseRegistry() {
|
|
64
|
+
const descriptor = Object.getOwnPropertyDescriptor(process, ENVIRONMENT_LEASE_REGISTRY_KEY);
|
|
65
|
+
if (descriptor) {
|
|
66
|
+
const registry = descriptor.value;
|
|
67
|
+
if (descriptor.configurable || descriptor.enumerable || descriptor.writable || registry?.brand !== ENVIRONMENT_LEASE_REGISTRY_BRAND || 'function' != typeof registry.acquire) throw new Error('The process-global build config environment lease registry is occupied by an incompatible value.');
|
|
68
|
+
return registry;
|
|
69
|
+
}
|
|
70
|
+
const registry = createEnvironmentLeaseRegistry();
|
|
71
|
+
Object.defineProperty(process, ENVIRONMENT_LEASE_REGISTRY_KEY, {
|
|
72
|
+
configurable: false,
|
|
73
|
+
enumerable: false,
|
|
74
|
+
value: registry,
|
|
75
|
+
writable: false
|
|
76
|
+
});
|
|
77
|
+
return registry;
|
|
78
|
+
}
|
|
79
|
+
function acquireEnvironmentLease(name, value) {
|
|
80
|
+
return getEnvironmentLeaseRegistry().acquire(name, value);
|
|
81
|
+
}
|
|
82
|
+
function releaseAfterFailure(release, originalError) {
|
|
83
|
+
try {
|
|
84
|
+
release();
|
|
85
|
+
} catch (restorationError) {
|
|
86
|
+
throw new AggregateError([
|
|
87
|
+
originalError,
|
|
88
|
+
restorationError
|
|
89
|
+
], 'Build config environment setup and restoration both failed.');
|
|
90
|
+
}
|
|
91
|
+
throw originalError;
|
|
92
|
+
}
|
|
93
|
+
class BuildConfigEnvironmentLeasePlugin {
|
|
94
|
+
apply(compiler) {
|
|
95
|
+
const hooks = compiler.hooks;
|
|
96
|
+
try {
|
|
97
|
+
const lifecycleHooks = {};
|
|
98
|
+
for (const hookName of LIFECYCLE_HOOK_NAMES){
|
|
99
|
+
const hook = hooks[hookName];
|
|
100
|
+
if (!hook || 'function' != typeof hook.tap) throw new Error(`Rspack does not expose the "${hookName}" lifecycle hook required to restore build config environment leases.`);
|
|
101
|
+
lifecycleHooks[hookName] = hook;
|
|
102
|
+
}
|
|
103
|
+
let mode = 'pending';
|
|
104
|
+
const modeTap = {
|
|
105
|
+
name: BUILD_CONFIG_ENVIRONMENT_PLUGIN,
|
|
106
|
+
stage: Number.MIN_SAFE_INTEGER
|
|
107
|
+
};
|
|
108
|
+
const releaseTap = {
|
|
109
|
+
name: BUILD_CONFIG_ENVIRONMENT_PLUGIN,
|
|
110
|
+
stage: Number.MAX_SAFE_INTEGER
|
|
111
|
+
};
|
|
112
|
+
const releaseAfterOneShot = ()=>{
|
|
113
|
+
if ('watch' !== mode && true !== compiler.watchMode) this.release();
|
|
114
|
+
};
|
|
115
|
+
lifecycleHooks.run.tap(modeTap, ()=>{
|
|
116
|
+
mode = 'run';
|
|
117
|
+
});
|
|
118
|
+
lifecycleHooks.watchRun.tap(modeTap, ()=>{
|
|
119
|
+
mode = 'watch';
|
|
120
|
+
});
|
|
121
|
+
lifecycleHooks.afterDone.tap(releaseTap, releaseAfterOneShot);
|
|
122
|
+
lifecycleHooks.failed.tap(releaseTap, releaseAfterOneShot);
|
|
123
|
+
lifecycleHooks.shutdown.tap(releaseTap, this.release);
|
|
124
|
+
lifecycleHooks.watchClose.tap(releaseTap, this.release);
|
|
125
|
+
} catch (error) {
|
|
126
|
+
releaseAfterFailure(this.release, error);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
constructor(release){
|
|
130
|
+
this.release = release;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function resolveEffectTsgoCli(from) {
|
|
134
|
+
const projectRequire = createRequire(from);
|
|
135
|
+
const packageJsonPath = projectRequire.resolve(`${EFFECT_TSGO_PACKAGE}/package.json`);
|
|
136
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
137
|
+
const bin = 'string' == typeof packageJson.bin ? packageJson.bin : packageJson.bin?.[EFFECT_TSGO_BIN];
|
|
138
|
+
if (!bin) throw new Error(EFFECT_TSGO_RESOLUTION_ERROR);
|
|
139
|
+
return resolve(dirname(packageJsonPath), bin);
|
|
140
|
+
}
|
|
141
|
+
function resolveExecutableEffectTsgoCompiler(compilerPath) {
|
|
142
|
+
if ('win32' === process.platform) return compilerPath;
|
|
143
|
+
const sourcePath = realpathSync(compilerPath);
|
|
144
|
+
const source = lstatSync(sourcePath);
|
|
145
|
+
if (!source.isFile()) throw new Error(EFFECT_TSGO_RESOLUTION_ERROR);
|
|
146
|
+
try {
|
|
147
|
+
accessSync(sourcePath, constants.X_OK);
|
|
148
|
+
return compilerPath;
|
|
149
|
+
} catch {}
|
|
150
|
+
const cachedCompiler = executableEffectTsgoCompilers.get(sourcePath);
|
|
151
|
+
if (cachedCompiler) try {
|
|
152
|
+
accessSync(cachedCompiler, constants.X_OK);
|
|
153
|
+
return cachedCompiler;
|
|
154
|
+
} catch {
|
|
155
|
+
executableEffectTsgoCompilers.delete(sourcePath);
|
|
156
|
+
}
|
|
157
|
+
const compilerBytes = readFileSync(sourcePath);
|
|
158
|
+
const compilerDigest = createHash('sha256').update(compilerBytes).digest('hex');
|
|
159
|
+
const compilerDirectory = join(tmpdir(), 'modern-js', 'effect-tsgo', compilerDigest);
|
|
160
|
+
mkdirSync(compilerDirectory, {
|
|
161
|
+
recursive: true,
|
|
162
|
+
mode: 448
|
|
163
|
+
});
|
|
164
|
+
const executableCompiler = join(compilerDirectory, basename(sourcePath));
|
|
165
|
+
try {
|
|
166
|
+
accessSync(executableCompiler, constants.X_OK);
|
|
167
|
+
} catch {
|
|
168
|
+
const temporaryCompiler = join(compilerDirectory, `.${basename(sourcePath)}.${process.pid}.tmp`);
|
|
169
|
+
rmSync(temporaryCompiler, {
|
|
170
|
+
force: true
|
|
171
|
+
});
|
|
172
|
+
try {
|
|
173
|
+
writeFileSync(temporaryCompiler, compilerBytes, {
|
|
174
|
+
flag: 'wx',
|
|
175
|
+
mode: 448
|
|
176
|
+
});
|
|
177
|
+
chmodSync(temporaryCompiler, 448);
|
|
178
|
+
renameSync(temporaryCompiler, executableCompiler);
|
|
179
|
+
} finally{
|
|
180
|
+
rmSync(temporaryCompiler, {
|
|
181
|
+
force: true
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
accessSync(executableCompiler, constants.X_OK);
|
|
186
|
+
executableEffectTsgoCompilers.set(sourcePath, executableCompiler);
|
|
187
|
+
return executableCompiler;
|
|
188
|
+
}
|
|
189
|
+
function getBuildConfigEnvironment(name) {
|
|
190
|
+
return process.env[name];
|
|
191
|
+
}
|
|
192
|
+
function withBuildConfigEnvironment(name, value, setup) {
|
|
193
|
+
return async (config, ...args)=>{
|
|
194
|
+
const release = acquireEnvironmentLease(name, value);
|
|
195
|
+
try {
|
|
196
|
+
const configured = await setup(config, ...args) ?? config;
|
|
197
|
+
configured.plugins = [
|
|
198
|
+
...configured.plugins ?? [],
|
|
199
|
+
new BuildConfigEnvironmentLeasePlugin(release)
|
|
200
|
+
];
|
|
201
|
+
return configured;
|
|
202
|
+
} catch (error) {
|
|
203
|
+
releaseAfterFailure(release, error);
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
function resolveEffectTsgoCompiler(options) {
|
|
208
|
+
const configuredCompiler = getBuildConfigEnvironment('EFFECT_TSGO_BIN')?.trim();
|
|
209
|
+
if (configuredCompiler) try {
|
|
210
|
+
return resolveExecutableEffectTsgoCompiler(configuredCompiler);
|
|
211
|
+
} catch {
|
|
212
|
+
throw new Error(EFFECT_TSGO_RESOLUTION_ERROR);
|
|
213
|
+
}
|
|
214
|
+
try {
|
|
215
|
+
const compiler = execFileSync(process.execPath, [
|
|
216
|
+
resolveEffectTsgoCli(options.from),
|
|
217
|
+
'get-exe-path'
|
|
218
|
+
], {
|
|
219
|
+
encoding: 'utf-8'
|
|
220
|
+
}).trim();
|
|
221
|
+
if (compiler) return resolveExecutableEffectTsgoCompiler(compiler);
|
|
222
|
+
} catch {}
|
|
223
|
+
throw new Error(EFFECT_TSGO_RESOLUTION_ERROR);
|
|
224
|
+
}
|
|
225
|
+
export { getBuildConfigEnvironment, resolveEffectTsgoCompiler, withBuildConfigEnvironment };
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import "node:module";
|
|
2
|
+
import { AGGRED_DIR } from "@modern-js/server-core";
|
|
2
3
|
import { DEFAULT_ENTRY_NAME } from "@modern-js/utils";
|
|
3
4
|
import { getAutoInjectEnv } from "../utils/env.mjs";
|
|
4
5
|
function createDefaultConfig(appContext) {
|
|
5
6
|
const dev = {
|
|
7
|
+
mockDir: `./${AGGRED_DIR.mock}`,
|
|
6
8
|
cliShortcuts: {
|
|
7
9
|
help: false,
|
|
8
10
|
custom: (shortcuts = [])=>shortcuts.filter(({ key })=>'r' !== key && 'u' !== key && 'o' !== key)
|
package/dist/esm-node/index.mjs
CHANGED
|
@@ -5,22 +5,22 @@ import { getLocaleLanguage } from "@modern-js/i18n-utils/language-detector";
|
|
|
5
5
|
import { createAsyncHook } from "@modern-js/plugin";
|
|
6
6
|
import { cleanRequireCache, deprecatedCommands, emptyDir, getArgv, getCommand } from "@modern-js/utils";
|
|
7
7
|
import path from "path";
|
|
8
|
-
import { buildCommand, deployCommand, devCommand, infoCommand, inspectCommand,
|
|
8
|
+
import { buildCommand, deployCommand, devCommand, infoCommand, inspectCommand, serverCommand } from "./commands/index.mjs";
|
|
9
9
|
import { compatPlugin } from "./compat/index.mjs";
|
|
10
10
|
import { DEFAULT_RUNTIME_CONFIG_FILE } from "./constants.mjs";
|
|
11
11
|
import { i18n } from "./locale/index.mjs";
|
|
12
12
|
import analyze from "./plugins/analyze/index.mjs";
|
|
13
|
+
import backendFederationBuild from "./plugins/backendFederationBuild.mjs";
|
|
13
14
|
import deploy from "./plugins/deploy/index.mjs";
|
|
14
15
|
import initialize from "./plugins/initialize/index.mjs";
|
|
15
16
|
import serverBuild from "./plugins/serverBuild.mjs";
|
|
16
17
|
import serverRuntime from "./plugins/serverRuntime.mjs";
|
|
18
|
+
import ultramodernReleaseEnvelope from "./plugins/ultramodernReleaseEnvelope.mjs";
|
|
17
19
|
import { generateWatchFiles } from "./utils/generateWatchFiles.mjs";
|
|
18
20
|
import { initAppContext } from "./utils/initAppContext.mjs";
|
|
19
21
|
import { restart } from "./utils/restart.mjs";
|
|
20
|
-
export * from "./baseline.mjs";
|
|
21
22
|
export * from "./defineConfig.mjs";
|
|
22
23
|
export * from "./presetUltramodern.mjs";
|
|
23
|
-
export * from "./ultramodern/designSystem.mjs";
|
|
24
24
|
export * from "./types/index.mjs";
|
|
25
25
|
const appTools = ()=>({
|
|
26
26
|
name: '@modern-js/app-tools',
|
|
@@ -30,6 +30,8 @@ const appTools = ()=>({
|
|
|
30
30
|
initialize(),
|
|
31
31
|
analyze(),
|
|
32
32
|
serverBuild(),
|
|
33
|
+
backendFederationBuild(),
|
|
34
|
+
ultramodernReleaseEnvelope(),
|
|
33
35
|
deploy()
|
|
34
36
|
],
|
|
35
37
|
post: [
|
|
@@ -74,7 +76,6 @@ const appTools = ()=>({
|
|
|
74
76
|
deployCommand(program, api);
|
|
75
77
|
inspectCommand(program, api);
|
|
76
78
|
infoCommand(program, api);
|
|
77
|
-
await runtimeCommand(program, api);
|
|
78
79
|
deprecatedCommands(program);
|
|
79
80
|
});
|
|
80
81
|
api.onPrepare(async ()=>{
|
|
@@ -86,7 +87,18 @@ const appTools = ()=>({
|
|
|
86
87
|
].some((tag)=>getArgv().includes(tag));
|
|
87
88
|
if (isSkipBuild) return;
|
|
88
89
|
}
|
|
89
|
-
|
|
90
|
+
const { command: contextCommand } = api.getAppContext();
|
|
91
|
+
const shouldClean = [
|
|
92
|
+
'dev',
|
|
93
|
+
'start',
|
|
94
|
+
'build',
|
|
95
|
+
'deploy'
|
|
96
|
+
].includes(command) || [
|
|
97
|
+
'dev',
|
|
98
|
+
'start',
|
|
99
|
+
'build'
|
|
100
|
+
].includes(contextCommand);
|
|
101
|
+
if (shouldClean) {
|
|
90
102
|
const resolvedConfig = api.getNormalizedConfig();
|
|
91
103
|
if (resolvedConfig.output.cleanDistPath) {
|
|
92
104
|
const appContext = api.getAppContext();
|
|
@@ -126,9 +138,12 @@ const appTools = ()=>({
|
|
|
126
138
|
});
|
|
127
139
|
const src = appTools;
|
|
128
140
|
export { defineConfig } from "./defineConfig.mjs";
|
|
141
|
+
export { build } from "./commands/build.mjs";
|
|
142
|
+
export { deploy } from "./commands/deploy.mjs";
|
|
129
143
|
export { dev } from "./commands/dev.mjs";
|
|
130
144
|
export { serve } from "./commands/serve.mjs";
|
|
131
145
|
export { resolveModernRsbuildConfig } from "./rsbuild.mjs";
|
|
146
|
+
export { closeServer } from "./utils/createServer.mjs";
|
|
132
147
|
export { mergeConfig } from "@modern-js/plugin/cli";
|
|
133
148
|
export default src;
|
|
134
149
|
export { appTools, generateWatchFiles, initAppContext };
|
|
@@ -2,7 +2,7 @@ import "node:module";
|
|
|
2
2
|
import { findExists, fs } from "@modern-js/utils";
|
|
3
3
|
import path from "path";
|
|
4
4
|
import { HTML_PARTIALS_EXTENSIONS, HTML_PARTIALS_FOLDER } from "./constants.mjs";
|
|
5
|
-
import * as
|
|
5
|
+
import * as __rspack_external__templates_mjs_ab577925 from "./templates.mjs";
|
|
6
6
|
const findPartials = (dir, entryName, position)=>{
|
|
7
7
|
if (fs.existsSync(dir)) {
|
|
8
8
|
const base = findExists(HTML_PARTIALS_EXTENSIONS.map((ext)=>path.resolve(dir, `${position}${ext}`)));
|
|
@@ -83,7 +83,7 @@ const getHtmlTemplate = async (entrypoints, hooks, { appContext, config })=>{
|
|
|
83
83
|
partials: getModifyHtmlPartials(partials)
|
|
84
84
|
});
|
|
85
85
|
const templatePath = path.resolve(internalDirectory, entryName, 'index.html');
|
|
86
|
-
fs.outputFileSync(templatePath,
|
|
86
|
+
fs.outputFileSync(templatePath, __rspack_external__templates_mjs_ab577925.html(partials), 'utf8');
|
|
87
87
|
htmlTemplates[entryName] = templatePath.replace(/\\/g, '/');
|
|
88
88
|
partialsByEntrypoint[entryName] = partials;
|
|
89
89
|
const bottomTemplate = findPartials(htmlDir, name, "bottom");
|
|
@@ -128,4 +128,20 @@ const getProdServerRoutes = (distDirectory)=>{
|
|
|
128
128
|
throw new Error(`Failed to read routes from ${routeJSON}, please check if the file exists.`);
|
|
129
129
|
}
|
|
130
130
|
};
|
|
131
|
-
|
|
131
|
+
const getProdEntrypoints = (distDirectory, routes, mainEntryName = MAIN_ENTRY_NAME)=>{
|
|
132
|
+
const byEntryName = new Map();
|
|
133
|
+
for (const route of routes){
|
|
134
|
+
if (!route.entryName || byEntryName.has(route.entryName)) continue;
|
|
135
|
+
const builtEntry = route.bundle || route.entryPath;
|
|
136
|
+
byEntryName.set(route.entryName, {
|
|
137
|
+
entryName: route.entryName,
|
|
138
|
+
entry: path.resolve(distDirectory, builtEntry),
|
|
139
|
+
isAutoMount: true,
|
|
140
|
+
isMainEntry: route.entryName === mainEntryName
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
return [
|
|
144
|
+
...byEntryName.values()
|
|
145
|
+
];
|
|
146
|
+
};
|
|
147
|
+
export { getProdEntrypoints, getProdServerRoutes, getServerRoutes };
|
|
@@ -24,10 +24,10 @@ const analyze = ()=>({
|
|
|
24
24
|
const resolvedConfig = api.getNormalizedConfig();
|
|
25
25
|
const hooks = api.getHooks();
|
|
26
26
|
try {
|
|
27
|
-
if (checkIsBuildCommands()) fs.emptydirSync(appContext.internalDirectory);
|
|
27
|
+
if (checkIsBuildCommands(appContext.command)) fs.emptydirSync(appContext.internalDirectory);
|
|
28
28
|
} catch {}
|
|
29
29
|
const apiOnly = await isApiOnly(appContext.appDirectory, resolvedConfig.source?.entriesDir, appContext.apiDirectory);
|
|
30
|
-
const [{ getProdServerRoutes }] = await Promise.all([
|
|
30
|
+
const [{ getProdEntrypoints, getProdServerRoutes }] = await Promise.all([
|
|
31
31
|
import("./getServerRoutes.mjs")
|
|
32
32
|
]);
|
|
33
33
|
if (apiOnly) {
|
|
@@ -46,6 +46,17 @@ const analyze = ()=>({
|
|
|
46
46
|
});
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
49
|
+
if (checkIsServeCommand()) {
|
|
50
|
+
const routes = getProdServerRoutes(appContext.distDirectory);
|
|
51
|
+
const entrypoints = getProdEntrypoints(appContext.distDirectory, routes, resolvedConfig.source.mainEntryName);
|
|
52
|
+
api.updateAppContext({
|
|
53
|
+
apiOnly,
|
|
54
|
+
checkedEntries: entrypoints.map((entrypoint)=>entrypoint.entryName),
|
|
55
|
+
entrypoints,
|
|
56
|
+
serverRoutes: routes
|
|
57
|
+
});
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
49
60
|
const [{ getBundleEntry }, { getServerRoutes }, { getHtmlTemplate }] = await Promise.all([
|
|
50
61
|
import("./getBundleEntry.mjs"),
|
|
51
62
|
import("./getServerRoutes.mjs"),
|
|
@@ -56,17 +67,14 @@ const analyze = ()=>({
|
|
|
56
67
|
});
|
|
57
68
|
debug("entrypoints: %o", entrypoints);
|
|
58
69
|
const routes = [];
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
});
|
|
68
|
-
routes.push(...modifiedRoutes);
|
|
69
|
-
}
|
|
70
|
+
const initialRoutes = getServerRoutes(entrypoints, {
|
|
71
|
+
appContext,
|
|
72
|
+
config: resolvedConfig
|
|
73
|
+
});
|
|
74
|
+
const { routes: modifiedRoutes } = await hooks.modifyServerRoutes.call({
|
|
75
|
+
routes: initialRoutes
|
|
76
|
+
});
|
|
77
|
+
routes.push(...modifiedRoutes);
|
|
70
78
|
debug("server routes: %o", routes);
|
|
71
79
|
appContext = {
|
|
72
80
|
...api.getAppContext(),
|
|
@@ -118,7 +126,7 @@ const analyze = ()=>({
|
|
|
118
126
|
htmlTemplates
|
|
119
127
|
};
|
|
120
128
|
api.updateAppContext(appContext);
|
|
121
|
-
if (checkIsBuildCommands()) {
|
|
129
|
+
if (checkIsBuildCommands(appContext.command)) {
|
|
122
130
|
await hooks.generateEntryCode.call({
|
|
123
131
|
entrypoints
|
|
124
132
|
});
|
|
@@ -2,8 +2,8 @@ import "node:module";
|
|
|
2
2
|
import { parse } from "@babel/parser";
|
|
3
3
|
import traverse from "@babel/traverse";
|
|
4
4
|
import fs from "fs";
|
|
5
|
-
import * as
|
|
6
|
-
const isFunction = (node)=>
|
|
5
|
+
import * as __rspack_external__babel_types_6e8337dd from "@babel/types";
|
|
6
|
+
const isFunction = (node)=>__rspack_external__babel_types_6e8337dd.isFunctionDeclaration(node) || __rspack_external__babel_types_6e8337dd.isFunctionExpression(node) || __rspack_external__babel_types_6e8337dd.isArrowFunctionExpression(node);
|
|
7
7
|
const isDefaultExportFunction = (file)=>{
|
|
8
8
|
if (!file || !fs.existsSync(file)) return false;
|
|
9
9
|
const ast = parse(fs.readFileSync(file, 'utf8'), {
|
|
@@ -39,7 +39,7 @@ const parseModule = async ({ source, filename })=>{
|
|
|
39
39
|
return await parse(content);
|
|
40
40
|
};
|
|
41
41
|
const getServerCombinedModuleFile = (internalDirectory, entryName)=>path.join(internalDirectory, entryName, 'server-loader-combined.js');
|
|
42
|
-
const checkIsBuildCommands = ()=>{
|
|
42
|
+
const checkIsBuildCommands = (contextCommand)=>{
|
|
43
43
|
const buildCommands = [
|
|
44
44
|
'dev',
|
|
45
45
|
'start',
|
|
@@ -49,7 +49,8 @@ const checkIsBuildCommands = ()=>{
|
|
|
49
49
|
'dev-worker'
|
|
50
50
|
];
|
|
51
51
|
const command = getCommand();
|
|
52
|
-
|
|
52
|
+
if (buildCommands.includes(command)) return true;
|
|
53
|
+
return 'dev' === contextCommand || 'start' === contextCommand || 'build' === contextCommand || 'deploy' === contextCommand;
|
|
53
54
|
};
|
|
54
55
|
const checkIsServeCommand = ()=>{
|
|
55
56
|
const command = getCommand();
|