Fix hoisted script scanning
This commit is contained in:
parent
b21c9576e8
commit
e1712020d4
1 changed files with 38 additions and 19 deletions
|
@ -18,25 +18,41 @@ export function vitePluginAnalyzer(
|
||||||
|
|
||||||
function hoistedScriptScanner() {
|
function hoistedScriptScanner() {
|
||||||
const uniqueHoistedIds = new Map<string, string>();
|
const uniqueHoistedIds = new Map<string, string>();
|
||||||
return function(
|
const pageScripts = new Map<string, Set<string>>();
|
||||||
this: PluginContext,
|
|
||||||
scripts: AstroPluginMetadata['astro']['scripts'],
|
|
||||||
from: string
|
|
||||||
) {
|
|
||||||
const hoistedScripts = new Set<string>();
|
|
||||||
for(let i = 0; i < scripts.length; i++) {
|
|
||||||
const hid = `${from.replace('/@fs', '')}?astro&type=script&index=${i}`;
|
|
||||||
hoistedScripts.add(hid);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(const pageId of getTopLevelPages(from, this)) {
|
return {
|
||||||
const pageData = getPageDataByViteID(internals, pageId);
|
scan(
|
||||||
if(!pageData) continue;
|
this: PluginContext,
|
||||||
|
scripts: AstroPluginMetadata['astro']['scripts'],
|
||||||
const { component } = pageData;
|
from: string
|
||||||
const astroModuleId = prependForwardSlash(component);
|
) {
|
||||||
|
const hoistedScripts = new Set<string>();
|
||||||
|
for(let i = 0; i < scripts.length; i++) {
|
||||||
|
const hid = `${from.replace('/@fs', '')}?astro&type=script&index=${i}`;
|
||||||
|
hoistedScripts.add(hid);
|
||||||
|
}
|
||||||
|
|
||||||
if (hoistedScripts.size) {
|
if (hoistedScripts.size) {
|
||||||
|
for(const pageId of getTopLevelPages(from, this)) {
|
||||||
|
for(const hid of hoistedScripts) {
|
||||||
|
if(pageScripts.has(pageId)) {
|
||||||
|
pageScripts.get(pageId)?.add(hid);
|
||||||
|
} else {
|
||||||
|
pageScripts.set(pageId, new Set([hid]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
finalize() {
|
||||||
|
for(const [pageId, hoistedScripts] of pageScripts) {
|
||||||
|
const pageData = getPageDataByViteID(internals, pageId);
|
||||||
|
if(!pageData) continue;
|
||||||
|
|
||||||
|
const { component } = pageData;
|
||||||
|
const astroModuleId = prependForwardSlash(component);
|
||||||
|
|
||||||
const uniqueHoistedId = JSON.stringify(Array.from(hoistedScripts).sort());
|
const uniqueHoistedId = JSON.stringify(Array.from(hoistedScripts).sort());
|
||||||
let moduleId: string;
|
let moduleId: string;
|
||||||
|
|
||||||
|
@ -60,13 +76,13 @@ export function vitePluginAnalyzer(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
name: '@astro/rollup-plugin-astro-analyzer',
|
name: '@astro/rollup-plugin-astro-analyzer',
|
||||||
generateBundle() {
|
generateBundle() {
|
||||||
const scanHoisted = hoistedScriptScanner();
|
const hoistScanner = hoistedScriptScanner();
|
||||||
|
|
||||||
const ids = this.getModuleIds();
|
const ids = this.getModuleIds();
|
||||||
for(const id of ids) {
|
for(const id of ids) {
|
||||||
|
@ -80,7 +96,7 @@ export function vitePluginAnalyzer(
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scan hoisted scripts
|
// Scan hoisted scripts
|
||||||
scanHoisted.call(this, astro.scripts, id);
|
hoistScanner.scan.call(this, astro.scripts, id);
|
||||||
|
|
||||||
if(astro.clientOnlyComponents.length) {
|
if(astro.clientOnlyComponents.length) {
|
||||||
const clientOnlys: string[] = [];
|
const clientOnlys: string[] = [];
|
||||||
|
@ -99,6 +115,9 @@ export function vitePluginAnalyzer(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Finalize hoisting
|
||||||
|
hoistScanner.finalize();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue