@mandujs/core 0.54.32 → 0.55.0-beta.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/README.md +654 -654
- package/package.json +106 -210
- package/scripts/postinstall-lock.ts +153 -153
- package/src/a11y/__tests__/run-audit.test.ts +333 -333
- package/src/a11y/fix-hints.ts +76 -76
- package/src/a11y/index.ts +18 -18
- package/src/a11y/run-audit.ts +15 -15
- package/src/a11y/types.ts +125 -125
- package/src/agent/__tests__/apply.test.ts +224 -0
- package/src/agent/__tests__/context.test.ts +97 -98
- package/src/agent/apply.ts +1031 -0
- package/src/agent/context.ts +552 -552
- package/src/agent/index.ts +4 -3
- package/src/agent/plan.ts +161 -243
- package/src/agent/repair.ts +239 -162
- package/src/agent/sync.ts +197 -198
- package/src/agent/types.ts +242 -94
- package/src/agent/verify.ts +55 -55
- package/src/auth/__tests__/login.test.ts +1 -1
- package/src/auth/__tests__/password.test.ts +15 -5
- package/src/auth/__tests__/reset.test.ts +2 -2
- package/src/auth/__tests__/tokens.test.ts +274 -274
- package/src/auth/__tests__/verification.test.ts +274 -274
- package/src/auth/index.ts +76 -76
- package/src/auth/login.ts +225 -225
- package/src/auth/password.ts +14 -2
- package/src/auth/reset.ts +243 -243
- package/src/auth/tokens.ts +612 -612
- package/src/auth/verification.ts +253 -253
- package/src/brain/__tests__/redactor.test.ts +94 -94
- package/src/brain/adapters/__tests__/_helpers.ts +83 -83
- package/src/brain/adapters/__tests__/anthropic-oauth.test.ts +196 -196
- package/src/brain/adapters/__tests__/chatgpt-auth.test.ts +193 -193
- package/src/brain/adapters/__tests__/openai-oauth.test.ts +209 -209
- package/src/brain/adapters/__tests__/resolver.test.ts +143 -143
- package/src/brain/adapters/anthropic-oauth.ts +1 -1
- package/src/brain/adapters/chatgpt-auth.ts +300 -300
- package/src/brain/adapters/index.ts +319 -319
- package/src/brain/adapters/oauth-flow.ts +439 -439
- package/src/brain/consent.ts +240 -240
- package/src/brain/credentials.ts +396 -396
- package/src/brain/doctor/analyzer.ts +7 -7
- package/src/bundler/__snapshots__/build.test.ts.snap +5 -5
- package/src/bundler/__tests__/build-runner.ts +166 -166
- package/src/bundler/__tests__/client-boundary-transform.test.ts +524 -524
- package/src/bundler/__tests__/cold-start.test.ts +60 -60
- package/src/bundler/__tests__/css.test.ts +49 -20
- package/src/bundler/__tests__/dev-reliability.test.ts +619 -619
- package/src/bundler/__tests__/extended-watch.test.ts +711 -711
- package/src/bundler/__tests__/fast-refresh.test.ts +24 -24
- package/src/bundler/__tests__/generation.test.ts +447 -0
- package/src/bundler/__tests__/hdr.test.ts +24 -18
- package/src/bundler/__tests__/hmr-client.test.ts +62 -24
- package/src/bundler/__tests__/jsx-runtime-shim.test.ts +179 -140
- package/src/bundler/__tests__/manifest-schema.test.ts +305 -266
- package/src/bundler/__tests__/prod-smoke.test.ts +138 -138
- package/src/bundler/__tests__/reverse-import-graph.test.ts +42 -42
- package/src/bundler/__tests__/slot-dispatch.test.ts +573 -573
- package/src/bundler/__tests__/url-cap-and-slot-regex.test.ts +286 -286
- package/src/bundler/__tests__/vendor-cache.test.ts +455 -455
- package/src/bundler/analyzer.ts +15 -15
- package/src/bundler/budget.ts +404 -404
- package/src/bundler/build.test.ts +898 -915
- package/src/bundler/build.ts +113 -24
- package/src/bundler/client-boundary-transform.ts +977 -977
- package/src/bundler/css.ts +65 -44
- package/src/bundler/dev.ts +105 -73
- package/src/bundler/fast-refresh-preamble.ts +47 -47
- package/src/bundler/generation.ts +602 -0
- package/src/bundler/index.ts +3 -3
- package/src/bundler/manifest-schema.ts +55 -40
- package/src/bundler/plugins/__tests__/block-generated-imports.test.ts +13 -13
- package/src/bundler/plugins/__tests__/react-compiler-config.test.ts +83 -83
- package/src/bundler/plugins/__tests__/react-compiler-lint.test.ts +110 -110
- package/src/bundler/plugins/block-generated-imports.ts +16 -15
- package/src/bundler/plugins/index.ts +83 -83
- package/src/bundler/plugins/react-compiler-config.ts +108 -108
- package/src/bundler/plugins/react-compiler-lint.ts +253 -253
- package/src/bundler/plugins/react-compiler.ts +162 -162
- package/src/bundler/prerender.ts +29 -9
- package/src/bundler/reverse-import-graph.ts +339 -339
- package/src/bundler/safe-build.test.ts +1 -1
- package/src/bundler/safe-build.ts +103 -103
- package/src/bundler/scenario-matrix.ts +229 -229
- package/src/bundler/types.ts +58 -56
- package/src/bundler/vendor-cache-types.ts +130 -130
- package/src/bundler/vendor-cache.ts +526 -526
- package/src/change/snapshot.ts +18 -18
- package/src/client/Form.tsx +105 -105
- package/src/client/Link.tsx +9 -9
- package/src/client/__tests__/props-serialization.test.ts +37 -37
- package/src/client/__tests__/use-sse.test.ts +153 -153
- package/src/client/globals.ts +1 -1
- package/src/client/hooks.ts +362 -362
- package/src/client/hydrate.ts +2 -2
- package/src/client/index.ts +1 -1
- package/src/client/island.ts +79 -79
- package/src/client/prefetch-helper.ts +55 -55
- package/src/client/props-serialization.ts +233 -233
- package/src/client/runtime-entry.ts +598 -598
- package/src/client/runtime.ts +1 -1
- package/src/client/serialize.ts +50 -50
- package/src/client/use-fetch.ts +6 -6
- package/src/client/use-head.ts +197 -197
- package/src/client/use-sse.ts +378 -378
- package/src/client/window-state.ts +101 -101
- package/src/components/Image-compat.ts +3 -0
- package/src/components/Image.tsx +162 -162
- package/src/config/validate.ts +1 -1
- package/src/config/watcher.ts +311 -311
- package/src/constants.ts +40 -40
- package/src/content/collection.ts +9 -9
- package/src/content/content-layer.ts +7 -7
- package/src/content/data-store.ts +245 -245
- package/src/content/frontmatter.ts +189 -189
- package/src/content/generate-types.ts +1 -1
- package/src/content/index.ts +2 -2
- package/src/content/loader-context.ts +171 -171
- package/src/content/loaders/api.ts +216 -216
- package/src/content/loaders/file.ts +172 -172
- package/src/content/loaders/glob.ts +253 -253
- package/src/content/loaders/index.ts +34 -34
- package/src/content/loaders/types.ts +137 -137
- package/src/content/meta-store.ts +209 -209
- package/src/content/prebuild.test.ts +571 -571
- package/src/content/prebuild.ts +636 -636
- package/src/content/schema.ts +20 -20
- package/src/content/sidebar.ts +630 -630
- package/src/content/slug.ts +110 -110
- package/src/content/types.ts +282 -282
- package/src/content/watcher.ts +135 -135
- package/src/contract/client-safe.test.ts +42 -42
- package/src/contract/client-safe.ts +114 -114
- package/src/contract/define.ts +11 -11
- package/src/contract/index.ts +1 -1
- package/src/contract/normalize.test.ts +276 -276
- package/src/contract/normalize.ts +410 -410
- package/src/contract/registry.test.ts +206 -206
- package/src/contract/route-helpers.ts +1 -1
- package/src/contract/rpc.ts +443 -443
- package/src/contract/types.ts +58 -58
- package/src/db/__tests__/db.test.ts +9 -9
- package/src/db/index.ts +2 -2
- package/src/db/migrations/history-table.ts +345 -345
- package/src/db/migrations/index.ts +3 -3
- package/src/db/migrations/lock.ts +324 -324
- package/src/db/migrations/runner.ts +650 -650
- package/src/deploy/cache.ts +140 -140
- package/src/deploy/compile/vercel.ts +344 -344
- package/src/deploy/index.ts +87 -87
- package/src/deploy/inference/brain.ts +268 -268
- package/src/deploy/inference/context.ts +82 -82
- package/src/deploy/inference/filling-extract.ts +245 -245
- package/src/deploy/inference/heuristic.ts +182 -182
- package/src/deploy/intent.ts +173 -173
- package/src/deploy/plan.ts +178 -178
- package/src/design/__tests__/agents-link.test.ts +109 -109
- package/src/design/__tests__/extract-patch-diff.test.ts +265 -265
- package/src/design/__tests__/lint.test.ts +110 -110
- package/src/design/__tests__/parser.test.ts +195 -195
- package/src/design/__tests__/tailwind-theme.test.ts +229 -229
- package/src/design/agents-link.ts +165 -165
- package/src/design/diff.ts +138 -138
- package/src/design/extract.ts +285 -285
- package/src/design/index.ts +102 -102
- package/src/design/lint.ts +209 -209
- package/src/design/parser.ts +555 -555
- package/src/design/patch.ts +241 -241
- package/src/design/scaffold.ts +147 -147
- package/src/design/tailwind-theme.ts +441 -441
- package/src/design/types.ts +210 -210
- package/src/desktop/__tests__/smoke.test.ts +2 -2
- package/src/desktop/__tests__/webview-fallback.test.ts +12 -32
- package/src/desktop/__tests__/window.test.ts +20 -99
- package/src/desktop/__tests__/worker.test.ts +266 -266
- package/src/desktop/index.ts +43 -43
- package/src/desktop/types.ts +158 -158
- package/src/desktop/webview-fallback.ts +17 -4
- package/src/desktop/window.ts +17 -8
- package/src/desktop/worker.ts +180 -180
- package/src/dev-error-overlay/__tests__/overlay-injector.test.ts +241 -241
- package/src/dev-error-overlay/index.ts +30 -30
- package/src/dev-error-overlay/overlay-injector.ts +243 -243
- package/src/dev-error-overlay/overlay-styles.ts +52 -52
- package/src/dev-error-overlay/types.ts +66 -66
- package/src/devtools/ai/context-builder.ts +375 -375
- package/src/devtools/ai/index.ts +25 -25
- package/src/devtools/ai/mcp-connector.ts +25 -25
- package/src/devtools/client/catchers/error-catcher.ts +344 -344
- package/src/devtools/client/catchers/index.ts +18 -18
- package/src/devtools/client/components/index.ts +39 -39
- package/src/devtools/client/components/mandu-character.tsx +331 -331
- package/src/devtools/client/components/panel/errors-panel.tsx +259 -259
- package/src/devtools/client/components/panel/guard-panel.tsx +30 -30
- package/src/devtools/client/components/panel/islands-panel.tsx +16 -16
- package/src/devtools/client/components/panel/network-panel.tsx +291 -291
- package/src/devtools/client/components/panel/panel-container.tsx +1 -1
- package/src/devtools/client/components/panel/preview-panel.tsx +46 -46
- package/src/devtools/client/filters/context-filters.ts +282 -282
- package/src/devtools/client/filters/index.ts +16 -16
- package/src/devtools/client/index.ts +63 -63
- package/src/devtools/hook/create-hook.ts +207 -207
- package/src/devtools/hook/index.ts +13 -13
- package/src/devtools/index.ts +439 -439
- package/src/devtools/init.ts +265 -265
- package/src/devtools/protocol.ts +237 -237
- package/src/devtools/server/index.ts +17 -17
- package/src/devtools/types.ts +35 -35
- package/src/devtools/worker/index.ts +25 -25
- package/src/devtools/worker/redaction-worker.ts +233 -233
- package/src/diagnose/__tests__/checks.test.ts +136 -136
- package/src/diagnose/checks.ts +185 -185
- package/src/diagnose/index.ts +17 -17
- package/src/diagnose/run.ts +10 -10
- package/src/diagnose/types.ts +53 -53
- package/src/email/__tests__/email.test.ts +355 -355
- package/src/email/index.ts +282 -282
- package/src/email/smtp.ts +64 -64
- package/src/error/domains.ts +265 -265
- package/src/error/types.ts +6 -6
- package/src/errors/extractor.ts +409 -409
- package/src/errors/index.ts +19 -19
- package/src/filling/__tests__/session-sqlite.test.ts +5 -1
- package/src/filling/auth.ts +308 -308
- package/src/filling/body-parse.test.ts +60 -60
- package/src/filling/cookie-codec.ts +5 -3
- package/src/filling/deps.ts +265 -265
- package/src/filling/head-method.test.ts +154 -154
- package/src/filling/session-sqlite.ts +617 -617
- package/src/filling/sse.ts +5 -5
- package/src/filling/ws.ts +78 -78
- package/src/generator/generate.ts +30 -30
- package/src/generator/index.ts +3 -3
- package/src/generator/templates.test.ts +48 -48
- package/src/generator/templates.ts +219 -219
- package/src/guard/__tests__/design-inline-class.test.ts +219 -219
- package/src/guard/__tests__/tsgolint-bridge.test.ts +347 -347
- package/src/guard/analyzer.ts +360 -360
- package/src/guard/auto-correct.ts +1 -1
- package/src/guard/check.ts +39 -24
- package/src/guard/config-guard.ts +13 -13
- package/src/guard/contract-guard.ts +9 -9
- package/src/guard/define-rule.ts +243 -243
- package/src/guard/design-inline-class.ts +393 -393
- package/src/guard/file-type.test.ts +24 -24
- package/src/guard/fs-routes-policy.ts +51 -51
- package/src/guard/graph.ts +1 -1
- package/src/guard/healing.ts +36 -36
- package/src/guard/index.ts +11 -11
- package/src/guard/presets/atomic.ts +70 -70
- package/src/guard/presets/clean.ts +77 -77
- package/src/guard/presets/fsd.ts +79 -79
- package/src/guard/presets/hexagonal.ts +68 -68
- package/src/guard/reporter.ts +442 -442
- package/src/guard/rule-presets.ts +379 -379
- package/src/guard/semantic-slots.ts +1 -1
- package/src/guard/suggestions.ts +358 -358
- package/src/guard/tsgolint-bridge.ts +512 -512
- package/src/guard/types.ts +348 -348
- package/src/guard/watcher.ts +405 -405
- package/src/i18n/define.ts +126 -126
- package/src/i18n/index.ts +52 -52
- package/src/i18n/message-registry.ts +173 -173
- package/src/i18n/types.ts +112 -112
- package/src/id/__tests__/id.test.ts +3 -3
- package/src/id/index.ts +105 -105
- package/src/index.ts +9 -48
- package/src/internal/client-boundary.ts +266 -266
- package/src/internal/index.ts +2 -2
- package/src/kitchen/api/agent-devtools-api.ts +779 -779
- package/src/kitchen/api/bundle-inspector.ts +179 -0
- package/src/kitchen/api/errors-grouping.ts +126 -126
- package/src/kitchen/api/file-api.ts +11 -11
- package/src/kitchen/kitchen-handler.ts +36 -0
- package/src/kitchen/kitchen-ui.ts +456 -0
- package/src/logging/index.ts +22 -22
- package/src/logging/transports.ts +365 -365
- package/src/middleware/bridge.ts +147 -147
- package/src/middleware/compose.ts +134 -134
- package/src/middleware/compress.ts +62 -62
- package/src/middleware/cors.ts +47 -47
- package/src/middleware/csrf.ts +328 -328
- package/src/middleware/define.ts +132 -132
- package/src/middleware/jwt.ts +134 -134
- package/src/middleware/logger.ts +58 -58
- package/src/middleware/oauth/__tests__/oauth.test.ts +1 -1
- package/src/middleware/oauth/index.ts +505 -505
- package/src/middleware/oauth/providers.ts +115 -115
- package/src/middleware/rate-limit/index.ts +522 -522
- package/src/middleware/rate-limit/sqlite-store.ts +382 -382
- package/src/middleware/scheduler-cron.ts +96 -96
- package/src/middleware/secure/__tests__/secure.test.ts +360 -360
- package/src/middleware/secure/csp.ts +193 -193
- package/src/middleware/session.ts +174 -174
- package/src/middleware/timeout.ts +55 -55
- package/src/observability/logger-adapter.ts +36 -36
- package/src/observability/sqlite-store.ts +254 -254
- package/src/openapi/generator.ts +1 -1
- package/src/openapi/openapi.test.ts +43 -43
- package/src/perf/__tests__/user-marks.test.ts +354 -354
- package/src/perf/index.ts +133 -133
- package/src/perf/user-marks.ts +1 -1
- package/src/plugins/__tests__/lifecycle-integration.test.ts +272 -272
- package/src/plugins/__tests__/runner.test.ts +409 -409
- package/src/plugins/define.ts +124 -124
- package/src/plugins/examples/dep-check-plugin.ts +80 -80
- package/src/plugins/examples/prerender-cache-plugin.ts +111 -111
- package/src/plugins/examples/sitemap-plugin.ts +65 -65
- package/src/plugins/runner.ts +361 -361
- package/src/plugins/types.ts +368 -368
- package/src/report/index.ts +1 -1
- package/src/resource/__tests__/generator.test.ts +7 -7
- package/src/resource/__tests__/schema.test.ts +14 -14
- package/src/resource/ddl/__tests__/diff.test.ts +639 -639
- package/src/resource/ddl/__tests__/emit.test.ts +165 -165
- package/src/resource/ddl/__tests__/snapshot.test.ts +499 -499
- package/src/resource/ddl/emit.ts +146 -146
- package/src/resource/ddl/persistence-types.ts +218 -218
- package/src/resource/ddl/type-map.ts +223 -223
- package/src/resource/ddl/types.ts +232 -232
- package/src/resource/generator-repo.ts +630 -630
- package/src/resource/generator-schema.ts +11 -11
- package/src/resource/generators/slot.ts +72 -72
- package/src/resource/schema.ts +21 -21
- package/src/router/client-entry.test.ts +227 -227
- package/src/router/client-entry.ts +218 -218
- package/src/router/fs-patterns.test.ts +96 -96
- package/src/router/fs-routes.test.ts +532 -532
- package/src/router/fs-routes.ts +53 -53
- package/src/router/fs-scanner.ts +216 -216
- package/src/router/fs-types.ts +19 -19
- package/src/router/route-source-analyzer.ts +521 -521
- package/src/routes/index.ts +74 -74
- package/src/routes/metadata-routes.ts +427 -427
- package/src/routes/types.ts +341 -341
- package/src/runtime/__tests__/devtools-adapter.test.ts +68 -68
- package/src/runtime/__tests__/error-boundary-redaction.test.ts +141 -141
- package/src/runtime/__tests__/hdr-client.test.ts +223 -223
- package/src/runtime/__tests__/http-errors.test.ts +117 -117
- package/src/runtime/__tests__/inline-client-hydration.test.ts +237 -237
- package/src/runtime/__tests__/not-found.test.ts +152 -152
- package/src/runtime/__tests__/observability-lifecycle.test.ts +103 -103
- package/src/runtime/__tests__/page-render-response.test.ts +517 -517
- package/src/runtime/__tests__/request-middleware.test.ts +70 -70
- package/src/runtime/__tests__/searchparams-page-props.test.ts +81 -81
- package/src/runtime/adapter.ts +47 -47
- package/src/runtime/boundary.tsx +252 -252
- package/src/runtime/cache.ts +494 -494
- package/src/runtime/compose.ts +222 -222
- package/src/runtime/devtools-adapter.ts +68 -68
- package/src/runtime/escape.ts +34 -34
- package/src/runtime/fast-refresh-runtime.ts +322 -322
- package/src/runtime/fast-refresh-types.ts +1 -1
- package/src/runtime/handler.ts +65 -65
- package/src/runtime/handlers.ts +30 -11
- package/src/runtime/http-errors.ts +113 -113
- package/src/runtime/image-handler.ts +1 -1
- package/src/runtime/lifecycle.ts +381 -381
- package/src/runtime/logger.test.ts +345 -345
- package/src/runtime/middleware.ts +264 -264
- package/src/runtime/not-found.ts +93 -93
- package/src/runtime/observability-lifecycle.ts +290 -290
- package/src/runtime/openapi-endpoint.ts +236 -236
- package/src/runtime/page-render-response.ts +287 -274
- package/src/runtime/ppr.ts +74 -74
- package/src/runtime/rate-limit.ts +1 -1
- package/src/runtime/redirect.ts +1 -1
- package/src/runtime/registry.ts +171 -171
- package/src/runtime/request-middleware.ts +31 -31
- package/src/runtime/router.test.ts +4 -4
- package/src/runtime/router.ts +10 -10
- package/src/runtime/server.ts +127 -211
- package/src/runtime/shims.ts +48 -48
- package/src/runtime/ssr.ts +43 -17
- package/src/runtime/static-files.ts +369 -289
- package/src/runtime/streaming-ssr.ts +219 -180
- package/src/runtime/trace.ts +144 -144
- package/src/scheduler/__tests__/scheduler.test.ts +12 -11
- package/src/scheduler/index.ts +11 -5
- package/src/scheduler/validate.ts +169 -169
- package/src/seo/index.ts +219 -219
- package/src/seo/integration/ssr.ts +306 -306
- package/src/seo/render/basic.ts +435 -435
- package/src/seo/render/index.ts +143 -143
- package/src/seo/render/jsonld.ts +539 -539
- package/src/seo/render/opengraph.ts +197 -197
- package/src/seo/render/robots.ts +116 -116
- package/src/seo/render/sitemap.ts +137 -137
- package/src/seo/render/twitter.ts +127 -127
- package/src/seo/resolve/opengraph.ts +143 -143
- package/src/seo/resolve/robots.ts +73 -73
- package/src/seo/resolve/title.ts +94 -94
- package/src/seo/resolve/twitter.ts +73 -73
- package/src/seo/resolve/url.ts +104 -104
- package/src/seo/routes/index.ts +290 -290
- package/src/seo/types.ts +588 -588
- package/src/slot/validator.ts +39 -39
- package/src/spec/schema.ts +35 -35
- package/src/storage/s3/__tests__/s3.test.ts +479 -479
- package/src/storage/s3/index.ts +412 -412
- package/src/testing/__tests__/assertions.test.ts +632 -632
- package/src/testing/__tests__/reporter.test.ts +454 -454
- package/src/testing/assertions.ts +986 -986
- package/src/testing/db.ts +157 -157
- package/src/testing/index.ts +9 -3
- package/src/testing/lcov.ts +192 -0
- package/src/testing/mocks.ts +203 -203
- package/src/testing/session.ts +190 -190
- package/src/types/branded.ts +56 -56
- package/src/types/index.ts +1 -1
- package/src/utils/safe-io.ts +188 -188
- package/src/utils/string-safe.ts +298 -298
- package/src/watcher/__tests__/watcher.test.ts +59 -59
- package/src/watcher/watcher.ts +61 -61
package/src/bundler/build.ts
CHANGED
|
@@ -22,7 +22,15 @@ import { defaultBundlerPlugins } from "./plugins";
|
|
|
22
22
|
import type { BunPlugin } from "bun";
|
|
23
23
|
import { mark, measure } from "../perf";
|
|
24
24
|
import { HMR_PERF } from "../perf/hmr-markers";
|
|
25
|
-
import { runOnBundleComplete } from "../plugins/runner";
|
|
25
|
+
import { runOnBundleComplete } from "../plugins/runner";
|
|
26
|
+
import {
|
|
27
|
+
beginBuildGeneration,
|
|
28
|
+
failBuildGeneration,
|
|
29
|
+
publishBuildGeneration,
|
|
30
|
+
resolveActiveBuildArtifacts,
|
|
31
|
+
runSerializedClientBuild,
|
|
32
|
+
} from "./generation";
|
|
33
|
+
import { validateBundleManifest } from "./manifest-schema";
|
|
26
34
|
import {
|
|
27
35
|
describeMissingHydrationClientModule,
|
|
28
36
|
validateClientModuleForBrowserBundle,
|
|
@@ -38,7 +46,7 @@ import {
|
|
|
38
46
|
import path from "path";
|
|
39
47
|
import fs from "fs/promises";
|
|
40
48
|
|
|
41
|
-
interface BoundaryBundleBuild {
|
|
49
|
+
interface BoundaryBundleBuild {
|
|
42
50
|
id: string;
|
|
43
51
|
route: string;
|
|
44
52
|
js: string;
|
|
@@ -48,7 +56,12 @@ interface BoundaryBundleBuild {
|
|
|
48
56
|
hydrate: string;
|
|
49
57
|
size: number;
|
|
50
58
|
gzipSize: number;
|
|
51
|
-
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
interface InternalBundlerOptions extends BundlerOptions {
|
|
62
|
+
/** Staged bundle manifest used by the generation wrapper. */
|
|
63
|
+
__manifestPath?: string;
|
|
64
|
+
}
|
|
52
65
|
|
|
53
66
|
/**
|
|
54
67
|
* Resolve Mandu's default bundler plugin set from a `BundlerOptions`
|
|
@@ -119,7 +132,7 @@ function nodeEnvDefine(options: BundlerOptions): string {
|
|
|
119
132
|
const FAST_REFRESH_SELF_ALIAS_PATTERN =
|
|
120
133
|
/^var\s+([A-Za-z_$][A-Za-z0-9_$]*)\s*=\s*\1;\s*\r?\n(?=\$RefreshReg\$\(\1,\s*["'][^"']*:default["']\);)/gm;
|
|
121
134
|
|
|
122
|
-
function resolveClientOutDir(rootDir: string, outDir?: string): string {
|
|
135
|
+
function resolveClientOutDir(rootDir: string, outDir?: string): string {
|
|
123
136
|
const defaultOutDir = path.join(rootDir, ".mandu/client");
|
|
124
137
|
if (!outDir) return defaultOutDir;
|
|
125
138
|
|
|
@@ -129,7 +142,19 @@ function resolveClientOutDir(rootDir: string, outDir?: string): string {
|
|
|
129
142
|
}
|
|
130
143
|
|
|
131
144
|
return resolvedOutDir;
|
|
132
|
-
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function resolveBundleManifestPath(
|
|
148
|
+
rootDir: string,
|
|
149
|
+
options: InternalBundlerOptions,
|
|
150
|
+
): string {
|
|
151
|
+
return options.__manifestPath ?? path.join(rootDir, ".mandu", "manifest.json");
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function usesDefaultClientOutDir(rootDir: string, outDir?: string): boolean {
|
|
155
|
+
return path.normalize(resolveClientOutDir(rootDir, outDir)) ===
|
|
156
|
+
path.normalize(path.join(rootDir, ".mandu", "client"));
|
|
157
|
+
}
|
|
133
158
|
|
|
134
159
|
/**
|
|
135
160
|
* Scan for *.island.tsx / *.island.ts files across hydrated route directories.
|
|
@@ -1979,7 +2004,7 @@ function calculateStats(
|
|
|
1979
2004
|
*
|
|
1980
2005
|
* @example
|
|
1981
2006
|
* ```typescript
|
|
1982
|
-
* import { buildClientBundles } from "@mandujs/core/bundler";
|
|
2007
|
+
* import { buildClientBundles } from "@mandujs/core/compat/bundler/index";
|
|
1983
2008
|
*
|
|
1984
2009
|
* const result = await buildClientBundles(manifest, "./my-app", {
|
|
1985
2010
|
* minify: true,
|
|
@@ -1991,15 +2016,79 @@ function calculateStats(
|
|
|
1991
2016
|
* }
|
|
1992
2017
|
* ```
|
|
1993
2018
|
*/
|
|
1994
|
-
export async function buildClientBundles(
|
|
1995
|
-
manifest: RoutesManifest,
|
|
1996
|
-
rootDir: string,
|
|
1997
|
-
options: BundlerOptions = {}
|
|
1998
|
-
): Promise<BundleResult> {
|
|
2019
|
+
export async function buildClientBundles(
|
|
2020
|
+
manifest: RoutesManifest,
|
|
2021
|
+
rootDir: string,
|
|
2022
|
+
options: BundlerOptions = {}
|
|
2023
|
+
): Promise<BundleResult> {
|
|
2024
|
+
if (!usesDefaultClientOutDir(rootDir, options.outDir)) {
|
|
2025
|
+
return buildClientBundlesInternal(manifest, rootDir, options);
|
|
2026
|
+
}
|
|
2027
|
+
|
|
2028
|
+
return runSerializedClientBuild(rootDir, async () => {
|
|
2029
|
+
let previousPublishedManifest: BundleManifest | null = null;
|
|
2030
|
+
const activeBeforeBuild = await resolveActiveBuildArtifacts(rootDir);
|
|
2031
|
+
if (activeBeforeBuild.source === "generation") {
|
|
2032
|
+
try {
|
|
2033
|
+
const raw = await fs.readFile(activeBeforeBuild.manifestPath, "utf8");
|
|
2034
|
+
const parsed = validateBundleManifest(JSON.parse(raw));
|
|
2035
|
+
if (parsed.generationId === activeBeforeBuild.generationId) {
|
|
2036
|
+
previousPublishedManifest = parsed;
|
|
2037
|
+
}
|
|
2038
|
+
} catch (error) {
|
|
2039
|
+
console.warn(
|
|
2040
|
+
`[Mandu] Last published manifest is invalid and will not be reused: ${
|
|
2041
|
+
error instanceof Error ? error.message : String(error)
|
|
2042
|
+
}`,
|
|
2043
|
+
);
|
|
2044
|
+
}
|
|
2045
|
+
}
|
|
2046
|
+
|
|
2047
|
+
const generation = await beginBuildGeneration(rootDir);
|
|
2048
|
+
try {
|
|
2049
|
+
const result = await buildClientBundlesInternal(manifest, rootDir, {
|
|
2050
|
+
...options,
|
|
2051
|
+
outDir: generation.clientDir,
|
|
2052
|
+
__manifestPath: generation.manifestPath,
|
|
2053
|
+
});
|
|
2054
|
+
|
|
2055
|
+
if (!result.success) {
|
|
2056
|
+
await failBuildGeneration(generation, result.errors);
|
|
2057
|
+
return {
|
|
2058
|
+
...result,
|
|
2059
|
+
manifest: previousPublishedManifest ?? createEmptyManifest(
|
|
2060
|
+
options.mode === "production" ? "production" : "development",
|
|
2061
|
+
),
|
|
2062
|
+
};
|
|
2063
|
+
}
|
|
2064
|
+
|
|
2065
|
+
result.manifest.generationId = generation.id;
|
|
2066
|
+
await fs.writeFile(
|
|
2067
|
+
generation.manifestPath,
|
|
2068
|
+
`${JSON.stringify(result.manifest, null, 2)}\n`,
|
|
2069
|
+
"utf8",
|
|
2070
|
+
);
|
|
2071
|
+
await publishBuildGeneration(generation);
|
|
2072
|
+
return result;
|
|
2073
|
+
} catch (error) {
|
|
2074
|
+
await failBuildGeneration(generation, [
|
|
2075
|
+
error instanceof Error ? error.message : String(error),
|
|
2076
|
+
]);
|
|
2077
|
+
throw error;
|
|
2078
|
+
}
|
|
2079
|
+
});
|
|
2080
|
+
}
|
|
2081
|
+
|
|
2082
|
+
async function buildClientBundlesInternal(
|
|
2083
|
+
manifest: RoutesManifest,
|
|
2084
|
+
rootDir: string,
|
|
2085
|
+
options: InternalBundlerOptions = {},
|
|
2086
|
+
): Promise<BundleResult> {
|
|
1999
2087
|
mark("bundler:full");
|
|
2000
|
-
const startTime = performance.now();
|
|
2001
|
-
const outputs: BundleOutput[] = [];
|
|
2002
|
-
const errors: string[] = [];
|
|
2088
|
+
const startTime = performance.now();
|
|
2089
|
+
const outputs: BundleOutput[] = [];
|
|
2090
|
+
const errors: string[] = [];
|
|
2091
|
+
const bundleManifestPath = resolveBundleManifestPath(rootDir, options);
|
|
2003
2092
|
|
|
2004
2093
|
// Phase 18.τ — fire `onBundleComplete(stats)` before returning. Helper
|
|
2005
2094
|
// is inlined here so every return path in this function can opt in
|
|
@@ -2057,7 +2146,7 @@ export async function buildClientBundles(
|
|
|
2057
2146
|
if (hydratedRoutes.length === 0 && partialFiles.length === 0) {
|
|
2058
2147
|
// #185: skipFrameworkBundles 모드에서는 기존 manifest를 그대로 유지 (devtools 재빌드도 스킵)
|
|
2059
2148
|
if (options.skipFrameworkBundles && errors.length === 0) {
|
|
2060
|
-
const manifestPath =
|
|
2149
|
+
const manifestPath = bundleManifestPath;
|
|
2061
2150
|
try {
|
|
2062
2151
|
const manifestRaw = await fs.readFile(manifestPath, "utf-8");
|
|
2063
2152
|
let existing: BundleManifest;
|
|
@@ -2104,7 +2193,7 @@ export async function buildClientBundles(
|
|
|
2104
2193
|
|
|
2105
2194
|
const emptyManifest = createEmptyManifest(env);
|
|
2106
2195
|
await fs.writeFile(
|
|
2107
|
-
|
|
2196
|
+
bundleManifestPath,
|
|
2108
2197
|
JSON.stringify(emptyManifest, null, 2)
|
|
2109
2198
|
);
|
|
2110
2199
|
return {
|
|
@@ -2154,11 +2243,11 @@ export async function buildClientBundles(
|
|
|
2154
2243
|
// 기존 매니페스트를 읽어 변경된 Island만 갱신
|
|
2155
2244
|
let existingManifest: BundleManifest;
|
|
2156
2245
|
try {
|
|
2157
|
-
const manifestData = await fs.readFile(
|
|
2246
|
+
const manifestData = await fs.readFile(bundleManifestPath, "utf-8");
|
|
2158
2247
|
existingManifest = JSON.parse(manifestData) as BundleManifest;
|
|
2159
2248
|
} catch {
|
|
2160
2249
|
// 기존 매니페스트 없으면 전체 빌드로 재시도 (targetRouteIds 제거)
|
|
2161
|
-
return
|
|
2250
|
+
return buildClientBundlesInternal(manifest, rootDir, { ...options, targetRouteIds: undefined });
|
|
2162
2251
|
}
|
|
2163
2252
|
|
|
2164
2253
|
// Only update manifest with successfully built outputs (#10: preserve previous good manifest on failure)
|
|
@@ -2187,7 +2276,7 @@ export async function buildClientBundles(
|
|
|
2187
2276
|
);
|
|
2188
2277
|
|
|
2189
2278
|
await fs.writeFile(
|
|
2190
|
-
|
|
2279
|
+
bundleManifestPath,
|
|
2191
2280
|
JSON.stringify(existingManifest, null, 2)
|
|
2192
2281
|
);
|
|
2193
2282
|
}
|
|
@@ -2211,7 +2300,7 @@ export async function buildClientBundles(
|
|
|
2211
2300
|
if (options.skipFrameworkBundles) {
|
|
2212
2301
|
let existingManifest: BundleManifest;
|
|
2213
2302
|
try {
|
|
2214
|
-
const manifestData = await fs.readFile(
|
|
2303
|
+
const manifestData = await fs.readFile(bundleManifestPath, "utf-8");
|
|
2215
2304
|
existingManifest = JSON.parse(manifestData) as BundleManifest;
|
|
2216
2305
|
} catch (parseError) {
|
|
2217
2306
|
// 기존 매니페스트 없음/corrupt → 경고 후 full build로 fallback
|
|
@@ -2220,7 +2309,7 @@ export async function buildClientBundles(
|
|
|
2220
2309
|
`[Mandu] Existing manifest is corrupt, falling back to full build: ${parseError.message}`,
|
|
2221
2310
|
);
|
|
2222
2311
|
}
|
|
2223
|
-
return
|
|
2312
|
+
return buildClientBundlesInternal(manifest, rootDir, { ...options, skipFrameworkBundles: false });
|
|
2224
2313
|
}
|
|
2225
2314
|
|
|
2226
2315
|
// #186 hardening: 필수 필드 검증 — 누락 시 full build로 fallback
|
|
@@ -2233,7 +2322,7 @@ export async function buildClientBundles(
|
|
|
2233
2322
|
console.warn(
|
|
2234
2323
|
"[Mandu] Existing manifest missing required fields (shared/bundles), falling back to full build",
|
|
2235
2324
|
);
|
|
2236
|
-
return
|
|
2325
|
+
return buildClientBundlesInternal(manifest, rootDir, { ...options, skipFrameworkBundles: false });
|
|
2237
2326
|
}
|
|
2238
2327
|
|
|
2239
2328
|
for (const routeId of invalidClientRouteIds) {
|
|
@@ -2360,7 +2449,7 @@ export async function buildClientBundles(
|
|
|
2360
2449
|
}
|
|
2361
2450
|
|
|
2362
2451
|
await fs.writeFile(
|
|
2363
|
-
|
|
2452
|
+
bundleManifestPath,
|
|
2364
2453
|
JSON.stringify(existingManifest, null, 2),
|
|
2365
2454
|
);
|
|
2366
2455
|
|
|
@@ -2531,7 +2620,7 @@ export async function buildClientBundles(
|
|
|
2531
2620
|
);
|
|
2532
2621
|
|
|
2533
2622
|
await fs.writeFile(
|
|
2534
|
-
|
|
2623
|
+
bundleManifestPath,
|
|
2535
2624
|
JSON.stringify(bundleManifest, null, 2)
|
|
2536
2625
|
);
|
|
2537
2626
|
|