Spaces:
Running
Running
Download scripts/build.mjs from davanstrien/phonon-reader: direct link, hf CLI and curl.
- Browser
- Download file 2.46 kB
-
https://huggingface.co/spaces/davanstrien/phonon-reader/resolve/main/scripts/build.mjs
- Command line
-
hf download hf://spaces/davanstrien/phonon-reader/scripts/build.mjs
-
curl -L -o build.mjs https://huggingface.co/spaces/davanstrien/phonon-reader/resolve/main/scripts/build.mjs
2.46 kB
| // No bundler: copy the app and the phonon-tts package into dist/, then write | |
| // the service worker's precache list. phonon-tts is plain ES modules. | |
| import { cpSync, rmSync, mkdirSync, readdirSync, statSync, readFileSync, writeFileSync, existsSync } from 'node:fs'; | |
| import { join, relative } from 'node:path'; | |
| import { createHash } from 'node:crypto'; | |
| import { execSync } from 'node:child_process'; | |
| import { writeIcons } from './icons.mjs'; | |
| const root = new URL('..', import.meta.url).pathname; | |
| const dist = join(root, 'dist'); | |
| const pkg = join(root, 'node_modules', 'phonon-tts'); | |
| if (!existsSync(pkg) || !existsSync(join(root, 'node_modules', '@breezystack', 'lamejs'))) execSync('npm install --no-audit --no-fund', { cwd: root, stdio: 'inherit' }); | |
| rmSync(dist, { recursive: true, force: true }); | |
| mkdirSync(dist); | |
| cpSync(join(root, 'index.html'), join(dist, 'index.html')); | |
| cpSync(join(root, 'src'), join(dist, 'src'), { recursive: true }); | |
| cpSync(join(root, 'public'), dist, { recursive: true }); | |
| writeIcons(join(dist, 'icons')); | |
| const vendor = join(dist, 'vendor', 'phonon-tts'); | |
| mkdirSync(vendor, { recursive: true }); | |
| for (const f of readdirSync(pkg)) { | |
| if (f.endsWith('.js') || f === 'wasm' || f === 'wasm-threads' || f.startsWith('LICENSE') || f === 'THIRD_PARTY_LICENSES.md') { | |
| cpSync(join(pkg, f), join(vendor, f), { recursive: true, filter: (s) => !s.endsWith('.d.ts') }); | |
| } | |
| } | |
| const lame = join(root, 'node_modules', '@breezystack', 'lamejs'); | |
| mkdirSync(join(dist, 'vendor', 'lamejs'), { recursive: true }); | |
| cpSync(join(lame, 'dist', 'lamejs.js'), join(dist, 'vendor', 'lamejs', 'lamejs.js')); | |
| if (existsSync(join(lame, 'LICENSE'))) cpSync(join(lame, 'LICENSE'), join(dist, 'vendor', 'lamejs', 'LICENSE')); | |
| const files = []; | |
| const walk = (d) => readdirSync(d).forEach((n) => { const p = join(d, n); statSync(p).isDirectory() ? walk(p) : files.push(p); }); | |
| walk(dist); | |
| const hash = createHash('sha256'); | |
| const urls = []; | |
| for (const f of files.sort()) { | |
| const rel = relative(dist, f).split('\\').join('/'); | |
| if (rel === 'sw.js' || rel.endsWith('.md') || rel.includes('LICENSE')) continue; | |
| hash.update(rel).update(readFileSync(f)); | |
| urls.push('./' + rel); | |
| } | |
| urls.push('./'); | |
| const swPath = join(dist, 'sw.js'); | |
| writeFileSync(swPath, readFileSync(swPath, 'utf8') | |
| .replace('__PRECACHE__', JSON.stringify(urls)) | |
| .replace('__VERSION__', hash.digest('hex').slice(0, 12))); | |
| console.log(`built dist/ — precaching ${urls.length} files`); | |