@mieweb/wikigdrive
Version:
Google Drive to MarkDown synchronization
114 lines (113 loc) • 3.64 kB
JavaScript
import { env } from 'node:process';
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import wasm from 'vite-plugin-wasm';
import { generateHead } from '../../website/generateHead.js';
import denoPrefixPlugin from "./vite-plugins/prefixPlugin.js";
import denoPlugin from "./vite-plugins/resolvePlugin.js";
import { denoCssPlugin } from './vite-plugins/denoCssPlugin.js';
import { VitePluginWatchWorkspace } from './vite-plugins/VitePluginWatchWorkspace.js';
const __dirname = globalThis[Symbol.for("import-meta-ponyfill-esmodule")](import.meta).dirname;
if (!env.BUILD_TIME) {
env.BUILD_TIME = new Date().toISOString();
}
if (!env.VERSION) {
env.VERSION = env.GIT_SHA || env.GITHUB_SHA || 'dev';
}
function escapeHtml(str) {
return str
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/&(?![\w#]+;)/g, '&');
}
function renderHead() {
const retVal = [];
const head = generateHead();
// head.push(['script', { src: '/src/main.ts?GIT_SHA', type: 'module' }]);
for (const header of head) {
const rest = [];
const map = header[1];
for (const key in map) {
const value = map[key];
rest.push(`${key}="${escapeHtml(value)}"`);
}
switch (header[0]) {
case 'script':
retVal.push(`<${header[0]} ${rest.join(' ')} ></${header[0]}>`);
break;
default:
retVal.push(`<${header[0]} ${rest.join(' ')} />`);
break;
}
}
return retVal.join('\n');
}
export function generateIndexHtml() {
const inlinedScript = '';
const description = '';
const content = '';
const html = `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>WikiGDrive</title>
<meta name="description" content="${description}" />
<meta name="generator" content="generateIndexHtml()" />
${renderHead()}
</head>
<body>
<div id="app">${content}</div>${inlinedScript}
<script type="module" src="/src/main.ts"></script>
</body>
</html>`;
return html;
}
const htmlPlugin = () => {
return {
name: 'html-transform',
transformIndexHtml(html) {
// html = generateIndexHtml();
return html.replace(/GIT_SHA/g, env.VERSION);
},
};
};
const cache = new Map();
export default defineConfig({
plugins: [
vue(),
wasm(),
denoPrefixPlugin(cache),
denoPlugin(cache, __dirname + '/../../'),
denoCssPlugin(__dirname + '/../../'),
VitePluginWatchWorkspace({
workspaceRoot: __dirname + '/../../',
currentPackage: __dirname,
format: 'esm',
fileTypes: ['ts', 'vue'],
ignorePaths: ['node_modules', 'dist', '.deno'],
}),
htmlPlugin(),
],
publicDir: './public',
resolve: {
alias: {
// 'vue/server-renderer': '@vue/server-renderer/dist/server-renderer.esm-bundler.js',
vue: 'vue/dist/vue.esm-bundler.js',
}
},
base: '/',
build: {
target: 'es2022',
sourcemap: true,
manifest: true
},
define: {
'import.meta.env.GIT_SHA': JSON.stringify(env.GIT_SHA || env.GITHUB_SHA || 'dev'),
'import.meta.env.BUILD_TIME': JSON.stringify(env.BUILD_TIME),
'import.meta.env.VERSION': JSON.stringify(env.VERSION),
'import.meta.env.VITE_APP_ZIPKIN_SERVICE': JSON.stringify(env.ZIPKIN_SERVICE)
},
clearScreen: false,
});