gulpfile.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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(addPluginDTS()).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 pluginStreams(destinationPath) {
  43. return es.merge(
  44. metadata.METADATA.PLUGINS.map(function(plugin) {
  45. return pluginStream(plugin, destinationPath);
  46. })
  47. );
  48. }
  49. function pluginStream(plugin, destinationPath) {
  50. var contribPath = path.join(plugin.path, plugin.contrib.substr(plugin.modulePrefix.length)) + '.js';
  51. return (
  52. gulp.src([
  53. plugin.path + '/**/*',
  54. '!' + contribPath
  55. ])
  56. .pipe(gulp.dest(destinationPath + plugin.modulePrefix))
  57. );
  58. }
  59. /**
  60. * Edit editor.main.js:
  61. * - rename the AMD module 'vs/editor/editor.main' to 'vs/editor/edcore.main'
  62. * - append contribs from plugins
  63. * - append new AMD module 'vs/editor/editor.main' that stiches things together
  64. */
  65. function addPluginContribs() {
  66. return es.through(function(data) {
  67. if (!/editor\.main\.js$/.test(data.path)) {
  68. this.emit('data', data);
  69. return;
  70. }
  71. var contents = data.contents.toString();
  72. // Rename the AMD module 'vs/editor/editor.main' to 'vs/editor/edcore.main'
  73. contents = contents.replace(/"vs\/editor\/editor\.main\"/, '"vs/editor/edcore.main"');
  74. var extraContent = [];
  75. var allPluginsModuleIds = [];
  76. metadata.METADATA.PLUGINS.forEach(function(plugin) {
  77. allPluginsModuleIds.push(plugin.contrib);
  78. var contribPath = path.join(__dirname, plugin.path, plugin.contrib.substr(plugin.modulePrefix.length)) + '.js';
  79. var contribContents = fs.readFileSync(contribPath).toString();
  80. var contribDefineIndex = contribContents.indexOf('define("' + plugin.contrib);
  81. if (contribDefineIndex === -1) {
  82. console.error('(1) CANNOT DETERMINE AMD define location for contribution', plugin);
  83. process.exit(-1);
  84. }
  85. var depsEndIndex = contribContents.indexOf(']', contribDefineIndex);
  86. if (contribDefineIndex === -1) {
  87. console.error('(2) CANNOT DETERMINE AMD define location for contribution', plugin);
  88. process.exit(-1);
  89. }
  90. contribContents = contribContents.substring(0, depsEndIndex) + ',"vs/editor/edcore.main"' + contribContents.substring(depsEndIndex);
  91. extraContent.push(contribContents);
  92. });
  93. extraContent.push(`define("vs/editor/editor.main", ["vs/editor/edcore.main","${allPluginsModuleIds.join('","')}"], function() {});`);
  94. var insertIndex = contents.lastIndexOf('//# sourceMappingURL=');
  95. if (insertIndex === -1) {
  96. insertIndex = contents.length;
  97. }
  98. contents = contents.substring(0, insertIndex) + '\n' + extraContent.join('\n') + '\n' + contents.substring(insertIndex);
  99. data.contents = new Buffer(contents);
  100. this.emit('data', data);
  101. });
  102. }
  103. /**
  104. * Edit monaco.d.ts:
  105. * - append monaco.d.ts from plugins
  106. */
  107. function addPluginDTS() {
  108. return es.through(function(data) {
  109. if (!/monaco\.d\.ts$/.test(data.path)) {
  110. this.emit('data', data);
  111. return;
  112. }
  113. var contents = data.contents.toString();
  114. var extraContent = [];
  115. metadata.METADATA.PLUGINS.forEach(function(plugin) {
  116. var dtsPath = path.join(plugin.path, 'monaco.d.ts');
  117. try {
  118. extraContent.push(fs.readFileSync(dtsPath).toString());
  119. } catch (err) {
  120. return;
  121. }
  122. });
  123. contents += '\n' + extraContent.join('\n');
  124. data.contents = new Buffer(contents);
  125. this.emit('data', data);
  126. });
  127. }