+44
-41
@@ -1,48 +1,48 @@
|
||||
import fs from 'node:fs';
|
||||
import { spawn } from 'node:child_process';
|
||||
import path from 'node:path';
|
||||
import { defineConfig } from 'vite';
|
||||
import fs from 'node:fs'
|
||||
import { spawn } from 'node:child_process'
|
||||
import path from 'node:path'
|
||||
import { defineConfig } from 'vite'
|
||||
|
||||
function generatedPages(directory) {
|
||||
const inputs = {};
|
||||
const inputs = {}
|
||||
for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
|
||||
const filePath = path.join(directory, entry.name);
|
||||
if (entry.isDirectory()) Object.assign(inputs, generatedPages(filePath));
|
||||
const filePath = path.join(directory, entry.name)
|
||||
if (entry.isDirectory()) Object.assign(inputs, generatedPages(filePath))
|
||||
else if (entry.name === 'index.html') {
|
||||
const relativePath = path.relative('.generated', filePath);
|
||||
const key = relativePath.endsWith('/index.html')
|
||||
? relativePath.slice(0, -'/index.html'.length)
|
||||
: relativePath;
|
||||
inputs[key] = path.resolve(filePath);
|
||||
const relativePath = path.relative('.generated', filePath)
|
||||
const key = relativePath.endsWith('/index.html') ? relativePath.slice(0, -'/index.html'.length) : relativePath
|
||||
inputs[key] = path.resolve(filePath)
|
||||
} else if (entry.name === '404.html' && directory === '.generated') {
|
||||
inputs['404'] = path.resolve(filePath)
|
||||
}
|
||||
}
|
||||
return inputs;
|
||||
return inputs
|
||||
}
|
||||
|
||||
function contentGenerator() {
|
||||
let timer;
|
||||
let generator;
|
||||
let rerun = false;
|
||||
let timer
|
||||
let generator
|
||||
let rerun = false
|
||||
|
||||
const generate = (server) => {
|
||||
if (generator) {
|
||||
rerun = true;
|
||||
return;
|
||||
rerun = true
|
||||
return
|
||||
}
|
||||
|
||||
generator = spawn(process.execPath, ['generator.js'], { stdio: 'inherit' });
|
||||
generator = spawn(process.execPath, ['generator.js'], { stdio: 'inherit' })
|
||||
generator.on('error', (error) => {
|
||||
console.error(`Content generation failed: ${error.message}`);
|
||||
});
|
||||
console.error(`Content generation failed: ${error.message}`)
|
||||
})
|
||||
generator.on('close', (code) => {
|
||||
generator = undefined;
|
||||
if (code === 0) server.ws.send({ type: 'full-reload' });
|
||||
generator = undefined
|
||||
if (code === 0) server.ws.send({ type: 'full-reload' })
|
||||
if (rerun) {
|
||||
rerun = false;
|
||||
generate(server);
|
||||
rerun = false
|
||||
generate(server)
|
||||
}
|
||||
});
|
||||
};
|
||||
})
|
||||
}
|
||||
|
||||
return {
|
||||
name: 'content-generator',
|
||||
@@ -55,22 +55,25 @@ function contentGenerator() {
|
||||
path.resolve('external.json'),
|
||||
path.resolve('generator.js'),
|
||||
path.resolve('html.js'),
|
||||
];
|
||||
server.watcher.add(sources);
|
||||
]
|
||||
server.watcher.add(sources)
|
||||
server.watcher.on('all', (event, file) => {
|
||||
if (!['add', 'change', 'unlink'].includes(event)) return;
|
||||
const isMarkdown = file.endsWith('.md') && (file.startsWith(`${path.resolve('notes')}/`) || file.startsWith(`${path.resolve('posts')}/`));
|
||||
const isExternal = file === path.resolve('external.json');
|
||||
const isStandaloneMarkdown = file === resolve('README.md') || file === path.resolve('THIRD_PARTY_LICENSES.md');
|
||||
const isGenerator = file === path.resolve('generator.js') || file === path.resolve('html.js');
|
||||
if (!isMarkdown && !isStandaloneMarkdown && !isExternal && !isGenerator) return;
|
||||
clearTimeout(timer);
|
||||
if (!['add', 'change', 'unlink'].includes(event)) return
|
||||
const isMarkdown =
|
||||
file.endsWith('.md') &&
|
||||
(file.startsWith(`${path.resolve('notes')}/`) || file.startsWith(`${path.resolve('posts')}/`))
|
||||
const isExternal = file === path.resolve('external.json')
|
||||
const isStandaloneMarkdown =
|
||||
file === path.resolve('README.md') || file === path.resolve('THIRD_PARTY_LICENSES.md')
|
||||
const isGenerator = file === path.resolve('generator.js') || file === path.resolve('html.js')
|
||||
if (!isMarkdown && !isStandaloneMarkdown && !isExternal && !isGenerator) return
|
||||
clearTimeout(timer)
|
||||
timer = setTimeout(() => {
|
||||
generate(server);
|
||||
}, 100);
|
||||
});
|
||||
generate(server)
|
||||
}, 100)
|
||||
})
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export default defineConfig({
|
||||
@@ -94,4 +97,4 @@ export default defineConfig({
|
||||
input: generatedPages('.generated'),
|
||||
},
|
||||
},
|
||||
});
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user