Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var path = require('path');
- var typson = require('typson');
- var Promise = require('bluebird');
- var glob = require("glob-promise");
- var Jsonator = require('Jsonator');
- var extend = require('extend');
- var _s = require('underscore.string');
- var log = require('quikr-log')();
- var eol = require('os').EOL;
- var root = require('../../../projectRoot.js');
- var fs = Promise.promisifyAll(require('fs-extra'));
- var j = path.join;
- var bowerDir = j(root, 'bower_components');
- var componentsDir = j(root, 'components');
- var appname = require(j(root, 'package.json')).name;
- var refPath = j(root, '.references.ts');
- var wrapRef = p => '/// <reference path=\'' + p + '\'/>' + eol;
- function saveTsRef(name) {
- var p1 = j(componentsDir, name, 'src/config');
- var p2 = j(bowerDir, '**/build/config');
- var reducer = (files, p) => glob(j(p, '**/!(test-)*.ts')).then(f => files.concat(f));
- return Promise.reduce([p1, p2], reducer, [])
- .then(list => list.map(n => path.relative(root, n)))
- .then(paths => paths.reduce((all, p) => all + wrapRef(p), ''))
- .then(refs => '// startref' + eol + refs + '// endref')
- .then(str => fs.writeFileAsync(refPath, str))
- .catch(err => log.error('[ERROR]: ', err));
- }
- function createSchemeAndDefault(name) {
- var fullName = appname + '-' + name;
- var comDir = j(componentsDir, name);
- var configDir = j(comDir, 'src/config');
- var generatedDir = j(configDir, '.generated');
- var configJson = j(configDir, fullName + '.json');
- var defaultFile = j(generatedDir, '.defaults.json');
- var schemaFile = j(generatedDir, fullName + '.schema.json');
- var ts = [j(configDir, fullName + '.ts'), _s.camelize('-' + fullName)];
- var writeJson = fs.writeJsonAsync;
- var deepExtend = true;
- var jsonFmt = {
- spaces: 2
- };
- var writeSchema = schema => writeJson(schemaFile, schema, jsonFmt);
- var writeDefault = schema => Promise.all([
- new Jsonator(schema).generateObjectForSchema(),
- fs.readJsonAsync(configJson)
- ])
- .then(data => extend(deepExtend, data[0], data[1]))
- .then(obj => writeJson(defaultFile, {
- [_s.camelize(fullName)]: obj
- }, jsonFmt));
- return new Promise(function(resolve) {
- typson.schema(ts[0], ts[1])
- .done(scheme => resolve(scheme));
- })
- .then(schema => new Jsonator(schema).getExpandedSchema())
- .tap(() => fs.ensureDirAsync(generatedDir))
- .tap(schema => delete schema.definitions)
- .then(schema => Promise.all([
- writeSchema(schema),
- writeDefault(schema)
- ]));
- }
- function runner(name /*, env, opts, exported */ ) {
- return saveTsRef(name)
- .then(() => createSchemeAndDefault(name));
- }
- module.exports = runner;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement