Advertisement
Guest User

Untitled

a guest
Aug 25th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.74 KB | None | 0 0
  1. var path = require('path');
  2. var typson = require('typson');
  3. var Promise = require('bluebird');
  4. var glob = require("glob-promise");
  5. var Jsonator = require('Jsonator');
  6. var extend = require('extend');
  7. var _s = require('underscore.string');
  8. var log = require('quikr-log')();
  9. var eol = require('os').EOL;
  10. var root = require('../../../projectRoot.js');
  11. var fs = Promise.promisifyAll(require('fs-extra'));
  12. var j = path.join;
  13. var bowerDir = j(root, 'bower_components');
  14. var componentsDir = j(root, 'components');
  15. var appname = require(j(root, 'package.json')).name;
  16. var refPath = j(root, '.references.ts');
  17. var wrapRef = p => '/// <reference path=\'' + p + '\'/>' + eol;
  18.  
  19. function saveTsRef(name) {
  20. var p1 = j(componentsDir, name, 'src/config');
  21. var p2 = j(bowerDir, '**/build/config');
  22. var reducer = (files, p) => glob(j(p, '**/!(test-)*.ts')).then(f => files.concat(f));
  23.  
  24. return Promise.reduce([p1, p2], reducer, [])
  25. .then(list => list.map(n => path.relative(root, n)))
  26. .then(paths => paths.reduce((all, p) => all + wrapRef(p), ''))
  27. .then(refs => '// startref' + eol + refs + '// endref')
  28. .then(str => fs.writeFileAsync(refPath, str))
  29. .catch(err => log.error('[ERROR]: ', err));
  30. }
  31.  
  32. function createSchemeAndDefault(name) {
  33. var fullName = appname + '-' + name;
  34. var comDir = j(componentsDir, name);
  35. var configDir = j(comDir, 'src/config');
  36. var generatedDir = j(configDir, '.generated');
  37. var configJson = j(configDir, fullName + '.json');
  38. var defaultFile = j(generatedDir, '.defaults.json');
  39. var schemaFile = j(generatedDir, fullName + '.schema.json');
  40. var ts = [j(configDir, fullName + '.ts'), _s.camelize('-' + fullName)];
  41. var writeJson = fs.writeJsonAsync;
  42. var deepExtend = true;
  43. var jsonFmt = {
  44. spaces: 2
  45. };
  46.  
  47. var writeSchema = schema => writeJson(schemaFile, schema, jsonFmt);
  48.  
  49. var writeDefault = schema => Promise.all([
  50. new Jsonator(schema).generateObjectForSchema(),
  51. fs.readJsonAsync(configJson)
  52. ])
  53. .then(data => extend(deepExtend, data[0], data[1]))
  54. .then(obj => writeJson(defaultFile, {
  55. [_s.camelize(fullName)]: obj
  56. }, jsonFmt));
  57.  
  58. return new Promise(function(resolve) {
  59. typson.schema(ts[0], ts[1])
  60. .done(scheme => resolve(scheme));
  61. })
  62. .then(schema => new Jsonator(schema).getExpandedSchema())
  63. .tap(() => fs.ensureDirAsync(generatedDir))
  64. .tap(schema => delete schema.definitions)
  65. .then(schema => Promise.all([
  66. writeSchema(schema),
  67. writeDefault(schema)
  68. ]));
  69. }
  70.  
  71. function runner(name /*, env, opts, exported */ ) {
  72. return saveTsRef(name)
  73. .then(() => createSchemeAndDefault(name));
  74. }
  75.  
  76. module.exports = runner;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement