gulpfile.editor.js 4.4 KB
Newer Older
I
isidor 已提交
1 2 3 4 5 6 7 8 9 10 11
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

var gulp = require('gulp');
var path = require('path');
var _ = require('underscore');
var buildfile = require('../src/buildfile');
var util = require('./lib/util');
var common = require('./gulpfile.common');
A
Alex Dima 已提交
12
var es = require('event-stream');
I
isidor 已提交
13 14

var root = path.dirname(__dirname);
A
Alex Dima 已提交
15 16 17
var sha1 = util.getVersion(root);
var semver = require('./monaco/package.json').version;
var headerVersion = semver + '(' + sha1 + ')';
I
isidor 已提交
18 19 20 21 22 23 24

// Build

var editorEntryPoints = _.flatten([
	buildfile.entrypoint('vs/editor/editor.main'),
	buildfile.base,
	buildfile.standaloneLanguages,
25
	buildfile.standaloneLanguages2,
I
isidor 已提交
26 27 28 29 30 31 32 33 34 35 36 37 38 39
	buildfile.editor,
	buildfile.languages
]);

var editorResources = [
	'out-build/vs/{base,editor}/**/*.{svg,png}',
	'out-build/vs/base/worker/workerMainCompatibility.html',
	'out-build/vs/base/worker/workerMain.{js,js.map}',
	'!out-build/vs/workbench/**',
	'!**/test/**'
];

var editorOtherSources = [
	'out-build/vs/css.js',
A
Alex Dima 已提交
40
	'out-build/vs/nls.js'
I
isidor 已提交
41 42 43 44
];

var BUNDLED_FILE_HEADER = [
	'/*!-----------------------------------------------------------',
A
Alex Dima 已提交
45
	' * Copyright (c) Microsoft Corporation. All rights reserved.',
A
Alex Dima 已提交
46
	' * Version: ' + headerVersion,
I
isidor 已提交
47 48 49 50 51 52 53 54 55 56
	' * Released under the MIT license',
	' * https://github.com/Microsoft/vscode/blob/master/LICENSE.txt',
	' *-----------------------------------------------------------*/',
	''
].join('\n');

function editorLoaderConfig(removeAllOSS) {
	var result = common.loaderConfig();

	// never ship marked in editor
J
Johannes Rieken 已提交
57
	result.paths['vs/base/common/marked/marked'] = 'out-build/vs/base/common/marked/marked.mock';
58 59
	// never ship octicons in editor
	result.paths['vs/base/browser/ui/octiconLabel/octiconLabel'] = 'out-build/vs/base/browser/ui/octiconLabel/octiconLabel.mock';
I
isidor 已提交
60 61 62 63 64 65 66 67 68

	if (removeAllOSS) {
		result.paths['vs/languages/lib/common/beautify-html'] = 'out-build/vs/languages/lib/common/beautify-html.mock';
	}

	return result;
}

gulp.task('clean-optimized-editor', util.rimraf('out-editor'));
A
Alex Dima 已提交
69
gulp.task('optimize-editor', ['clean-optimized-editor', 'compile-build'], common.optimizeTask({
I
isidor 已提交
70 71 72 73 74 75 76 77 78 79
	entryPoints: editorEntryPoints,
	otherSources: editorOtherSources,
	resources: editorResources,
	loaderConfig: editorLoaderConfig(false),
	header: BUNDLED_FILE_HEADER,
	out: 'out-editor'
}));

gulp.task('clean-minified-editor', util.rimraf('out-editor-min'));
gulp.task('minify-editor', ['clean-minified-editor', 'optimize-editor'], common.minifyTask('out-editor', true));
A
Alex Dima 已提交
80 81

gulp.task('clean-editor-distro', util.rimraf('out-monaco-editor-core'));
A
Alex Dima 已提交
82
gulp.task('editor-distro', ['clean-editor-distro', 'minify-editor', 'optimize-editor'], function() {
A
Alex Dima 已提交
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
	return es.merge(
		// other assets
		es.merge(
			gulp.src('build/monaco/package.json'),
			gulp.src('build/monaco/LICENSE'),
			gulp.src('build/monaco/ThirdPartyNotices.txt'),
			gulp.src('src/vs/monaco.d.ts')
		).pipe(gulp.dest('out-monaco-editor-core')),

		// dev folder
		es.merge(
			gulp.src('out-editor/**/*')
		).pipe(gulp.dest('out-monaco-editor-core/dev')),

		// min folder
		es.merge(
			gulp.src('out-editor-min/**/*')
		).pipe(filterStream(function(path) {
			// no map files
			return !/\.js\.map$|nls\.metadata\.json/.test(path);
		})).pipe(es.through(function(data) {
			// tweak the sourceMappingURL
			if (!/\.js$/.test(data.path)) {
				this.emit('data', data);
				return;
			}

			var relativePathToMap = path.relative(path.join(data.relative), path.join('min-maps', data.relative + '.map'));

			var strContents = data.contents.toString();
			var newStr = '//# sourceMappingURL=' + relativePathToMap.replace(/\\/g, '/');
			strContents = strContents.replace(/\/\/\# sourceMappingURL=[^ ]+$/, newStr);

			data.contents = new Buffer(strContents);
			this.emit('data', data);
		})).pipe(gulp.dest('out-monaco-editor-core/min')),

		// min-maps folder
		es.merge(
			gulp.src('out-editor-min/**/*')
		).pipe(filterStream(function(path) {
			// no map files
			return !/\.js\.map$/.test(path);
		})).pipe(gulp.dest('out-monaco-editor-core/min-maps'))
	);
});

function filterStream(testFunc) {
	return es.through(function(data) {
		if (!testFunc(data.relative)) {
			return;
		}
		this.emit('data', data);
	});
}