fix(bundler): preserve framework loader paths#5930
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds an eggLoader manifest extension end-to-end: bundler normalizes and emits an ChangesLoader Manifest Integration
Sequence DiagramsequenceDiagram
participant Bundler as Egg Bundler
participant MS as ManifestStore
participant Loader as EggLoader
participant App as Application
Bundler->>Bundler: normalize `eggLoader` extension (eggPaths, plugins)
Bundler->>Bundler: emit runtime path-patching helpers in EntryGenerator
Bundler->>MS: produce StartupManifest / set bundle store
App->>Loader: instantiate EggLoader(baseDir)
Loader->>MS: query bundle store for manifest extension
MS-->>Loader: return `eggLoader` (eggPaths, plugins)
Loader->>Loader: getEggPaths() — use manifest eggPaths if present
Loader->>Loader: loadPlugin()
Loader->>Loader: applyManifestPluginInfo(allPlugins)
Loader->>Loader: collectLoaderManifestExtension()
Loader-->>App: plugins and paths resolved using manifest
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Tip 💬 Introducing Slack Agent: The best way for teams to turn conversations into code.Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.
Built for teams:
One agent for your entire SDLC. Right inside Slack. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Deploying egg with
|
| Latest commit: |
7a1c06f
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://72e7f907.egg-cci.pages.dev |
| Branch Preview URL: | https://agent-egg-dev-0263e5d5.egg-cci.pages.dev |
Deploying egg-v3 with
|
| Latest commit: |
7a1c06f
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://c8ee0cfa.egg-v3.pages.dev |
| Branch Preview URL: | https://agent-egg-dev-0263e5d5.egg-v3.pages.dev |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## next #5930 +/- ##
==========================================
+ Coverage 85.18% 85.23% +0.04%
==========================================
Files 668 668
Lines 19284 19330 +46
Branches 3782 3801 +19
==========================================
+ Hits 16428 16475 +47
+ Misses 2464 2463 -1
Partials 392 392 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Code Review
This pull request introduces a mechanism to persist and restore the EggLoader state using a manifest extension named eggLoader. It includes changes to EggLoader for collecting and applying manifest information, updates to the egg-bundler to handle these extensions during the bundling process, and patches the framework's customEggPaths to ensure correct path resolution in bundled environments. Feedback is provided regarding the use of absolute path resolution in isBundleOutputRootPath checks to ensure consistency across different working directories.
| } | ||
|
|
||
| #isBundleOutputRootPath(filepath: string): boolean { | ||
| return path.resolve(filepath) === path.resolve(this.options.baseDir); |
There was a problem hiding this comment.
When checking if a path matches the bundle output root, it is safer to resolve filepath relative to this.options.baseDir rather than the current working directory (process.cwd()). This ensures consistent behavior regardless of where the process was started, especially in environments where the application might be executed from a different directory.
| return path.resolve(filepath) === path.resolve(this.options.baseDir); | |
| return path.resolve(this.options.baseDir, filepath) === path.resolve(this.options.baseDir); |
References
- When using a global bundle store, verify that its baseDir matches the requested baseDir to prevent using an incorrect manifest in multi-application environments.
| ), | ||
| ); | ||
| const __isOutputRootPath = (filepath: unknown) => | ||
| typeof filepath === 'string' && path.resolve(filepath) === path.resolve(__outputDir); |
There was a problem hiding this comment.
Resolving filepath relative to __outputDir ensures that relative paths are correctly handled even if the process is started from a directory other than the bundle output root. This improves the robustness of the generated entry script.
| typeof filepath === 'string' && path.resolve(filepath) === path.resolve(__outputDir); | |
| typeof filepath === 'string' && path.resolve(__outputDir, filepath) === path.resolve(__outputDir); |
References
- When filtering file paths, avoid broad substring checks like includes('node_modules'). Instead, match against exact path segments to prevent incorrect matches on similarly named directories or files.
There was a problem hiding this comment.
Pull request overview
This PR extends the startup manifest and bundled runtime bootstrap so Egg’s loader can preserve framework eggPaths and plugin path metadata across bundling, preventing framework config/plugin resolution from collapsing onto the bundle output directory.
Changes:
- Record loader metadata (
eggPaths+ plugin path/deps metadata) into a newextensions.eggLoaderstartup-manifest extension and replay it at runtime during plugin/eggPaths resolution. - Normalize the new
eggLoaderextension paths when loading manifests in@eggjs/egg-bundler. - Patch bundled worker entry to virtualize framework
customEggPaths()so framework paths resolve under<outputDir>/node_modules/...beforestartEgg()runs.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| packages/core/src/loader/egg_loader.ts | Collects and replays extensions.eggLoader (eggPaths + plugin metadata) to stabilize loader resolution in bundled runtime. |
| packages/core/test/loader/mixin/load_plugin.test.ts | Adds coverage that bundled loader manifest eggPaths/plugin paths are applied; resets bundle store after tests. |
| tools/egg-bundler/src/lib/ManifestLoader.ts | Normalizes extensions.eggLoader paths via the existing moduleMap normalization flow. |
| tools/egg-bundler/src/lib/EntryGenerator.ts | Injects runtime patching of framework customEggPaths() to ensure node_modules-based framework paths in the bundle output. |
| tools/egg-bundler/test/ManifestLoader.test.ts | Updates manifest normalization expectations to include the new eggLoader extension output. |
| tools/egg-bundler/test/EntryGenerator.test.ts | Adds an execution test verifying framework eggPaths are virtualized prior to startEgg(). |
| tools/egg-bundler/test/snapshots/EntryGenerator.worker.canonical.snap | Updates canonical worker-entry snapshot to reflect the new runtime patch logic. |
| const __packageRoot = (specifier: string) => path.join(__outputDir, 'node_modules', ...specifier.split('/')); | ||
| const __frameworkPaths = Array.from( | ||
| new Set( | ||
| [__packageRoot(__framework), __framework === 'egg' ? undefined : __packageRoot('egg')].filter( | ||
| (filepath): filepath is string => typeof filepath === 'string', | ||
| ), | ||
| ), | ||
| ); |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
packages/core/src/loader/egg_loader.ts (1)
954-997: 💤 Low valueLGTM — apply/collect lifecycle is ordered correctly.
#applyManifestPluginInforuns at line 477 (after#extendPlugins, beforegetPluginPath/#mergePluginConfigin the loop), so manifest paths can preempt the lookup-by-package fallback when the bundled config setspathto the bundle root sentinel. The(!plugin.path || this.#isBundleOutputRootPath(plugin.path))predicate is the right gate — explicit non-root paths from app/custom plugin configs still win.
#collectLoaderManifestExtensionat line 526 runs after the resolution loop, so every entry inthis.allPluginsalready hasplugin.pathpopulated bygetPluginPath, and#mergePluginConfighas filledversion/dependencies/etc. frompackage.json.One subtle but correct design choice worth calling out: this method intentionally uses
this.manifestwhilegetEggPathsusesManifestStore.getBundleStore(). That asymmetry is required becausegetEggPathsis invoked from the constructor at line 162 — beforethis.manifestis assigned at line 186-188 — whereas#applyManifestPluginInforuns duringloadPlugin()after construction. Worth a one-line comment to prevent future "consistency" refactors that would break the constructor path.📝 Optional clarifying comment
`#applyManifestPluginInfo`(allPlugins: Record<string, EggPluginInfo>): void { + // NOTE: `getEggPaths` reads the bundle store directly because it runs + // in the constructor before `this.manifest` is assigned. Here we can + // safely go through `this.manifest`, which already accounts for the + // bundle store via ManifestStore.load fallback. const extension = this.manifest.getExtension(LOADER_MANIFEST_EXTENSION) as LoaderManifestExtension | undefined;🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/core/src/loader/egg_loader.ts` around lines 954 - 997, Add a one-line clarifying comment above the private method `#collectLoaderManifestExtension` explaining why it accesses this.manifest directly (instead of using ManifestStore.getBundleStore() like getEggPaths does): note that getEggPaths is called from the constructor before this.manifest is assigned, whereas `#collectLoaderManifestExtension` runs later during loadPlugin(), so the asymmetry is intentional to avoid breaking the constructor path; reference getEggPaths, ManifestStore.getBundleStore, the constructor, and this.manifest in the comment so future maintainers understand the reason.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@packages/core/src/loader/egg_loader.ts`:
- Around line 954-997: Add a one-line clarifying comment above the private
method `#collectLoaderManifestExtension` explaining why it accesses this.manifest
directly (instead of using ManifestStore.getBundleStore() like getEggPaths
does): note that getEggPaths is called from the constructor before this.manifest
is assigned, whereas `#collectLoaderManifestExtension` runs later during
loadPlugin(), so the asymmetry is intentional to avoid breaking the constructor
path; reference getEggPaths, ManifestStore.getBundleStore, the constructor, and
this.manifest in the comment so future maintainers understand the reason.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: c045f664-b1e6-4374-a5e9-ff6cf7bb95ce
⛔ Files ignored due to path filters (1)
tools/egg-bundler/test/__snapshots__/EntryGenerator.worker.canonical.snapis excluded by!**/*.snap
📒 Files selected for processing (6)
packages/core/src/loader/egg_loader.tspackages/core/test/loader/mixin/load_plugin.test.tstools/egg-bundler/src/lib/EntryGenerator.tstools/egg-bundler/src/lib/ManifestLoader.tstools/egg-bundler/test/EntryGenerator.test.tstools/egg-bundler/test/ManifestLoader.test.ts
8ba5f29 to
1972f2a
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@tools/egg-bundler/src/lib/EntryGenerator.ts`:
- Around line 298-304: Replace the current reconstruction of __frameworkPaths
with the eggPaths recorded in the loader manifest (use
manifest.extensions.eggLoader.eggPaths as the primary source) and only fall back
to the existing heuristic that builds from __framework and __packageRoot when
that manifest value is missing or empty; update the code that defines
__frameworkPaths to prefer manifest.extensions.eggLoader.eggPaths (while keeping
type filtering like the current .filter((filepath): filepath is string => ...))
and leave the current array-from-new-Set/__packageRoot logic as the fallback to
ensure customEggPaths() works for stacked/nested frameworks.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: d5c1d666-79ed-4178-a69f-a81d11026e77
⛔ Files ignored due to path filters (1)
tools/egg-bundler/test/__snapshots__/EntryGenerator.worker.canonical.snapis excluded by!**/*.snap
📒 Files selected for processing (6)
packages/core/src/loader/egg_loader.tspackages/core/test/loader/mixin/load_plugin.test.tstools/egg-bundler/src/lib/EntryGenerator.tstools/egg-bundler/src/lib/ManifestLoader.tstools/egg-bundler/test/EntryGenerator.test.tstools/egg-bundler/test/ManifestLoader.test.ts
1972f2a to
8af2469
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/core/src/loader/egg_loader.ts`:
- Around line 398-405: The current logic in EggLoader replaces runtime eggPaths
with the manifest snapshot when a bundleStore manifest provides
extension.eggPaths; instead, merge those manifest paths with the existing
runtime paths from customEggPaths() so worker-preserved non-root paths are kept.
In the block that reads bundleStore via ManifestStore.getBundleStore() and
inspects (bundleStore.getExtension(LOADER_MANIFEST_EXTENSION) as
LoaderManifestExtension), combine extension.eggPaths (mapped through
this.#toManifestAbsolute) with the result of this.customEggPaths() (or whatever
runtime source EggLoader uses) rather than returning only the manifest list,
producing a unified de-duplicated array used by EggLoader/startup.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 856e1936-aab6-4736-ae52-0b3ca5675656
⛔ Files ignored due to path filters (1)
tools/egg-bundler/test/__snapshots__/EntryGenerator.worker.canonical.snapis excluded by!**/*.snap
📒 Files selected for processing (6)
packages/core/src/loader/egg_loader.tspackages/core/test/loader/mixin/load_plugin.test.tstools/egg-bundler/src/lib/EntryGenerator.tstools/egg-bundler/src/lib/ManifestLoader.tstools/egg-bundler/test/EntryGenerator.test.tstools/egg-bundler/test/ManifestLoader.test.ts
8af2469 to
652508e
Compare
There was a problem hiding this comment.
🧹 Nitpick comments (2)
packages/core/src/loader/egg_loader.ts (2)
70-82: 💤 Low valueOptional: dedupe
LoaderManifestExtension/LoaderManifestPluginInfoacross packages.The same shape is declared again in
tools/egg-bundler/src/lib/ManifestLoader.ts(lines 41-50) with a slightly different surface (an extra[key: string]: unknownindex signature). Since the bundler reads from the same on-disk manifest the runtime serializes here, divergence between the two definitions can silently drift (e.g. fields added to runtimeLoaderManifestPluginInfolikeversionare not represented on the bundler side). Consider exporting these from@eggjs/core(e.g. alongsideStartupManifest) and importing them inManifestLoader.tsso both sides stay in lock-step.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/core/src/loader/egg_loader.ts` around lines 70 - 82, The two types LoaderManifestPluginInfo and LoaderManifestExtension are duplicated between packages and can drift; export these interfaces from the core package (where they are currently declared) and update the tools/egg-bundler/src/lib/ManifestLoader.ts to import them instead of redeclaring; ensure the exported symbols (LoaderManifestPluginInfo, LoaderManifestExtension) are added to the public API (e.g., index exports) so ManifestLoader.ts can consume the exact same shapes and remove its local duplicate declaration.
987-1003: 💤 Low valueRecollecting into a bundle store overwrites the persisted extension at runtime — verify this is intentional.
When
this.manifestis the bundle store (i.e. runtime startup with a bundled manifest),setExtension('eggLoader', …)registers a fresh extension into#extensionCollector, whichgetExtensionreturns in preference tothis.data.extensions.eggLoader. The newly-collected payload is derived fromthis.allPlugins/this.eggPathswhich already carry the manifest data merged into them, so functionally it's a near round-trip; butthis.eggPathshere also includes paths preserved fromcustomEggPaths()that may not normalize cleanly (#toManifestRelativewill produce../…for paths outsidebaseDir). If any later code path re-readseggLoaderfrom the same store, it will see the runtime-merged form rather than the bundler-normalized one. If the intent is to only collect during manifest-generation phase, gating this onmetadataOnly/non-bundle store would make the contract more obvious.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/core/src/loader/egg_loader.ts` around lines 987 - 1003, The method `#collectLoaderManifestExtension` currently unconditionally calls this.manifest.setExtension(...) which overwrites a bundled runtime store extension with a runtime-merged payload derived from this.allPlugins and this.eggPaths (processed via `#toManifestRelative`), causing non-normalized paths from customEggPaths to replace the bundler-normalized data; change this to only collect/set the extension when operating in manifest-generation mode (e.g., when metadataOnly is true or when this.manifest is not the bundle store) so bundled manifests are not mutated at runtime—add a guard in `#collectLoaderManifestExtension` that checks the store mode (or a metadataOnly flag) before calling setExtension/getExtension and leave existing bundled extension data intact when running from a bundle.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@packages/core/src/loader/egg_loader.ts`:
- Around line 70-82: The two types LoaderManifestPluginInfo and
LoaderManifestExtension are duplicated between packages and can drift; export
these interfaces from the core package (where they are currently declared) and
update the tools/egg-bundler/src/lib/ManifestLoader.ts to import them instead of
redeclaring; ensure the exported symbols (LoaderManifestPluginInfo,
LoaderManifestExtension) are added to the public API (e.g., index exports) so
ManifestLoader.ts can consume the exact same shapes and remove its local
duplicate declaration.
- Around line 987-1003: The method `#collectLoaderManifestExtension` currently
unconditionally calls this.manifest.setExtension(...) which overwrites a bundled
runtime store extension with a runtime-merged payload derived from
this.allPlugins and this.eggPaths (processed via `#toManifestRelative`), causing
non-normalized paths from customEggPaths to replace the bundler-normalized data;
change this to only collect/set the extension when operating in
manifest-generation mode (e.g., when metadataOnly is true or when this.manifest
is not the bundle store) so bundled manifests are not mutated at runtime—add a
guard in `#collectLoaderManifestExtension` that checks the store mode (or a
metadataOnly flag) before calling setExtension/getExtension and leave existing
bundled extension data intact when running from a bundle.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 0d2e32a6-4448-463d-818f-c79a43191718
⛔ Files ignored due to path filters (1)
tools/egg-bundler/test/__snapshots__/EntryGenerator.worker.canonical.snapis excluded by!**/*.snap
📒 Files selected for processing (6)
packages/core/src/loader/egg_loader.tspackages/core/test/loader/mixin/load_plugin.test.tstools/egg-bundler/src/lib/EntryGenerator.tstools/egg-bundler/src/lib/ManifestLoader.tstools/egg-bundler/test/EntryGenerator.test.tstools/egg-bundler/test/ManifestLoader.test.ts
652508e to
82e60d2
Compare
| Object.defineProperty(proto, 'customEggPaths', { | ||
| configurable: true, | ||
| value: function () { | ||
| const originalPaths = typeof original === 'function' ? original.call(this) : []; | ||
| const preservedPaths = Array.isArray(originalPaths) | ||
| ? originalPaths.filter((p: unknown) => !__isOutputRootPath(p)) | ||
| : []; | ||
| return Array.from(new Set([...__frameworkPaths, ...preservedPaths])); | ||
| }, | ||
| }); |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
tools/egg-bundler/src/lib/EntryGenerator.ts (1)
313-327: ⚡ Quick winDefensive check for non-configurable
customEggPathsis missing in the generated__patchFrameworkPaths.
Object.definePropertythrowsTypeError: Cannot redefine property: customEggPathswhen the property descriptor hasconfigurable: false. Standard ES class methods are configurable, but if a framework usesObject.defineProperty(..., { configurable: false })to definecustomEggPaths, the bundled worker startup will crash with no fallback.🛡️ Proposed defensive patch in the emitted template
const __patchFrameworkPaths = (Clazz: unknown) => { const proto = (Clazz as { prototype?: Record<string, unknown> } | undefined)?.prototype; if (!proto) return; const original = proto.customEggPaths; - Object.defineProperty(proto, 'customEggPaths', { - configurable: true, - value: function () { - const originalPaths = typeof original === 'function' ? original.call(this) : []; - const preservedPaths = Array.isArray(originalPaths) - ? originalPaths.filter((p: unknown) => !__isOutputRootPath(p)) - : []; - return Array.from(new Set([...__frameworkPaths, ...preservedPaths])); - }, - }); + try { + Object.defineProperty(proto, 'customEggPaths', { + configurable: true, + value: function () { + const originalPaths = typeof original === 'function' ? original.call(this) : []; + const preservedPaths = Array.isArray(originalPaths) + ? originalPaths.filter((p: unknown) => !__isOutputRootPath(p)) + : []; + return Array.from(new Set([...__frameworkPaths, ...preservedPaths])); + }, + }); + } catch { + // customEggPaths is non-configurable; fall back to proto assignment (may silently fail in strict mode) + (proto as { customEggPaths?: unknown }).customEggPaths = function (this: unknown) { + const originalPaths = typeof original === 'function' ? (original as (...a: unknown[]) => unknown).call(this) : []; + const preservedPaths = Array.isArray(originalPaths) + ? originalPaths.filter((p: unknown) => !__isOutputRootPath(p)) + : []; + return Array.from(new Set([...__frameworkPaths, ...preservedPaths])); + }; + } };🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@tools/egg-bundler/src/lib/EntryGenerator.ts` around lines 313 - 327, The patch must defensively handle non-configurable customEggPaths descriptors: inside __patchFrameworkPaths inspect Object.getOwnPropertyDescriptor(proto, 'customEggPaths'); if no descriptor or descriptor.configurable is true, use Object.defineProperty as before; if descriptor exists and configurable is false but descriptor.writable is true, assign proto.customEggPaths = function (...) { ... } (preserving original via the original variable and using __frameworkPaths and __isOutputRootPath); if descriptor exists and configurable is false and writable is false, do nothing (skip patch) to avoid TypeError. Ensure you reference __patchFrameworkPaths, proto, customEggPaths, original, __frameworkPaths and __isOutputRootPath when making the checks and fallback.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@tools/egg-bundler/src/lib/EntryGenerator.ts`:
- Around line 313-327: The patch must defensively handle non-configurable
customEggPaths descriptors: inside __patchFrameworkPaths inspect
Object.getOwnPropertyDescriptor(proto, 'customEggPaths'); if no descriptor or
descriptor.configurable is true, use Object.defineProperty as before; if
descriptor exists and configurable is false but descriptor.writable is true,
assign proto.customEggPaths = function (...) { ... } (preserving original via
the original variable and using __frameworkPaths and __isOutputRootPath); if
descriptor exists and configurable is false and writable is false, do nothing
(skip patch) to avoid TypeError. Ensure you reference __patchFrameworkPaths,
proto, customEggPaths, original, __frameworkPaths and __isOutputRootPath when
making the checks and fallback.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: c5e92c67-aee9-4a83-82e9-6dc65c44876c
⛔ Files ignored due to path filters (1)
tools/egg-bundler/test/__snapshots__/EntryGenerator.worker.canonical.snapis excluded by!**/*.snap
📒 Files selected for processing (6)
packages/core/src/loader/egg_loader.tspackages/core/test/loader/mixin/load_plugin.test.tstools/egg-bundler/src/lib/EntryGenerator.tstools/egg-bundler/src/lib/ManifestLoader.tstools/egg-bundler/test/EntryGenerator.test.tstools/egg-bundler/test/ManifestLoader.test.ts
82e60d2 to
72a3259
Compare
72a3259 to
1fb5f8d
Compare
1fb5f8d to
7a1c06f
Compare
Summary
Tests
Summary by CodeRabbit
New Features
Tests