Browse Source

extract vite-plugin from config file

master
Marek Piasecki 1 year ago
parent
commit
1420829d0b
  1. 66
      src/vite-plugin.js
  2. 70
      vite.config.js

66
src/vite-plugin.js

@ -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 }
}
}
}
}
}

70
vite.config.js

@ -1,75 +1,9 @@
import np from 'path'
import nfs from 'fs'
import { imba } from 'vite-plugin-imba';
import { proRouterViews } from './src/vite-plugin'
import { resolve } from 'path'
import { defineConfig } from 'vite';
import { name } from './package.json'
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 } }) }
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 }
}
}
}
}
}
export default defineConfig({
plugins: [proRouterViews(), imba()],
build: {
@ -79,4 +13,4 @@ export default defineConfig({
entry: resolve(__dirname, 'src/main.imba'),
},
},
});
});
Loading…
Cancel
Save