Marek Piasecki
2 years ago
2 changed files with 68 additions and 68 deletions
@ -0,0 +1,66 @@ |
|||
import np from 'path' |
|||
import nfs from 'fs' |
|||
|
|||
function file() { return np.join(__dirname, '../src/views.json') } |
|||
|
|||
let viewsList = [] |
|||
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 } }) } |
|||
|
|||
export function proRouterViews() { |
|||
return { |
|||
name: 'pro-router-views', |
|||
transformIndexHtml(html) { |
|||
return html.replace('<head>', '<head><script>window.Views=[];</script>') |
|||
}, |
|||
|
|||
transform: { |
|||
order: 'pre', |
|||
handler(src, id) { |
|||
if (/\.imba$/.test(id)) { |
|||
let modified = false |
|||
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'){ |
|||
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) && !viewsList.includes(view)){ |
|||
viewsList.push(view) |
|||
modified = true |
|||
} |
|||
} |
|||
|
|||
} |
|||
missingDeclarations.forEach(function(view){ |
|||
let paths = viewPaths[view] ||= [] |
|||
if(!((paths[0] == id) && (paths.length > 1))){ |
|||
paths = without(id, paths) |
|||
views = without(view, views) |
|||
viewsList = without(view, viewsList) |
|||
modified = true |
|||
} |
|||
}) |
|||
|
|||
if(modified) |
|||
nfs.writeFileSync(file(), JSON.stringify(viewsList)) |
|||
|
|||
return { moduleSideEffects: modified } |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
Loading…
Reference in new issue