From 976c0d950461ab884a9d107659d3ba103d8cb269 Mon Sep 17 00:00:00 2001 From: Hizbu Azka Date: Wed, 21 Oct 2026 14:31:59 +0700 Subject: selfhost cm, add dark theme --- _tools/cm-esbuild/scripts/deploy.js | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 _tools/cm-esbuild/scripts/deploy.js (limited to '_tools/cm-esbuild/scripts/deploy.js') diff --git a/_tools/cm-esbuild/scripts/deploy.js b/_tools/cm-esbuild/scripts/deploy.js new file mode 100644 index 0000000..a06130e --- /dev/null +++ b/_tools/cm-esbuild/scripts/deploy.js @@ -0,0 +1,37 @@ +const fs = require('fs'), path = require('path'), crypto = require('crypto'); + +const site = process.argv[2]; +if (!site) { console.error('usage: node scripts/publish.js '); process.exit(1); } + +const dist = path.join(__dirname, '..', 'dist'); +const dest = path.join(site, 'assets', 'cm'); +const jsFiles = fs.readdirSync(dist).filter(f => f.endsWith('.js')).sort(); + +// version = hash of the bundle contents, so it only changes when the code does +const h = crypto.createHash('sha1'); +for (const f of jsFiles) h.update(fs.readFileSync(path.join(dist, f))); +const v = h.digest('hex').slice(0, 10); + +// replace old files so stale chunks don't pile up +fs.rmSync(dest, { recursive: true, force: true }); +fs.mkdirSync(dest, { recursive: true }); +for (const f of fs.readdirSync(dist)) fs.copyFileSync(path.join(dist, f), path.join(dest, f)); + +const entries = { + '@codemirror/state': 'state', + '@codemirror/view': 'view', + '@codemirror/commands': 'commands', + '@codemirror/language': 'language', + '@uiw/codemirror-theme-github': 'theme', +}; +const imports = Object.entries(entries) + .map(([spec, name]) => ` "${spec}": "{{ '/assets/cm/${name}.js' | relative_url }}?v=${v}"`) + .join(',\n'); +const preload = jsFiles.filter(f => f.startsWith('chunk-')) + .map(f => ``) + .join('\n'); + +const html = `${preload}\n\n`; +fs.mkdirSync(path.join(site, '_includes'), { recursive: true }); +fs.writeFileSync(path.join(site, '_includes', 'cm-importmap.html'), html); +console.log('published, version', v); -- cgit