@@ -26,6 +26,63 @@ async function loadCachedPluginModuleLoader(scope: string) {
2626}
2727
2828describe ( "getCachedPluginModuleLoader" , ( ) => {
29+ it ( "resolves deterministic cache entries for equivalent alias maps" , async ( ) => {
30+ const { resolvePluginModuleLoaderCacheEntry } = await importFreshModule <
31+ typeof import ( "./plugin-module-loader-cache.js" )
32+ > ( import . meta. url , "./plugin-module-loader-cache.js?scope=cache-entry-alias-order" ) ;
33+
34+ const first = resolvePluginModuleLoaderCacheEntry ( {
35+ modulePath : "/repo/extensions/demo/index.ts" ,
36+ importerUrl : "file:///repo/src/plugins/loader.ts" ,
37+ loaderFilename : "/repo/src/plugins/loader.ts" ,
38+ aliasMap : {
39+ alpha : "/repo/alpha.js" ,
40+ zeta : "/repo/zeta.js" ,
41+ } ,
42+ tryNative : false ,
43+ } ) ;
44+ const second = resolvePluginModuleLoaderCacheEntry ( {
45+ modulePath : "/repo/extensions/demo/index.ts" ,
46+ importerUrl : "file:///repo/src/plugins/loader.ts" ,
47+ loaderFilename : "/repo/src/plugins/loader.ts" ,
48+ aliasMap : {
49+ zeta : "/repo/zeta.js" ,
50+ alpha : "/repo/alpha.js" ,
51+ } ,
52+ tryNative : false ,
53+ } ) ;
54+
55+ expect ( second . cacheKey ) . toBe ( first . cacheKey ) ;
56+ expect ( second . scopedCacheKey ) . toBe ( first . scopedCacheKey ) ;
57+ expect ( first . loaderFilename ) . toBe ( "/repo/src/plugins/loader.ts" ) ;
58+ } ) ;
59+
60+ it ( "keeps explicit shared cache scope keys independent of loader options" , async ( ) => {
61+ const { resolvePluginModuleLoaderCacheEntry } = await importFreshModule <
62+ typeof import ( "./plugin-module-loader-cache.js" )
63+ > ( import . meta. url , "./plugin-module-loader-cache.js?scope=cache-entry-shared-scope" ) ;
64+
65+ const first = resolvePluginModuleLoaderCacheEntry ( {
66+ modulePath : "/repo/dist/extensions/demo-a/api.js" ,
67+ importerUrl : "file:///repo/src/plugins/public-surface-loader.ts" ,
68+ loaderFilename : "/repo/src/plugins/public-surface-loader.ts" ,
69+ aliasMap : { demo : "/repo/demo-a.js" } ,
70+ tryNative : true ,
71+ sharedCacheScopeKey : "bundled:native" ,
72+ } ) ;
73+ const second = resolvePluginModuleLoaderCacheEntry ( {
74+ modulePath : "/repo/dist/extensions/demo-b/api.js" ,
75+ importerUrl : "file:///repo/src/plugins/public-surface-loader.ts" ,
76+ loaderFilename : "/repo/src/plugins/public-surface-loader.ts" ,
77+ aliasMap : { demo : "/repo/demo-b.js" } ,
78+ tryNative : false ,
79+ sharedCacheScopeKey : "bundled:native" ,
80+ } ) ;
81+
82+ expect ( first . cacheKey ) . not . toBe ( second . cacheKey ) ;
83+ expect ( first . scopedCacheKey ) . toBe ( second . scopedCacheKey ) ;
84+ } ) ;
85+
2986 it ( "reuses cached loaders for the same module config and filename" , async ( ) => {
3087 const { createJiti, getCachedPluginModuleLoader } =
3188 await loadCachedPluginModuleLoader ( "cached-loader" ) ;
0 commit comments