| import { cp, mkdir, readFile, writeFile } from 'node:fs/promises';
|
| import { dirname, join } from 'node:path';
|
| import { fileURLToPath } from 'node:url';
|
|
|
| const root = dirname(dirname(fileURLToPath(import.meta.url)));
|
| const dist = join(root, 'dist');
|
| const referenceSource = join(root, 'phase2-unreal', 'ReferenceSource');
|
| const publishedReferenceSource = join(dist, 'phase2-unreal', 'ReferenceSource');
|
|
|
| await mkdir(dist, { recursive: true });
|
| await cp(referenceSource, publishedReferenceSource, { recursive: true, force: true });
|
| await copyIfChanged(join(root, 'styles.css'), join(dist, 'styles.css'));
|
| await copyIfChanged(join(root, 'src', 'main.ts'), join(dist, 'main.js'));
|
| for (const moduleName of ['shared.js', 'world-architect.js', 'ui-reality.js']) {
|
| await copyIfChanged(join(root, 'src', moduleName), join(dist, moduleName));
|
| }
|
|
|
| const builtHtml = (await BunlessHtml(await import('node:fs/promises')))
|
| .replace('./src/main.ts', './main.js');
|
| await writeIfChanged(join(dist, 'index.html'), builtHtml);
|
| console.log(`GitWorld build ready: ${dist}`);
|
|
|
| async function copyIfChanged(source, destination) {
|
| if (await filesMatch(source, destination)) {
|
| return;
|
| }
|
| await cp(source, destination);
|
| }
|
|
|
| async function writeIfChanged(destination, contents) {
|
| try {
|
| if ((await readFile(destination, 'utf8')) === contents) {
|
| return;
|
| }
|
| } catch {
|
|
|
| }
|
| await writeFile(destination, contents, 'utf8');
|
| }
|
|
|
| async function filesMatch(left, right) {
|
| try {
|
| const [leftContents, rightContents] = await Promise.all([
|
| readFile(left),
|
| readFile(right)
|
| ]);
|
| return leftContents.equals(rightContents);
|
| } catch {
|
| return false;
|
| }
|
| }
|
|
|
| async function BunlessHtml(fs) {
|
| return fs.readFile(join(root, 'index.html'), 'utf8');
|
| }
|
|
|