UNPKG

4.29 kBJavaScriptView Raw
1/**
2 * Coz context.
3 * @memberof module:coz
4 * @inner
5 * @constructor Coz
6 * @param {object} [config] - Coz configuration.
7 */
8
9'use strict'
10const argx = require('argx')
11const resolve = require('./resolve')
12const EngineSet = require('./sets/engine_set')
13const TmplSet = require('./sets/tmpl_set')
14const cozLogger = require('coz-logger')
15const cozBudLoader = require('coz-bud-loader')
16const cozBudWriter = require('coz-bud-writer')
17const cozBudRemover = require('coz-bud-remover')
18const cozBudCompiler = require('coz-bud-compiler')
19const _requireSafely = require('./_require_safely')
20
21function _parseConfig (config) {
22 return _requireSafely(config) || config || {}
23}
24
25/** @lends module:coz~Coz */
26function Coz () {
27 const s = this
28 s.init.apply(s, arguments)
29}
30
31Coz.prototype = {
32 // --------------------
33 // Public properties.
34 // --------------------
35
36 /**
37 * Initialize a coz context.
38 * @constructs module:coz~Coz
39 * @param {object} [config] - Coz configuration.
40 * @param {object|string} [config.engines] - Rendering engine or it's module file path.
41 * @param {object} [config.tmpls] - Predefined templates.
42 */
43 init (config) {
44 const s = this
45 config = _parseConfig(config) || {}
46
47 s.engineSet = new EngineSet(_parseConfig(config.engines) || _parseConfig(config.engine))
48 s.tmplSet = new TmplSet(_parseConfig(config.tmpls))
49 return s
50 },
51 /**
52 * @type {EngineSet}
53 */
54 engineSet: undefined,
55 /**
56 * Render files from bud.
57 * @param {string|string[]|object|object[]} patterns - Bud file name patterns, or bud instance.
58 * @param {object} [options] - Optional settings.
59 * @param {boolean} [options.verbose=false] - Log verbose.
60 */
61 async render (patterns, options = {}) {
62 const s = this
63 let args = argx(arguments)
64 if (args.pop('function')) {
65 throw new Error('Callback is no longer supported. Use promise interface instead.')
66 }
67
68 const name = 'Rendering'
69 const startAt = new Date()
70 const verbose = !!options.verbose
71
72 const logger = cozLogger({verbose})
73 const loader = cozBudLoader({})
74 const compiler = cozBudCompiler({
75 resolveEngine: s.engineSet.resolveEngine.bind(s.engineSet),
76 resolveTmpl: s.tmplSet.resolveTmpl.bind(s.tmplSet)
77 })
78 const writer = cozBudWriter({})
79 try {
80 logger.infoStarted(name, startAt)
81 let buds = await resolve(patterns)
82 for (let bud of buds) {
83 bud = await loader.load(bud)
84 // TODO Use promise itnerface
85 bud = await new Promise((resolve, reject) =>
86 compiler.compile(bud, (err, bud) => err ? reject(err) : resolve(bud))
87 )
88 bud = await writer.write(bud)
89 logger.logRendering(bud, () => {})
90 }
91 logger.infoFinished(name, startAt, new Date())
92 } catch (err) {
93 console.error(err)
94 throw err
95 }
96 },
97 /**
98 * Clean files from bud.
99 * @param {string|string[]} patterns - Bud file names.
100 * @param {object} [options] - Optional settings.
101 * @param {boolean} [options.verbose=false] - Log verbose.
102 */
103 async clean (patterns, options = {}) {
104 const args = argx(arguments)
105 /** @deprecated */
106 if (args.pop('function')) {
107 throw new Error('Callback is no longer supported. Use promise interface instead.')
108 }
109 const name = 'Clearing'
110 const startAt = new Date()
111 const verbose = !!options.verbose
112
113 const logger = cozLogger({verbose})
114 const loader = cozBudLoader({})
115 const remover = cozBudRemover({})
116
117 try {
118 logger.infoStarted(name, startAt)
119 const buds = await resolve(patterns)
120 for (let bud of buds) {
121 bud = await
122 loader.load(bud)
123 bud = await
124 new Promise((resolve, reject) =>
125 remover.remove(bud, (err, bud) => err ? reject(err) : resolve(bud))
126 )
127 logger.logClearing(bud, () => {})
128 }
129 logger.infoFinished(name, startAt, new Date())
130 } catch (err) {
131 console.error(err)
132 throw err
133 }
134 }
135}
136
137module.exports = Coz
138
139/**
140 * Callback for coz render.
141 * @memberof module:coz
142 * @inner
143 * @callback renderCallback
144 * @param {?Error} error - Render error.
145 */
146
147/**
148 * Callback for coz render.
149 * @memberof module:coz
150 * @inner
151 * @callback cleanCallback
152 * @param {?Error} error - Clean error.
153 */