gulp.task("install-upstart-script", function () { gulp.src("init-scripts/upstart/gitlab-pull-webhook.conf") .pipe(replace('%installDir%', process.cwd())) .pipe(gulp.dest("/etc/init")); });
gulp.task('html', function() { return gulp.src('./src/**/*.html') .pipe(replace(/@VERSION@/g, version)) .pipe(gulp.dest('./dist/')); });
module.exports = function(callback) { var stream, compressedStream, uncompressedStream ; // use a different config config = configSetup.addDerivedValues(config); // shorthand globs = config.globs; assets = config.paths.assets; output = config.paths.output; source = config.paths.source; /*-------------- Parse metadata ---------------*/ // parse all *.html.eco in docs repo, data will end up in // metadata.result object. Note this assumes that the docs // repository is present and in proper directory location as // specified by docs.json. console.info('Building Metadata'); gulp.src(config.paths.template.eco + globs.eco) .pipe(map(metadata.parser)) .on('end', function() { fs.writeFile(output.metadata + '/metadata.json', JSON.stringify(metadata.result, null, 2)); }) ; /*-------------- Copy Examples ---------------*/ console.info('Copying examples'); // copy src/ to server gulp.src('examples/**/*.*') .pipe(gulp.dest(output.examples)) .pipe(print(log.created)) ; /*-------------- Copy Source ---------------*/ console.info('Copying LESS source'); // copy src/ to server gulp.src('src/**/*.*') .pipe(gulp.dest(output.less)) .pipe(print(log.created)) ; /*-------------- Build ---------------*/ console.info('Building Semantic for docs'); if( !install.isSetup() ) { console.error('Cannot build files. Run "gulp install" to set-up Semantic'); return; } // unified css stream stream = gulp.src(source.definitions + '/**/' + globs.components + '.less') .pipe(plumber()) .pipe(less(settings.less)) .pipe(autoprefixer(settings.prefix)) .pipe(flatten()) ; // two concurrent streams from same source to concat release uncompressedStream = stream.pipe(clone()); compressedStream = stream.pipe(clone()); uncompressedStream .pipe(plumber()) .pipe(replace(comments.variables.in, comments.variables.out)) .pipe(replace(comments.large.in, comments.large.out)) .pipe(replace(comments.small.in, comments.small.out)) .pipe(replace(comments.tiny.in, comments.tiny.out)) .pipe(replace(assets.source, assets.uncompressed)) .pipe(header(banner, settings.header)) .pipe(gulpif(config.hasPermission, chmod(config.permission))) .pipe(gulp.dest(output.uncompressed)) .pipe(print(log.created)) .on('end', function() { gulp.start('package uncompressed docs css'); }) ; compressedStream = stream .pipe(plumber()) .pipe(clone()) .pipe(replace(assets.source, assets.compressed)) .pipe(minifyCSS(settings.minify)) .pipe(rename(settings.rename.minCSS)) .pipe(header(banner, settings.header)) .pipe(gulpif(config.hasPermission, chmod(config.permission))) .pipe(gulp.dest(output.compressed)) .pipe(print(log.created)) .on('end', function() { callback(); gulp.start('package compressed docs css'); }) ; // copy assets gulp.src(source.themes + '/**/assets/**/*.*') .pipe(gulpif(config.hasPermission, chmod(config.permission))) .pipe(gulp.dest(output.themes)) ; // copy source javascript gulp.src(source.definitions + '/**/' + globs.components + '.js') .pipe(plumber()) .pipe(flatten()) .pipe(gulp.dest(output.uncompressed)) .pipe(gulpif(config.hasPermission, chmod(config.permission))) .pipe(print(log.created)) .pipe(uglify(settings.uglify)) .pipe(rename(settings.rename.minJS)) .pipe(header(banner, settings.header)) .pipe(gulp.dest(output.compressed)) .pipe(gulpif(config.hasPermission, chmod(config.permission))) .pipe(print(log.created)) .on('end', function() { gulp.start('package compressed docs js'); gulp.start('package uncompressed docs js'); }) ; };
return streamCombiner(function (source) { return source .pipe(babel(this.babelOpts)) .pipe(replace(/\/\/\s+transpile:(main|mocha)\s*/g, this.header)) .pipe(renameEsX()); }.bind(this));
gulp.task('releaseHtml', function () { gulp.src('./*.html') .pipe(replace(/"dist\//g, releaseUrl)) .pipe(gulp.dest('dist/')) })
var dataTask = function() { return gulp.src(paths.src) .pipe(replace(pattern, changeRegExp)) .pipe(concatJson()) .pipe(gulp.dest(paths.dest)) }
gulp.task('copy:manifest', () => { gulp.src('src/manifest-template') .pipe(replace(/:revision-date/, new Date().getTime())) .pipe(rename('cache.manifest')) .pipe(gulp.dest('dist/')) })
gulp.task('js', function () { var chuijs_start = [ 'window.CHUIJSLIB;', 'if(window.jQuery) {', ' window.CHUIJSLIB = window.jQuery;', '} else if (window.$chocolatechipjs) {', ' window.CHUIJSLIB = window.$chocolatechipjs;', '}', '(function($) {\n' ].join('\n'); var chuijs_end = '\n\}\)\(window\.CHUIJSLIB\);'; gulp.src([ 'src/chui/utils.js', 'src/chui/events.js', 'src/chui/detectors.js', 'src/chui/browsers.js', 'src/chui/gestures.js', 'src/chui/desktop.js', 'src/chui/layout.js', 'src/chui/navbar.js', 'src/chui/pubsub.js', 'src/chui/navigation.js', 'src/chui/buttons.js', 'src/chui/blockui.js', 'src/chui/center.js', 'src/chui/busy.js', 'src/chui/popup.js', 'src/chui/popover.js', 'src/chui/segmented.js', 'src/chui/togglePanel.js', 'src/chui/paging.js', 'src/chui/editableList.js', 'src/chui/selectList.js', 'src/chui/sheet.js', 'src/chui/slideout.js', 'src/chui/stepper.js', 'src/chui/switch.js', 'src/chui/scroll.js', 'src/chui/tabbar.js', 'src/chui/templates.js', 'src/chui/search.js', 'src/chui/carousel.js', 'src/chui/range.js', 'src/chui/select.js', 'src/chui/scrollPanel.js', 'src/chui/dataBinding.js' ]) .pipe(replace(/^\(function\(\$\) \{\n \"use strict\";/img, '')) .pipe(replace(/^\}\)\(window.\$\);/img, '')) .pipe(concat("chui-" + pkg.version + ".js")) .pipe(header(chuijs_start)) .pipe(footer(chuijs_end)) //.pipe(replace(/\}\)\(\);\n\}\)\(window.CHUIJSLIB\);/, '})(window.CHUIJSLIB);')) .pipe(header(chuiHeader, { pkg : pkg, chuiName: chui[3] })) .pipe(gulp.dest(pkg.projectPath + 'chui/')) .pipe(gulp.dest(pkg.projectPath + 'dist/')) .pipe(uglify()) .pipe(header(chuiHeaderMin, { pkg : pkg, chuiName: chui[3] })) .pipe(rename("chui-" + pkg.version + ".min.js")) .pipe(gulp.dest(pkg.projectPath + 'chui/')) .pipe(gulp.dest(pkg.projectPath + 'dist/')); });
gulp.task('html', function() { gulp.src(['sources/partials/index.html']) .pipe(replace("[home-tmpl]", fs.readFileSync('sources/partials/home.html', 'utf8'))) .pipe(gulp.dest('sources/')); });
gulp.task('manifest', () => ( gulp.src(paths.manifest, {base: 'src'}) .pipe(replace('__VERSION__', pkg.version)) .pipe(gulp.dest('dist')) ));
gulp.task('ugly', function() { return gulp.src(['small_promise.js']) .pipe(rename('ugly_small_promise.js')) // Remove comments .pipe(strip()) // small_promise -> P .pipe(replace(/small_promise/mg, 'P')) .pipe(replace(/var P/mg, 'var small_promise')) // protoClass -> K .pipe(replace(/protoClass/mg, 'K')) // callback_builder -> B .pipe(replace(/callback_builder/mg, 'B')) // (callback_builder specific) promiseObj -> o .pipe(replace(/promiseObj/mg, 'o')) // (callback_builder specific) callbackArray -> a .pipe(replace(/callbackArray/mg, 'a')) // (callback_builder specific) newStatus -> n .pipe(replace(/newStatus/mg, 'n')) // executor -> e .pipe(replace(/executor/mg, 'e')) // value -> v .pipe(replace(/value/mg, 'v')) .pipe(replace(/val/mg, 'v')) // .status -> .s .pipe(replace(/.status/mg, '.s')) // .then_array -> .t // .catch_array -> .c .pipe(replace(/.then_array/mg, '.t')) .pipe(replace(/.catch_array/mg, '.c')) // onFulfilled -> f // onRejected -> r .pipe(replace(/onFulfilled/mg, 'F')) .pipe(replace(/onRejected/mg, 'R')) // forEachErrMsg -> m .pipe(replace(/forEachErrMsg/mg, 'M')) // iterable -> I .pipe(replace(/iterable/mg, 'I')) // is_function -> Q .pipe(replace(/is_function/mg, 'Q')) // Remove blank lines .pipe(replace(/^\s*\n/mg, '')) // Build ugly script .pipe(gulp.dest('bin')); });
function addBanner( str ) { return replace( /^/, str ); }
var envReplace = function (env) { return gulp.src(['src/index.html']) .pipe(replace('__REPLACE_ENV__', env)) .pipe(gulp.dest('./build')); }
gulp.task('copy-config-xml', function(){ return gulp.src('./src/config.xml') .pipe(replace(/{NAMESPACE}/g, configs.app.namespace)) .pipe(replace(/{VERSION}/g, configs.app.version)) .pipe(replace(/{APP_NAME}/g, configs.app.name)) .pipe(replace(/{APP_DESCRIPTION}/g, configs.app.description)) .pipe(replace(/{AUTHOR_WEBISTE}/g, configs.app.author.website)) .pipe(replace(/{AUTHOR_EMAIL}/g, configs.app.author.email)) .pipe(replace(/{AUTHOR_NAME}/g, configs.app.author.name)) .pipe(replace(/{PLUGINS}/g, getPluginsXML())) .pipe(replace(/{ICONS}/g, getIconsXML())) .pipe(replace(/{SPLASHSCREENS}/g, getSplashscreenXML())) .pipe(replace(/{ACCESS_ORIGIN}/g, configs.app.accessOrigin)) .pipe(replace(/{ORIENTATION}/g, configs.app.orientation)) .pipe(replace(/{TARGET_DEVICE}/g, configs.app.targetDevice)) .pipe(replace(/{EXIT_ON_SUSPEND}/g, configs.app.exitOnSuspend)) .pipe(gulp.dest('./' + PHONEGAP_APP_DIR + '/www/')) });
return new Promise(function(resolve) { let entryModuleFilename; if (entryModuleFilenames instanceof Array) { entryModuleFilename = entryModuleFilenames[0]; } else { entryModuleFilename = entryModuleFilenames; entryModuleFilenames = [entryModuleFilename]; } const checkTypes = options.checkTypes || argv.typecheck_only; const intermediateFilename = 'build/cc/' + entryModuleFilename.replace(/\//g, '_').replace(/^\./, ''); // If undefined/null or false then we're ok executing the deletions // and mkdir. if (!options.preventRemoveAndMakeDir) { cleanupBuildDir(); } const unneededFiles = [ 'build/fake-module/third_party/babel/custom-babel-helpers.js', ]; let wrapper = '(function(){%output%})();'; if (options.wrapper) { wrapper = options.wrapper.replace('<%= contents %>', '%output%'); } wrapper += '\n//# sourceMappingURL=' + outputFilename + '.map\n'; patchRegisterElement(); if (fs.existsSync(intermediateFilename)) { fs.unlinkSync(intermediateFilename); } if (/development/.test(internalRuntimeToken)) { throw new Error('Should compile with a prod token'); } let sourceMapBase = 'http://*****:*****@define" since we use define to pass // args such as FORTESTING to our runner. jscomp_off: ['unknownDefines'], define: [], hide_warnings_for: [ 'third_party/caja/', 'third_party/closure-library/sha384-generated.js', 'third_party/d3/', 'third_party/mustache/', 'third_party/vega/', 'third_party/webcomponentsjs/', 'third_party/rrule/', 'third_party/react-dates/', 'node_modules/', 'build/patched-module/', // Can't seem to suppress `(0, win.eval)` suspicious code warning '3p/environment.js', // Generated code. 'extensions/amp-access/0.1/access-expr-impl.js', ], jscomp_error: [], }, }; // For now do type check separately if (argv.typecheck_only || checkTypes) { // Don't modify compilation_level to a lower level since // it won't do strict type checking if its whitespace only. compilerOptions.compilerFlags.define.push('TYPECHECK_ONLY=true'); compilerOptions.compilerFlags.jscomp_error.push( 'checkTypes', 'accessControls', 'const', 'constantProperty', 'globalThis'); compilerOptions.compilerFlags.conformance_configs = 'build-system/conformance-config.textproto'; // TODO(aghassemi): Remove when NTI is the default. if (argv.nti) { compilerOptions.compilerFlags.new_type_inf = true; compilerOptions.compilerFlags.jscomp_off.push( 'newCheckTypesExtraChecks'); compilerOptions.compilerFlags.externs.push( 'build-system/amp.nti.extern.js' ); } else { compilerOptions.compilerFlags.externs.push( 'build-system/amp.oti.extern.js' ); } } if (argv.pseudo_names) { compilerOptions.compilerFlags.define.push('PSEUDO_NAMES=true'); } if (argv.fortesting) { compilerOptions.compilerFlags.define.push('FORTESTING=true'); } if (compilerOptions.compilerFlags.define.length == 0) { delete compilerOptions.compilerFlags.define; } let stream = gulp.src(srcs) .pipe(closureCompiler(compilerOptions)) .on('error', function(err) { console./* OK*/error(util.colors.red('Error compiling', entryModuleFilenames)); console./* OK*/error(util.colors.red(err.message)); process.exit(1); }); // If we're only doing type checking, no need to output the files. if (!argv.typecheck_only) { stream = stream .pipe(rename(outputFilename)) .pipe(replace(/\$internalRuntimeVersion\$/g, internalRuntimeVersion)) .pipe(replace(/\$internalRuntimeToken\$/g, internalRuntimeToken)) .pipe(shortenLicense()) .pipe(gulp.dest(outputDir)) .on('end', function() { gulp.src(intermediateFilename + '.map') .pipe(rename(outputFilename + '.map')) .pipe(gulp.dest(outputDir)) .on('end', resolve); }); } return stream; });
gulp.task('replace:build', function(){ return gulp.src(config.base.baseLayoutFile, { base : config.base.baseLayoutDir }) .pipe(replace('data-main="'+config.scripts.srcPath.substr(1), 'data-main="'+config.scripts.dest.substr(1))) .pipe(gulp.dest(config.base.baseLayoutDir)); });
gulp.task('year', function () { return gulp.src([ './LICENSE.md', './README.md' ]) .pipe(replace(/(Copyright )(\d{4})/g, '$1' + gutil.date('yyyy'))) .pipe(gulp.dest('.')); });
module.exports.modify = function(srcs, concatName) { return gulp.src(srcs) .pipe(concat(concatName)) .pipe(replace('sourceMappingURL', 'sourceMappingURLDisabled')) // TODO: add concat for sourceMaps }
return () => { const out = opts.minified ? 'out-vscode-min' : 'out-vscode'; const checksums = computeChecksums(out, [ 'vs/workbench/workbench.main.js', 'vs/workbench/workbench.main.css', 'vs/workbench/electron-browser/bootstrap/index.html', 'vs/workbench/electron-browser/bootstrap/index.js' ]); const src = gulp.src(out + '/**', { base: '.' }) .pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + out), 'out'); })) .pipe(util.setExecutableBit(['**/*.sh'])); const extensionsList = [ 'extensions/*/**', '!extensions/*/src/**', '!extensions/*/out/**/test/**', '!extensions/*/test/**', '!extensions/*/build/**', '!extensions/*/{client,server}/src/**', '!extensions/*/{client,server}/test/**', '!extensions/*/{client,server}/out/**/test/**', '!extensions/*/{client,server}/out/**/typings/**', '!extensions/**/.vscode/**', '!extensions/**/tsconfig.json', '!extensions/typescript/bin/**', '!extensions/vscode-api-tests/**', '!extensions/vscode-colorize-tests/**', ...builtInExtensions.map(e => `!extensions/${e.name}/**`) ]; const nlsFilter = filter('**/*.nls.json', { restore: true }); const extensions = gulp.src(extensionsList, { base: '.' }) // TODO@Dirk: this filter / buffer is here to make sure the nls.json files are buffered .pipe(nlsFilter) .pipe(buffer()) .pipe(nlsDev.createAdditionalLanguageFiles(languages, path.join(__dirname, '..', 'i18n'))) .pipe(nlsFilter.restore); const marketplaceExtensions = es.merge(...builtInExtensions.map(extension => { return ext.src(extension.name, extension.version) .pipe(rename(p => p.dirname = `extensions/${extension.name}/${p.dirname}`)); })); const sources = es.merge(src, extensions, marketplaceExtensions) .pipe(filter(['**', '!**/*.js.map'])) .pipe(util.handleAzureJson({ platform })); let version = packageJson.version; const quality = product.quality; if (quality && quality !== 'stable') { version += '-' + quality; } const name = product.nameShort; const packageJsonStream = gulp.src(['package.json'], { base: '.' }) .pipe(json({ name, version })); const date = new Date().toISOString(); const productJsonStream = gulp.src(['product.json'], { base: '.' }) .pipe(json({ commit, date, checksums })); const license = gulp.src(['LICENSES.chromium.html', 'LICENSE.txt', 'ThirdPartyNotices.txt', 'licenses/**'], { base: '.' }); // TODO the API should be copied to `out` during compile, not here const api = gulp.src('src/vs/vscode.d.ts').pipe(rename('out/vs/vscode.d.ts')); const depsSrc = _.flatten(dependencies .map(function (d) { return ['node_modules/' + d + '/**', '!node_modules/' + d + '/**/{test,tests}/**']; })); const deps = gulp.src(depsSrc, { base: '.', dot: true }) .pipe(util.cleanNodeModule('fsevents', ['binding.gyp', 'fsevents.cc', 'build/**', 'src/**', 'test/**'], ['**/*.node'])) .pipe(util.cleanNodeModule('oniguruma', ['binding.gyp', 'build/**', 'src/**', 'deps/**'], ['**/*.node'])) .pipe(util.cleanNodeModule('windows-mutex', ['binding.gyp', 'build/**', 'src/**'], ['**/*.node'])) .pipe(util.cleanNodeModule('native-keymap', ['binding.gyp', 'build/**', 'src/**', 'deps/**'], ['**/*.node'])) .pipe(util.cleanNodeModule('windows-foreground-love', ['binding.gyp', 'build/**', 'src/**'], ['**/*.node'])) .pipe(util.cleanNodeModule('gc-signals', ['binding.gyp', 'build/**', 'src/**', 'deps/**'], ['**/*.node', 'src/index.js'])) .pipe(util.cleanNodeModule('pty.js', ['binding.gyp', 'build/**', 'src/**', 'deps/**'], ['build/Release/**'])); let all = es.merge( packageJsonStream, productJsonStream, license, api, sources, deps ); if (platform === 'win32') { all = es.merge(all, gulp.src('resources/win32/code_file.ico', { base: '.' })); } else if (platform === 'linux') { all = es.merge(all, gulp.src('resources/linux/code.png', { base: '.' })); } else if (platform === 'darwin') { const shortcut = gulp.src('resources/darwin/bin/code.sh') .pipe(rename('bin/code')); all = es.merge(all, shortcut); } let result = all .pipe(util.skipDirectories()) .pipe(util.fixWin32DirectoryPermissions()) .pipe(electron(_.extend({}, config, { platform, arch, ffmpegChromium: true }))) .pipe(filter(['**', '!LICENSE', '!LICENSES.chromium.html', '!version'])); if (platform === 'win32') { result = es.merge(result, gulp.src('resources/win32/bin/code.js', { base: 'resources/win32' })); result = es.merge(result, gulp.src('resources/win32/bin/cat.exe', { base: 'resources/win32' })); result = es.merge(result, gulp.src('resources/win32/bin/code.cmd', { base: 'resources/win32' }) .pipe(replace('@@NAME@@', product.nameShort)) .pipe(rename(function (f) { f.basename = product.applicationName; }))); result = es.merge(result, gulp.src('resources/win32/bin/code.sh', { base: 'resources/win32' }) .pipe(replace('@@NAME@@', product.nameShort)) .pipe(rename(function (f) { f.basename = product.applicationName; f.extname = ''; }))); } else if (platform === 'linux') { result = es.merge(result, gulp.src('resources/linux/bin/code.sh', { base: '.' }) .pipe(replace('@@NAME@@', product.applicationName)) .pipe(rename('bin/' + product.applicationName))); } return result.pipe(vfs.dest(destination)); };
gulp.task('html-replace', () => { return gulp.src([path.INDEX_SRC]) .pipe(replace('dev/', '')) .pipe(replace(path.OUT, path.MINIFIED_OUT)) .pipe(gulp.dest(dir.PUBLIC)); });
gulp.task('devToProHtml', function() { return gulp .src(noteDev) .pipe(replace(/<!-- dev -->[.\s\S]+?<!-- \/dev -->/g, '')) // 把dev 去掉 .pipe(replace(/<!-- pro_dep_js -->/, '<script src="/js/dep.min.js"></script>')) // 替换 .pipe(replace(/<!-- pro_app_js -->/, '<script src="/js/app.min.js"></script>')) // 替换 // .pipe(replace(/<!-- pro_markdown_js -->/, '<script src="/js/markdown.min.js"></script>')) // 替换 .pipe(replace(/<!-- pro_markdown_js -->/, '<script src="/js/markdown-v2.min.js"></script>')) // 替换 .pipe(replace('/tinymce/tinymce.js', '/tinymce/tinymce.full.min.js')) // 替换 .pipe(replace(/<!-- pro_tinymce_init_js -->/, "var tinyMCEPreInit = {base: '/public/tinymce', suffix: '.min'};")) // 替换 .pipe(replace(/plugins\/main.js/, "plugins/main.min.js")) // 替换 // 连续两个空行换成一个空行 .pipe(replace(/\r\n\r\n/g, '\r\n')) .pipe(replace(/\r\n\r\n/g, '\r\n')) .pipe(replace(/\r\n\r\n/g, '\r\n')) .pipe(replace(/\r\n\r\n/g, '\r\n')) .pipe(replace(/\r\n\r\n/g, '\r\n')) .pipe(replace(/\r\n\r\n/g, '\r\n')) .pipe(replace('console.log(o);', '')) .pipe(replace('console.trace(o);', '')) // .pipe(minifyHtml()) // 不行, 压缩后golang报错 .pipe(rename('note.html')) .pipe(gulp.dest(noteProBase)); });
orchestrator.add('fixSourceMapSources', ['uglify'], function() { return gulp.src(path.resolve(dir, fileNameMap)) .pipe(replace('"file":"' + fileNameMap + '"', '"file":"' + fileNameMin + '"')) .pipe(replace('"sources":["' + fileNameMin + '"]', '"sources":["' + fileName + '"]')) .pipe(gulp.dest(dir)); });
gulp.task('css-dev', function(){ gulp.src(path.CSS) .pipe(replace(/.user-block [^}]*}/m, '')) .pipe(gulp.dest(path.DEST_FINAL_CSS)); });
return () => { const out = opts.minified ? 'out-vscode-min' : 'out-vscode'; const checksums = computeChecksums(out, [ 'vs/workbench/workbench.main.js', 'vs/workbench/workbench.main.css', 'vs/workbench/electron-browser/bootstrap/index.html', 'vs/workbench/electron-browser/bootstrap/index.js', 'vs/workbench/electron-browser/bootstrap/preload.js' ]); const src = gulp.src(out + '/**', { base: '.' }) .pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + out), 'out'); })); const root = path.resolve(path.join(__dirname, '..')); const localExtensionDescriptions = glob.sync('extensions/*/package.json') .map(manifestPath => { const extensionPath = path.dirname(path.join(root, manifestPath)); const extensionName = path.basename(extensionPath); return { name: extensionName, path: extensionPath }; }) .filter(({ name }) => excludedExtensions.indexOf(name) === -1) .filter(({ name }) => builtInExtensions.every(b => b.name !== name)); const localExtensions = es.merge(...localExtensionDescriptions.map(extension => { const nlsFilter = filter('**/*.nls.json', { restore: true }); return ext.fromLocal(extension.path) .pipe(rename(p => p.dirname = `extensions/${extension.name}/${p.dirname}`)) // // TODO@Dirk: this filter / buffer is here to make sure the nls.json files are buffered .pipe(nlsFilter) .pipe(buffer()) .pipe(nlsDev.createAdditionalLanguageFiles(languages, path.join(__dirname, '..', 'i18n'))) .pipe(nlsFilter.restore); })); const localExtensionDependencies = gulp.src('extensions/node_modules/**', { base: '.' }); const marketplaceExtensions = es.merge(...builtInExtensions.map(extension => { return ext.fromMarketplace(extension.name, extension.version) .pipe(rename(p => p.dirname = `extensions/${extension.name}/${p.dirname}`)); })); const sources = es.merge(src, localExtensions, localExtensionDependencies, marketplaceExtensions) .pipe(util.setExecutableBit(['**/*.sh'])) .pipe(filter(['**', '!**/*.js.map'])); let version = packageJson.version; const quality = product.quality; if (quality && quality !== 'stable') { version += '-' + quality; } const name = product.nameShort; const packageJsonStream = gulp.src(['package.json'], { base: '.' }) .pipe(json({ name, version })); const settingsSearchBuildId = getBuildNumber(); const date = new Date().toISOString(); const productJsonStream = gulp.src(['product.json'], { base: '.' }) .pipe(json({ commit, date, checksums, settingsSearchBuildId })); const license = gulp.src(['LICENSES.chromium.html', 'LICENSE.txt', 'ThirdPartyNotices.txt', 'licenses/**'], { base: '.' }); const watermark = gulp.src(['resources/letterpress.svg', 'resources/letterpress-dark.svg', 'resources/letterpress-hc.svg'], { base: '.' }); // TODO the API should be copied to `out` during compile, not here const api = gulp.src('src/vs/vscode.d.ts').pipe(rename('out/vs/vscode.d.ts')); const depsSrc = [ ..._.flatten(productionDependencies.map(d => path.relative(root, d.path)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`])), ..._.flatten(Object.keys(product.dependencies || {}).map(d => [`node_modules/${d}/**`, `!node_modules/${d}/**/{test,tests}/**`])) ]; const deps = gulp.src(depsSrc, { base: '.', dot: true }) .pipe(filter(['**', '!**/package-lock.json'])) .pipe(util.cleanNodeModule('fsevents', ['binding.gyp', 'fsevents.cc', 'build/**', 'src/**', 'test/**'], ['**/*.node'])) .pipe(util.cleanNodeModule('oniguruma', ['binding.gyp', 'build/**', 'src/**', 'deps/**'], ['**/*.node', 'src/*.js'])) .pipe(util.cleanNodeModule('windows-mutex', ['binding.gyp', 'build/**', 'src/**'], ['**/*.node'])) .pipe(util.cleanNodeModule('native-keymap', ['binding.gyp', 'build/**', 'src/**', 'deps/**'], ['**/*.node'])) .pipe(util.cleanNodeModule('native-is-elevated', ['binding.gyp', 'build/**', 'src/**', 'deps/**'], ['**/*.node'])) .pipe(util.cleanNodeModule('native-watchdog', ['binding.gyp', 'build/**', 'src/**'], ['**/*.node'])) .pipe(util.cleanNodeModule('spdlog', ['binding.gyp', 'build/**', 'deps/**', 'src/**', 'test/**'], ['**/*.node'])) .pipe(util.cleanNodeModule('jschardet', ['dist/**'])) .pipe(util.cleanNodeModule('windows-foreground-love', ['binding.gyp', 'build/**', 'src/**'], ['**/*.node'])) .pipe(util.cleanNodeModule('windows-process-tree', ['binding.gyp', 'build/**', 'src/**'], ['**/*.node'])) .pipe(util.cleanNodeModule('gc-signals', ['binding.gyp', 'build/**', 'src/**', 'deps/**'], ['**/*.node', 'src/index.js'])) .pipe(util.cleanNodeModule('keytar', ['binding.gyp', 'build/**', 'src/**', 'script/**', 'node_modules/**'], ['**/*.node'])) .pipe(util.cleanNodeModule('node-pty', ['binding.gyp', 'build/**', 'src/**', 'tools/**'], ['build/Release/**'])) .pipe(util.cleanNodeModule('nsfw', ['binding.gyp', 'build/**', 'src/**', 'openpa/**', 'includes/**'], ['**/*.node', '**/*.a'])) .pipe(util.cleanNodeModule('vsda', ['binding.gyp', 'README.md', 'build/**', '*.bat', '*.sh', '*.cpp', '*.h'], ['build/Release/vsda.node'])); let all = es.merge( packageJsonStream, productJsonStream, license, watermark, api, sources, deps ); if (platform === 'win32') { all = es.merge(all, gulp.src(['resources/win32/code_file.ico', 'resources/win32/code_70x70.png', 'resources/win32/code_150x150.png'], { base: '.' })); } else if (platform === 'linux') { all = es.merge(all, gulp.src('resources/linux/code.png', { base: '.' })); } else if (platform === 'darwin') { const shortcut = gulp.src('resources/darwin/bin/code.sh') .pipe(rename('bin/code')); all = es.merge(all, shortcut); } let result = all .pipe(util.skipDirectories()) .pipe(util.fixWin32DirectoryPermissions()) .pipe(electron(_.extend({}, config, { platform, arch, ffmpegChromium: true }))) .pipe(filter(['**', '!LICENSE', '!LICENSES.chromium.html', '!version'])); if (platform === 'win32') { result = es.merge(result, gulp.src('resources/win32/bin/code.js', { base: 'resources/win32' })); result = es.merge(result, gulp.src('resources/win32/bin/code.cmd', { base: 'resources/win32' }) .pipe(replace('@@NAME@@', product.nameShort)) .pipe(rename(function (f) { f.basename = product.applicationName; }))); result = es.merge(result, gulp.src('resources/win32/bin/code.sh', { base: 'resources/win32' }) .pipe(replace('@@NAME@@', product.nameShort)) .pipe(rename(function (f) { f.basename = product.applicationName; f.extname = ''; }))); result = es.merge(result, gulp.src('resources/win32/VisualElementsManifest.xml', { base: 'resources/win32' }) .pipe(rename(product.nameShort + '.VisualElementsManifest.xml'))); } else if (platform === 'linux') { result = es.merge(result, gulp.src('resources/linux/bin/code.sh', { base: '.' }) .pipe(replace('@@NAME@@', product.applicationName)) .pipe(rename('bin/' + product.applicationName))); } return result.pipe(vfs.dest(destination)); };
module.exports = function(gulp, callback) { return gulp.src('*.html', { cwd: config.html + '/' + myTextDirection + '/' + myLayoutName }) .pipe(replace(/(<script\b.+src=")(?!http)(.+\bapp-assets\b.[^vendors].+[^min])(\.js)(".*>)/g, '$1$2.min$3$4')) .pipe(gulp.dest(config.html + '/' + myTextDirection + '/' + myLayoutName)); };
gulp.task("amd", function() { var replaceText1 = [ 'var cmModePath = "codemirror/mode/";', ' var cmAddonPath = "codemirror/addon/";', '', ' var codeMirrorModules = [', ' "jquery", "marked", "prettify",', ' "katex", "raphael", "underscore", "flowchart", "jqueryflowchart", "sequenceDiagram",', '', ' "codemirror/lib/codemirror",', ' cmModePath + "css/css",', ' cmModePath + "sass/sass",', ' cmModePath + "shell/shell",', ' cmModePath + "sql/sql",', ' cmModePath + "clike/clike",', ' cmModePath + "php/php",', ' cmModePath + "xml/xml",', ' cmModePath + "markdown/markdown",', ' cmModePath + "javascript/javascript",', ' cmModePath + "htmlmixed/htmlmixed",', ' cmModePath + "gfm/gfm",', ' cmModePath + "http/http",', ' cmModePath + "go/go",', ' cmModePath + "dart/dart",', ' cmModePath + "coffeescript/coffeescript",', ' cmModePath + "nginx/nginx",', ' cmModePath + "python/python",', ' cmModePath + "perl/perl",', ' cmModePath + "lua/lua",', ' cmModePath + "r/r", ', ' cmModePath + "ruby/ruby", ', ' cmModePath + "rst/rst",', ' cmModePath + "smartymixed/smartymixed",', ' cmModePath + "vb/vb",', ' cmModePath + "vbscript/vbscript",', ' cmModePath + "velocity/velocity",', ' cmModePath + "xquery/xquery",', ' cmModePath + "yaml/yaml",', ' cmModePath + "erlang/erlang",', ' cmModePath + "jade/jade",', '', ' cmAddonPath + "edit/trailingspace", ', ' cmAddonPath + "dialog/dialog", ', ' cmAddonPath + "search/searchcursor", ', ' cmAddonPath + "search/search", ', ' cmAddonPath + "scroll/annotatescrollbar", ', ' cmAddonPath + "search/matchesonscrollbar", ', ' cmAddonPath + "display/placeholder", ', ' cmAddonPath + "edit/closetag", ', ' cmAddonPath + "fold/foldcode",', ' cmAddonPath + "fold/foldgutter",', ' cmAddonPath + "fold/indent-fold",', ' cmAddonPath + "fold/brace-fold",', ' cmAddonPath + "fold/xml-fold", ', ' cmAddonPath + "fold/markdown-fold",', ' cmAddonPath + "fold/comment-fold", ', ' cmAddonPath + "mode/overlay", ', ' cmAddonPath + "selection/active-line", ', ' cmAddonPath + "edit/closebrackets", ', ' cmAddonPath + "display/fullscreen",', ' cmAddonPath + "search/match-highlighter"', ' ];', '', ' define(codeMirrorModules, factory);' ].join("\r\n"); var replaceText2 = [ "if (typeof define == \"function\" && define.amd) {", " $ = arguments[0];", " marked = arguments[1];", " prettify = arguments[2];", " katex = arguments[3];", " Raphael = arguments[4];", " _ = arguments[5];", " flowchart = arguments[6];", " CodeMirror = arguments[9];", " }" ].join("\r\n"); gulp.src("src/editormd.js") .pipe(rename({ suffix: ".amd" })) .pipe(gulp.dest('./')) .pipe(header(headerComment, {pkg : pkg, fileName : function(file) { var name = file.path.split(file.base); return name[1].replace(/[\\\/]?/, ""); }})) .pipe(gulp.dest("./")) .pipe(replace("/* Require.js define replace */", replaceText1)) .pipe(gulp.dest('./')) .pipe(replace("/* Require.js assignment replace */", replaceText2)) .pipe(gulp.dest('./')) .pipe(rename({ suffix: ".min" })) .pipe(uglify()) //{outSourceMap: true, sourceRoot: './'} .pipe(gulp.dest("./")) .pipe(header(headerMiniComment, {pkg : pkg, fileName : function(file) { var name = file.path.split(file.base + ( (os.platform() === "win32") ? "\\" : "/") ); return name[1].replace(/[\\\/]?/, ""); }})) .pipe(gulp.dest("./")) .pipe(notify({ message: "amd version task complete"})); });
gulp.task('serviceworker', function() { return gulp.src('./src/scripts/sw.js') .pipe(replace(/@VERSION@/g, version)) .pipe(gulp.dest('./dist/scripts')); });
.on( 'finish', function() { gulp.src('./dist/microbe.js') .pipe(replace(token, exportName)) .pipe(gulp.dest('./dist/')); });
gulp.task('site:toc', function () { return gulp.src(['chapters/toc.md']) .pipe(markdown()) .pipe(replace(/md/g, 'html')) .pipe(gulp.dest(TMP_DIR)); });
gulp.task("replaceFile",function(){ var url = getInputParams("fileurl"),output = url.substring(0,url.lastIndexOf("\/")+1); return gulp.src(url) .pipe(replace(/(\.(?:jpg|png|gif)\?)(\d+)/g,"$1"+Date.now())) .pipe(gulp.dest(output)); });