diff options
Diffstat (limited to 'html/gulpfile.js')
-rw-r--r-- | html/gulpfile.js | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/html/gulpfile.js b/html/gulpfile.js new file mode 100644 index 0000000..b1a4aad --- /dev/null +++ b/html/gulpfile.js @@ -0,0 +1,64 @@ +const { src, dest, task, series } = require('gulp'); +const clean = require('gulp-clean'); +const gzip = require('gulp-gzip'); +const inlineSource = require('gulp-inline-source'); +const rename = require('gulp-rename'); +const through2 = require('through2'); + +const genHeader = (size, buf, len) => { + let idx = 0; + let data = 'unsigned char index_html[] = {\n '; + + for (const value of buf) { + idx++; + + const current = value < 0 ? value + 256 : value; + + data += '0x'; + data += (current >>> 4).toString(16); + data += (current & 0xf).toString(16); + + if (idx === len) { + data += '\n'; + } else { + data += idx % 12 === 0 ? ',\n ' : ', '; + } + } + + data += '};\n'; + data += `unsigned int index_html_len = ${len};\n`; + data += `unsigned int index_html_size = ${size};\n`; + return data; +}; +let fileSize = 0; + +task('clean', () => { + return src('dist', { read: false, allowEmpty: true }).pipe(clean()); +}); + +task('inline', () => { + return src('dist/index.html').pipe(inlineSource()).pipe(rename('inline.html')).pipe(dest('dist/')); +}); + +task( + 'default', + series('inline', () => { + return src('dist/inline.html') + .pipe( + through2.obj((file, enc, cb) => { + fileSize = file.contents.length; + return cb(null, file); + }) + ) + .pipe(gzip()) + .pipe( + through2.obj((file, enc, cb) => { + const buf = file.contents; + file.contents = Buffer.from(genHeader(fileSize, buf, buf.length)); + return cb(null, file); + }) + ) + .pipe(rename('html.h')) + .pipe(dest('../src/')); + }) +); |