diff --git a/vite.config.js b/vite.config.js index 50e4de2..b4bad16 100644 --- a/vite.config.js +++ b/vite.config.js @@ -3,8 +3,12 @@ import { resolve } from 'path' import { defineConfig } from 'vite'; import { name } from './package.json' +let viewPaths = {} // view: [path] +let pathViews = {} // path: [view] +function duplicate(obj){ return JSON.parse(JSON.stringify(obj)) } +function without(el, arr) { return arr.filter(function(e){ if(e != el) { return e } }) } + function proRouterViews() { - let views = {} return { name: 'pro-router-views', transformIndexHtml(html) { @@ -18,13 +22,36 @@ function proRouterViews() { let viewRegExp = /tag view-((\w|\S)+)( |\n)/g let result = null let views_str = "" + let views = pathViews[id] ||= [] + let missingDeclarations = duplicate(views) + while(result = viewRegExp.exec(src)) { let view = result[1] - if(view != 'not_found' && !views[view]){ - views[view] = true - views_str += "Views.push(\""+ result[1] +"\");" + if(view != 'not_found'){ + let paths = viewPaths[view] ||= [] + missingDeclarations = without(view, missingDeclarations) + if(!views.includes(view)){ + views.push(view) + if(!paths.includes(id)){ + paths.push(id) + } + } + if(paths[0] == id){ + views_str += "Views.push(\""+ view +"\");" + } } - } + + } + missingDeclarations.forEach(function(view){ + let paths = viewPaths[view] ||= [] + if((paths[0] == id) && (paths.length > 1)){ + views_str += "Views.push(\""+ view +"\");" + } else { + paths = without(id, paths) + views = without(view, views) + } + }) + return { code: views_str+src, map: null } } }