archive
/
givemoneyto.me
Archived
1
Fork 0
This repository has been archived on 2023-03-26. You can view files and clone it, but cannot push or open issues or pull requests.
givemoneyto.me/index.ts

73 lines
2.0 KiB
TypeScript
Raw Normal View History

2019-06-29 13:26:43 +01:00
import Bundler from 'parcel-bundler';
2019-06-29 16:23:38 +01:00
import { join, dirname } from 'path';
2019-06-29 13:26:43 +01:00
import rimraf from 'rimraf';
2019-06-29 16:23:38 +01:00
import { readFileSync, writeFileSync } from 'fs';
import Handlebars from 'handlebars';
import mkdirp from 'mkdirp';
2019-06-29 16:35:41 +01:00
import { range } from 'underscore';
2019-06-29 17:21:43 +01:00
import ProgressBar from 'progress';
2019-06-29 13:26:43 +01:00
const BUILD_DIR = join(__dirname, 'build');
const SRC_DIR = join(__dirname, 'src');
2019-06-29 17:43:03 +01:00
const PROGRESS_BAR_FORMAT = '[:bar] :rate/ps :percent :current/:total';
const MAX_VALUE = process.env.MAX_VALUE ? parseInt(process.env.MAX_VALUE) : 10;
2019-06-29 13:26:43 +01:00
const BUNDLER_OPTIONS = {
outDir: BUILD_DIR,
watch: false,
minify: true,
};
2019-06-29 17:21:43 +01:00
function statusOutput(message: string) {
2019-06-29 17:43:03 +01:00
console.log('> ' + message + '...');
2019-06-29 17:21:43 +01:00
}
function isPrecision(value: number, precision: number) {
return parseFloat(value.toFixed(precision)) === value;
}
2019-06-29 16:23:38 +01:00
function writeTemplate(content: string, value: string) {
const outputFile = join(BUILD_DIR, value, 'index.html');
mkdirp.sync(dirname(outputFile));
writeFileSync(outputFile, content);
}
function renderTemplate(template: HandlebarsTemplateDelegate, value: number) {
2019-06-29 17:43:03 +01:00
const html = template({ value });
2019-06-29 16:23:38 +01:00
writeTemplate(html, value.toString());
if (isPrecision(value, 1)) {
2019-06-29 17:43:03 +01:00
writeTemplate(html, value.toString() + '0');
}
if (isPrecision(value, 0)) {
2019-06-29 17:43:03 +01:00
writeTemplate(html, value.toString() + '.0');
writeTemplate(html, value.toString() + '.00');
}
2019-06-29 16:23:38 +01:00
}
2019-06-29 13:26:43 +01:00
(async function() {
rimraf.sync(BUILD_DIR);
2019-06-29 17:43:03 +01:00
statusOutput('Creating template');
2019-06-29 13:26:43 +01:00
const bundler = new Bundler(join(SRC_DIR, 'template.html'), BUNDLER_OPTIONS);
await bundler.bundle();
2019-06-29 16:23:38 +01:00
2019-06-29 17:43:03 +01:00
statusOutput('Compiling HTML template');
const template = Handlebars.compile(
readFileSync(join(BUILD_DIR, 'template.html')).toString()
);
2019-06-29 16:23:38 +01:00
const possibleValues = range(0, MAX_VALUE, 0.01);
2019-06-29 17:21:43 +01:00
const bar = new ProgressBar(PROGRESS_BAR_FORMAT, {
total: possibleValues.length,
2019-06-29 17:43:03 +01:00
width: 40,
2019-06-29 17:21:43 +01:00
});
2019-06-29 17:43:03 +01:00
statusOutput('Generating pages');
possibleValues.forEach(i => {
if (i) {
renderTemplate(template, parseFloat(i.toFixed(2)));
}
2019-06-29 17:21:43 +01:00
bar.tick();
2019-06-29 16:35:41 +01:00
});
2019-06-29 13:26:43 +01:00
})();