summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Allen <dan@opendevise.com>2018-12-27 12:53:45 -0700
committerDan Allen <dan@opendevise.com>2018-12-28 08:19:21 +0000
commit4d64b2e3bf36c1e05f0aa5029cfaf6f35bcf382f (patch)
tree53bcfc5b11dcafcefa15a965d6b65fa4c82c8f4a
parent5c982221c90b0a476597f7131d17fb0178270b56 (diff)
downloadalpine-antora-theme-4d64b2e3bf36c1e05f0aa5029cfaf6f35bcf382f.tar.bz2
alpine-antora-theme-4d64b2e3bf36c1e05f0aa5029cfaf6f35bcf382f.tar.xz
rewrite preview:pages task to merge streams instead of promises
-rw-r--r--gulpfile.js/preview-pages.js98
1 files changed, 43 insertions, 55 deletions
diff --git a/gulpfile.js/preview-pages.js b/gulpfile.js/preview-pages.js
index abc8b98..e16b54f 100644
--- a/gulpfile.js/preview-pages.js
+++ b/gulpfile.js/preview-pages.js
@@ -3,31 +3,34 @@
const fs = require('fs-extra')
const handlebars = require('handlebars')
const { obj: map } = require('through2')
+const merge = require('merge-stream')
const path = require('path')
const requireFromString = require('require-from-string')
const vfs = require('vinyl-fs')
const yaml = require('js-yaml')
-module.exports = (src, dest, siteSrc, siteDest, onComplete) => () =>
- Promise.all([loadSampleUiModel(siteSrc), compileLayouts(src), registerPartials(src), registerHelpers(src)]).then(
- ([uiModel, layouts]) =>
- vfs
- .src('**/*.html', { base: siteSrc, cwd: siteSrc })
- .pipe(
- map((file, enc, next) => {
- const compiledLayout = layouts[file.stem === '404' ? '404.hbs' : 'default.hbs']
- const siteRootPath = path.relative(path.dirname(file.path), path.resolve(siteSrc))
- uiModel.env = process.env
- uiModel.siteRootPath = siteRootPath
- uiModel.siteRootUrl = path.join(siteRootPath, 'index.html')
- uiModel.uiRootPath = path.join(siteRootPath, '_')
- uiModel.page.contents = file.contents.toString().trim()
- file.contents = Buffer.from(compiledLayout(uiModel))
- next(null, file)
- })
- )
- .pipe(vfs.dest(siteDest))
- .pipe(onComplete ? onComplete() : map((file, enc, next) => next()))
+module.exports = (src, dest, siteSrc, siteDest, onComplete, layouts = {}) => () =>
+ Promise.all([
+ loadSampleUiModel(siteSrc),
+ toPromise(merge(compileLayouts(src, layouts), registerPartials(src), registerHelpers(src))),
+ ]).then(([uiModel]) =>
+ vfs
+ .src('**/*.html', { base: siteSrc, cwd: siteSrc })
+ .pipe(
+ map((file, enc, next) => {
+ const compiledLayout = layouts[file.stem === '404' ? '404.hbs' : 'default.hbs']
+ const siteRootPath = path.relative(path.dirname(file.path), path.resolve(siteSrc))
+ uiModel.env = process.env
+ uiModel.siteRootPath = siteRootPath
+ uiModel.siteRootUrl = path.join(siteRootPath, 'index.html')
+ uiModel.uiRootPath = path.join(siteRootPath, '_')
+ uiModel.page.contents = file.contents.toString().trim()
+ file.contents = Buffer.from(compiledLayout(uiModel))
+ next(null, file)
+ })
+ )
+ .pipe(vfs.dest(siteDest))
+ .pipe(onComplete ? onComplete() : map((file, enc, next) => next()))
)
function loadSampleUiModel (siteSrc) {
@@ -35,47 +38,32 @@ function loadSampleUiModel (siteSrc) {
}
function registerPartials (src) {
- return new Promise((resolve, reject) =>
- vfs
- .src('partials/*.hbs', { base: src, cwd: src })
- .pipe(
- map((file, enc, next) => {
- handlebars.registerPartial(file.stem, file.contents.toString())
- next()
- })
- )
- .on('error', reject)
- .on('finish', resolve)
+ return vfs.src('partials/*.hbs', { base: src, cwd: src }).pipe(
+ map((file, enc, next) => {
+ handlebars.registerPartial(file.stem, file.contents.toString())
+ next()
+ })
)
}
function registerHelpers (src) {
- return new Promise((resolve, reject) =>
- vfs
- .src('helpers/*.js', { base: src, cwd: src })
- .pipe(
- map((file, enc, next) => {
- handlebars.registerHelper(file.stem, requireFromString(file.contents.toString()))
- next()
- })
- )
- .on('error', reject)
- .on('finish', resolve)
+ return vfs.src('helpers/*.js', { base: src, cwd: src }).pipe(
+ map((file, enc, next) => {
+ handlebars.registerHelper(file.stem, requireFromString(file.contents.toString()))
+ next()
+ })
)
}
-function compileLayouts (src) {
- const layouts = {}
- return new Promise((resolve, reject) =>
- vfs
- .src('layouts/*.hbs', { base: src, cwd: src })
- .pipe(
- map((file, enc, next) => {
- layouts[file.basename] = handlebars.compile(file.contents.toString(), { preventIndent: true })
- next()
- })
- )
- .on('error', reject)
- .on('finish', () => resolve(layouts))
+function compileLayouts (src, layouts) {
+ return vfs.src('layouts/*.hbs', { base: src, cwd: src }).pipe(
+ map((file, enc, next) => {
+ layouts[file.basename] = handlebars.compile(file.contents.toString(), { preventIndent: true })
+ next()
+ })
)
}
+
+function toPromise (stream) {
+ return new Promise((resolve, reject) => stream.on('error', reject).on('finish', resolve))
+}