mirror of
https://github.com/multipleof4/octopus-file-browser.git
synced 2026-09-25 12:35:25 +00:00
Build reusable octopus file browser
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
import { readdirSync, statSync } from 'node:fs';
|
||||
import { resolve } from 'node:path';
|
||||
import { defineConfig } from 'vite';
|
||||
|
||||
const VIRTUAL_ID = 'virtual:octopus-repo-tree';
|
||||
const RESOLVED_ID = `\0${VIRTUAL_ID}`;
|
||||
const ignored = new Set(['.git', 'demo', 'dist', 'node_modules']);
|
||||
|
||||
function scan(directory) {
|
||||
return readdirSync(directory, { withFileTypes: true })
|
||||
.filter((entry) => !ignored.has(entry.name))
|
||||
.map((entry) => {
|
||||
const path = resolve(directory, entry.name);
|
||||
const stats = statSync(path);
|
||||
return entry.isDirectory()
|
||||
? { name: entry.name, type: 'directory', modified: stats.mtime.toISOString(), children: scan(path) }
|
||||
: { name: entry.name, type: 'file', modified: stats.mtime.toISOString(), size: stats.size };
|
||||
});
|
||||
}
|
||||
|
||||
export default defineConfig({
|
||||
build: { outDir: 'demo' },
|
||||
plugins: [{
|
||||
name: 'octopus-demo-tree',
|
||||
resolveId(id) { return id === VIRTUAL_ID ? RESOLVED_ID : null; },
|
||||
load(id) { return id === RESOLVED_ID ? `export default ${JSON.stringify(scan(process.cwd()))}` : null; },
|
||||
}],
|
||||
});
|
||||
Reference in New Issue
Block a user