oc-generic-template-compiler
Version:
OC-Generic-Template-Compiler
101 lines (97 loc) • 3.32 kB
JavaScript
;
const _ = require('lodash');
const async = require('async');
const fs = require('fs-extra');
const getUnixUtcTimestamp = require('oc-get-unix-utc-timestamp');
const path = require('path');
// OPTIONS
// =======
// componentPath
// componentPackage,
// logger,
// minify
// ocPackage
// production
// publishPath
// verbose,
// watch,
module.exports =
({ compileServer, compileView, compileStatics, getInfo }) =>
(options, callback) => {
const componentPackage = _.cloneDeep(options.componentPackage);
const ocPackage = options.ocPackage;
async.waterfall(
[
// Compile view
function (cb) {
// compiledViewInfo, bundleInfo
compileView(options, (error, compiledViewInfo) => {
if (error) {
return cb(error);
}
// USE COMPILATION INFO TO MASSAGE COMPONENT'S PACKAGE
componentPackage.oc.files.template = compiledViewInfo.template;
delete componentPackage.oc.files.client;
cb(error, { componentPackage, compiledViewInfo });
});
},
// Compile dataProvider
function ({ componentPackage, compiledViewInfo }, cb) {
if (!componentPackage.oc.files.data) {
return cb(null, componentPackage);
}
compileServer(
Object.assign({}, options, { compiledViewInfo }),
(error, compiledServerInfo) => {
if (error) {
return cb(error);
}
// USE COMPILATION INFO TO MASSAGE COMPONENT'S PACKAGE
componentPackage.oc.files.dataProvider = compiledServerInfo;
delete componentPackage.oc.files.data;
cb(error, componentPackage);
}
);
},
// Compile package.json
function (componentPackage, cb) {
componentPackage.oc.files.template.version = getInfo().version;
componentPackage.oc.files.template.minOcVersion = getInfo().minOcVersion;
componentPackage.oc.version = ocPackage.version;
componentPackage.oc.packaged = true;
componentPackage.oc.date = getUnixUtcTimestamp();
if (!componentPackage.oc.files.static) {
componentPackage.oc.files.static = [];
}
if (!_.isArray(componentPackage.oc.files.static)) {
componentPackage.oc.files.static = [
componentPackage.oc.files.static
];
}
fs.writeJson(
path.join(options.publishPath, 'package.json'),
componentPackage,
error => {
cb(error, componentPackage);
}
);
},
// Compile statics
function (componentPackage, cb) {
compileStatics(options, error => cb(error, componentPackage));
},
// Copy .env if available
function (componentPackage, cb) {
const env = componentPackage.oc.files.env;
if (env) {
const src = path.join(options.componentPath, env);
const dest = path.join(options.publishPath, '.env');
fs.copy(src, dest, err => cb(err, componentPackage));
} else {
cb(null, componentPackage);
}
}
],
callback
);
};