gulpfile.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /*---------------------------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Licensed under the MIT License. See License.txt in the project root for license information.
  4. *--------------------------------------------------------------------------------------------*/
  5. var gulp = require('gulp');
  6. var tsb = require('gulp-tsb');
  7. var assign = require('object-assign');
  8. var fs = require('fs');
  9. var path = require('path');
  10. var merge = require('merge-stream');
  11. var rjs = require('gulp-requirejs');
  12. var uglify = require('gulp-uglify');
  13. var rimraf = require('rimraf');
  14. var es = require('event-stream');
  15. var TYPESCRIPT_LIB_SOURCE = path.join(__dirname, 'node_modules', 'typescript', 'lib');
  16. var TYPESCRIPT_LIB_DESTINATION = path.join(__dirname, 'src', 'lib');
  17. gulp.task('clean-release', function(cb) { rimraf('release/min', { maxBusyTries: 1 }, cb); });
  18. gulp.task('release', ['clean-release'], function() {
  19. var sha1 = getGitVersion(__dirname);
  20. var semver = require('./package.json').version;
  21. var headerVersion = semver + '(' + sha1 + ')';
  22. var BUNDLED_FILE_HEADER = [
  23. '/*!-----------------------------------------------------------------------------',
  24. ' * Copyright (c) Microsoft Corporation. All rights reserved.',
  25. ' * monaco-typescript version: ' + headerVersion,
  26. ' * Released under the MIT license',
  27. ' * https://github.com/Microsoft/monaco-typescript/blob/master/LICENSE.md',
  28. ' *-----------------------------------------------------------------------------*/',
  29. ''
  30. ].join('\n');
  31. function bundleOne(moduleId, exclude) {
  32. return rjs({
  33. baseUrl: '/release/dev/',
  34. name: 'vs/language/typescript/' + moduleId,
  35. out: moduleId + '.js',
  36. exclude: exclude,
  37. paths: {
  38. 'vs/language/typescript': __dirname + '/release/dev/'
  39. }
  40. })
  41. }
  42. return merge(
  43. merge(
  44. bundleOne('monaco.contribution'),
  45. bundleOne('lib/typescriptServices'),
  46. bundleOne('mode', ['vs/language/typescript/lib/typescriptServices']),
  47. bundleOne('worker', ['vs/language/typescript/lib/typescriptServices'])
  48. )
  49. .pipe(uglify({
  50. preserveComments: 'some'
  51. }))
  52. .pipe(es.through(function(data) {
  53. data.contents = new Buffer(
  54. BUNDLED_FILE_HEADER
  55. + data.contents.toString()
  56. );
  57. this.emit('data', data);
  58. }))
  59. .pipe(gulp.dest('./release/min/')),
  60. gulp.src('src/monaco.d.ts').pipe(gulp.dest('./release/')),
  61. );
  62. });
  63. function getGitVersion(repo) {
  64. var git = path.join(repo, '.git');
  65. var headPath = path.join(git, 'HEAD');
  66. var head;
  67. try {
  68. head = fs.readFileSync(headPath, 'utf8').trim();
  69. } catch (e) {
  70. return void 0;
  71. }
  72. if (/^[0-9a-f]{40}$/i.test(head)) {
  73. return head;
  74. }
  75. var refMatch = /^ref: (.*)$/.exec(head);
  76. if (!refMatch) {
  77. return void 0;
  78. }
  79. var ref = refMatch[1];
  80. var refPath = path.join(git, ref);
  81. try {
  82. return fs.readFileSync(refPath, 'utf8').trim();
  83. } catch (e) {
  84. // noop
  85. }
  86. var packedRefsPath = path.join(git, 'packed-refs');
  87. var refsRaw;
  88. try {
  89. refsRaw = fs.readFileSync(packedRefsPath, 'utf8').trim();
  90. } catch (e) {
  91. return void 0;
  92. }
  93. var refsRegex = /^([0-9a-f]{40})\s+(.+)$/gm;
  94. var refsMatch;
  95. var refs = {};
  96. while (refsMatch = refsRegex.exec(refsRaw)) {
  97. refs[refsMatch[2]] = refsMatch[1];
  98. }
  99. return refs[ref];
  100. }