gulpfile.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. var gulp = require('gulp');
  2. var metadata = require('./metadata');
  3. var es = require('event-stream');
  4. var path = require('path');
  5. var fs = require('fs');
  6. var rimraf = require('rimraf');
  7. gulp.task('clean-release', function(cb) { rimraf('release', { maxBusyTries: 1 }, cb); });
  8. gulp.task('release', ['clean-release'], function() {
  9. return es.merge(
  10. // dev folder
  11. releaseOne('dev'),
  12. // min folder
  13. releaseOne('min'),
  14. // package.json
  15. gulp.src('package.json')
  16. .pipe(es.through(function(data) {
  17. var json = JSON.parse(data.contents.toString());
  18. json.private = false;
  19. data.contents = new Buffer(JSON.stringify(json, null, ' '));
  20. this.emit('data', data);
  21. }))
  22. .pipe(gulp.dest('release')),
  23. // min-maps folder
  24. gulp.src('node_modules/monaco-editor-core/min-maps/**/*').pipe(gulp.dest('release/min-maps')),
  25. // other files
  26. gulp.src([
  27. 'node_modules/monaco-editor-core/LICENSE',
  28. 'node_modules/monaco-editor-core/monaco.d.ts',
  29. 'node_modules/monaco-editor-core/ThirdPartyNotices.txt',
  30. 'README.md'
  31. ]).pipe(gulp.dest('release'))
  32. )
  33. });
  34. function releaseOne(type) {
  35. return es.merge(
  36. gulp.src('node_modules/monaco-editor-core/' + type + '/**/*')
  37. .pipe(addPluginContribs())
  38. .pipe(gulp.dest('release/' + type)),
  39. pluginStreams('release/' + type + '/')
  40. )
  41. }
  42. function mergePluginsContribsIntoCore(coreStream) {
  43. return (
  44. coreStream
  45. .pipe(addPluginContribs())
  46. );
  47. }
  48. function pluginStreams(destinationPath) {
  49. return es.merge(
  50. metadata.METADATA.PLUGINS.map(function(plugin) {
  51. return pluginStream(plugin, destinationPath);
  52. })
  53. );
  54. }
  55. function pluginStream(plugin, destinationPath) {
  56. var contribPath = path.join(plugin.path, plugin.contrib.substr(plugin.modulePrefix.length)) + '.js';
  57. return (
  58. gulp.src([
  59. plugin.path + '/**/*',
  60. '!' + contribPath
  61. ])
  62. .pipe(gulp.dest(destinationPath + plugin.modulePrefix))
  63. );
  64. }
  65. /**
  66. * Edit editor.main.js:
  67. * - rename the AMD module 'vs/editor/editor.main' to 'vs/editor/edcore.main'
  68. * - append contribs from plugins
  69. * - append new AMD module 'vs/editor/editor.main' that stiches things together
  70. */
  71. function addPluginContribs() {
  72. return es.through(function(data) {
  73. if (!/editor\.main\.js$/.test(data.path)) {
  74. this.emit('data', data);
  75. return;
  76. }
  77. var contents = data.contents.toString();
  78. // Rename the AMD module 'vs/editor/editor.main' to 'vs/editor/edcore.main'
  79. contents = contents.replace(/"vs\/editor\/editor\.main\"/, '"vs/editor/edcore.main"');
  80. var extraContent = [];
  81. var allPluginsModuleIds = [];
  82. metadata.METADATA.PLUGINS.forEach(function(plugin) {
  83. allPluginsModuleIds.push(plugin.contrib);
  84. var contribPath = path.join(__dirname, plugin.path, plugin.contrib.substr(plugin.modulePrefix.length)) + '.js';
  85. var contribContents = fs.readFileSync(contribPath).toString();
  86. var contribDefineIndex = contribContents.indexOf('define("' + plugin.contrib);
  87. if (contribDefineIndex === -1) {
  88. console.error('(1) CANNOT DETERMINE AMD define location for contribution', plugin);
  89. process.exit(-1);
  90. }
  91. var depsEndIndex = contribContents.indexOf(']', contribDefineIndex);
  92. if (contribDefineIndex === -1) {
  93. console.error('(2) CANNOT DETERMINE AMD define location for contribution', plugin);
  94. process.exit(-1);
  95. }
  96. contribContents = contribContents.substring(0, depsEndIndex) + ',"vs/editor/edcore.main"' + contribContents.substring(depsEndIndex);
  97. extraContent.push(contribContents);
  98. });
  99. extraContent.push(`define("vs/editor/editor.main", ["vs/editor/edcore.main","${allPluginsModuleIds.join('","')}"], function() {});`);
  100. var insertIndex = contents.lastIndexOf('//# sourceMappingURL=');
  101. if (insertIndex === -1) {
  102. insertIndex = contents.length;
  103. }
  104. contents = contents.substring(0, insertIndex) + '\n' + extraContent.join('\n') + '\n' + contents.substring(insertIndex);
  105. data.contents = new Buffer(contents);
  106. this.emit('data', data);
  107. });
  108. }