forked from sheetjs/docs.sheetjs.com
		
	
		
			
				
	
	
		
			39 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { defineConfig } from 'vite'
 | |
| import vue from '@vitejs/plugin-vue'
 | |
| import { readFileSync } from 'fs';
 | |
| import { read, utils } from 'xlsx';
 | |
| 
 | |
| export default defineConfig({
 | |
|   assetsInclude: ['**/*.xlsx'], // xlsx file should be treated as assets
 | |
| 
 | |
|   plugins: [
 | |
|     vue(),
 | |
|     { // this plugin handles ?sheetjs tags
 | |
|       name: "vite-sheet",
 | |
|       transform(code, id) {
 | |
|         if(!id.match(/\?sheetjs$/)) return;
 | |
|         var wb = read(readFileSync(id.replace(/\?sheetjs$/, "")));
 | |
|         var data = utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
 | |
|         return `export default JSON.parse('${JSON.stringify(data).replace(/\\/g, "\\\\")}')`;
 | |
|       }
 | |
|     },
 | |
|     { // this plugin handles ?html tags
 | |
|       name: "vite-sheet-html",
 | |
|       transform(code, id) {
 | |
|         if(!id.match(/\?html/)) return;
 | |
|         var wb = read(readFileSync(id.replace(/\?html/, "")));
 | |
|         var html = utils.sheet_to_html(wb.Sheets[wb.SheetNames[0]]);
 | |
|         return (`export default JSON.parse('${JSON.stringify(html).replace(/\\/g, "\\\\")}')`);
 | |
|       }
 | |
|     },
 | |
|     { // this plugin handles ?b64 tags
 | |
|       name: "vite-b64-plugin",
 | |
|       transform(code, id) {
 | |
|         if(!id.match(/\?b64$/)) return;
 | |
|         var path = id.replace(/\?b64/, "");
 | |
|         var data = readFileSync(path, "base64");
 | |
|         return `export default '${data}'`;
 | |
|       }
 | |
|     }
 | |
|   ]
 | |
| }); |