浏览代码

Merge branch 'master' into t/271

Maksymilian Barnaś 9 年之前
父节点
当前提交
e9849456e4
共有 7 个文件被更改,包括 38 次插入613 次删除
  1. 0 16
      dev/tasks/build/iconmanagermodel.tpl
  2. 0 362
      dev/tasks/build/tasks.js
  3. 0 33
      dev/tasks/docs/plugins/comment-fixer.js
  4. 0 47
      dev/tasks/docs/tasks.js
  5. 0 149
      dev/tests/build/tasks.js
  6. 37 2
      gulpfile.js
  7. 1 4
      package.json

+ 0 - 16
dev/tasks/build/iconmanagermodel.tpl

@@ -1,16 +0,0 @@
-/**
- * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
- */
-
-'use strict';
-
-import Model from '../ckeditor5/ui/model.js';
-
-const iconIds = [ {{#shapes}}'{{name}}',{{/shapes}} ];
-const iconPrefix = 'ck-icon-';
-
-export default new Model( {
-	icons: iconIds.map( i => i.slice( iconPrefix.length ) ),
-	sprite: `{{#shapes}}{{{svg}}}{{/shapes}}`
-} );

+ 0 - 362
dev/tasks/build/tasks.js

@@ -1,362 +0,0 @@
-/**
- * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
- */
-
-'use strict';
-
-const path = require( 'path' );
-const gulp = require( 'gulp' );
-const merge = require( 'merge-stream' );
-const mirror = require( 'gulp-mirror' );
-const gulpWatch = require( 'gulp-watch' );
-const gulpPlumber = require( 'gulp-plumber' );
-const gutil = require( 'gulp-util' );
-const filter = require( 'gulp-filter' );
-const runSequence = require( 'run-sequence' );
-const { build, tools } = require( 'ckeditor5-dev-utils' );
-
-module.exports = ( config ) => {
-	const buildDir = path.join( config.ROOT_DIR, config.BUILD_DIR );
-	const themesGlob = path.join( 'theme', '**', '*.scss' );
-	const iconsGlob = path.join( 'theme', 'icons', '*.svg' );
-	const args = build.parseArguments();
-
-	const tasks = {
-		clean: {
-			/**
-			 * Removes "themes" folder from "./build/{format}" directory.
-			 *
-			 * @param {Object} options
-			 * @param {String} options.formats
-			 */
-			themes( options = {} ) {
-				let formats = options.formats || args.formats;
-
-				return tools.clean( buildDir, path.join( `@(${ formats.join( '|' ) })`, 'theme' ) );
-			},
-
-			/**
-			 * Removes all but "themes" folder from "./build/{format}" directory.
-			 */
-			js( options ) {
-				// TODO: ES6 default function parameters
-				options = options || build.parseArguments();
-
-				return tools.clean( buildDir, path.join( `@(${ options.formats.join( '|' ) })`, '!(theme)' ) );
-			},
-
-			/**
-			 * Removes the "./build" directory.
-			 */
-			all() {
-				return tools.clean( buildDir, path.join() );
-			}
-		},
-
-		src: {
-			js: {
-				/**
-				 * Returns a stream of all source files.
-				 *
-				 * @param {Boolean} [watch] Whether the files should be watched.
-				 * @returns {Stream}
-				 */
-				all( watch ) {
-					return merge( tasks.src.js.main( watch ), tasks.src.js.ckeditor5( watch ), tasks.src.js.packages( watch ) );
-				},
-
-				/**
-				 * Returns a stream with just the main file (`ckeditor5/ckeditor.js`).
-				 *
-				 * @param {Boolean} [watch] Whether to watch the files.
-				 * @returns {Stream}
-				 */
-				main( watch ) {
-					const glob = path.join( config.ROOT_DIR, 'ckeditor.js' );
-
-					return gulp.src( glob )
-						.pipe( watch ? gulpWatch( glob ) : build.noop() );
-				},
-
-				/**
-				 * Returns a stream of all source files from CKEditor 5.
-				 *
-				 * @param {Boolean} [watch] Whether to watch the files.
-				 * @returns {Stream}
-				 */
-				ckeditor5( watch ) {
-					const glob = path.join( config.ROOT_DIR, '@(src|tests)', '**', '*' );
-
-					return gulp.src( glob, { nodir: true } )
-						.pipe( watch ? gulpWatch( glob ) : build.noop() )
-						.pipe( build.renameCKEditor5Files() );
-				},
-
-				/**
-				 * Returns a stream of all source files from CKEditor 5 dependencies.
-				 *
-				 * @param {Boolean} [watch] Whether to watch the files.
-				 * @returns {Stream}
-				 */
-				packages( watch ) {
-					const dirs = build.getPackages( config.ROOT_DIR );
-
-					const streams = dirs.map( ( dirPath ) => {
-						const glob = path.join( dirPath, '@(src|tests)', '**', '*' );
-						// Use parent as a base so we get paths starting with 'ckeditor5-*/src/*' in the stream.
-						const baseDir = path.parse( dirPath ).dir;
-						const opts = { base: baseDir, nodir: true };
-
-						return gulp.src( glob, opts )
-							.pipe( watch ? gulpWatch( glob, opts ) : build.noop() );
-					} );
-
-					return merge.apply( null, streams )
-						.pipe( build.renamePackageFiles() );
-				}
-			},
-
-			/**
-			 * Returns a stream of all theme (*.scss) files.
-			 *
-			 * @returns {Stream}
-			 */
-			sass() {
-				const dirs = build.getPackages( config.ROOT_DIR );
-
-				const streams = dirs.map( ( dirPath ) => {
-					const glob = path.join( dirPath, themesGlob );
-					const baseDir = path.parse( dirPath ).dir;
-					const opts = { base: baseDir, nodir: true };
-
-					return gulp.src( glob, opts );
-				} );
-
-				return merge.apply( null, streams );
-			},
-
-			icons() {
-				const dirs = build.getPackages( config.ROOT_DIR );
-
-				const streams = dirs.map( ( dirPath ) => {
-					const glob = path.join( dirPath, iconsGlob );
-					const baseDir = path.parse( dirPath ).dir;
-					const opts = { base: baseDir, nodir: true };
-
-					return gulp.src( glob, opts );
-				} );
-
-				return merge.apply( null, streams );
-			}
-		},
-
-		build: {
-			/**
-			 * The build task which is capable of copying, watching, processing and writing all JavaScript files
-			 * to the `build/` directory.
-			 *
-			 * @param {Object} options
-			 * @param {String} options.formats
-			 * @param {Boolean} [options.watch]
-			 * @returns {Stream}
-			 */
-			js( options ) {
-				//
-				// NOTE: Error handling in streams is hard.
-				//
-				// Most likely this code isn't optimal, but it's a result of 8h spent on search
-				// for a solution to the ruined pipeline whenever something throws.
-				//
-				// Most important fact is that when dest stream emits an error the src stream
-				// unpipes it. Problem is when you start using tools like multipipe or gulp-mirror,
-				// because you lose control over the graph of the streams and you cannot reconnect them
-				// with a full certainty that you connected them correctly, since you'd need to know these
-				// libs internals.
-				//
-				// BTW. No, gulp-plumber is not a solution here because it does not affect the other tools.
-				//
-				// Hence, I decided that it'll be best to restart the whole piece. However, I wanted to avoid restarting the
-				// watcher as it sounds like something heavy.
-				//
-				// The flow looks like follows:
-				//
-				// 1. codeStream (including logger)
-				// 2. inputStream
-				// 3. conversionStream (may throw)
-				// 4. outputStream
-				//
-				// The input and output streams allowed me to easier debug and restart everything. Additionally, the output
-				// stream is returned to Gulp so it must be stable. I decided to restart also the inputStream because when conversionStream
-				// throws, then inputStream gets paused. Most likely it's possible to resume it, so we could pipe codeStream directly to
-				// conversionStream, but it was easier this way.
-				//
-				// PS. The assumption is that all errors thrown somewhere inside conversionStream are forwarded to conversionStream.
-				// Multipipe and gulp-mirror seem to work this way, so we get a single error emitter.
-				const codeStream = tasks.src.js.all( options.watch )
-					.pipe(
-						build.noop( ( file ) => {
-							gutil.log( `Processing '${ gutil.colors.cyan( file.path ) }'...` );
-						} )
-					);
-				const conversionStreamGenerator = build.getConversionStreamGenerator( buildDir );
-				const outputStream = build.noop();
-
-				let inputStream;
-				let conversionStream;
-
-				startStreams();
-
-				return outputStream;
-
-				// Creates a single stream combining multiple conversion streams.
-				function createConversionStream() {
-					const formatPipes = options.formats.reduce( conversionStreamGenerator, [] );
-
-					return mirror.apply( null, formatPipes )
-						.on( 'error', onError );
-				}
-
-				// Handles error in the combined conversion stream.
-				// If we don't watch files, make sure that the process terminates ASAP. We could forward the error
-				// to the output, but there may be some data in the pipeline and our error could be covered
-				// by dozen of other messages.
-				// If we watch files, then clean up the old streams and restart the combined conversion stream.
-				function onError() {
-					if ( !options.watch ) {
-						process.exit( 1 );
-
-						return;
-					}
-
-					unpipeStreams();
-
-					gutil.log( 'Restarting...' );
-					startStreams();
-				}
-
-				function startStreams() {
-					inputStream = build.noop();
-					conversionStream = createConversionStream();
-
-					codeStream
-						.pipe( inputStream )
-						.pipe( conversionStream )
-						.pipe( outputStream );
-				}
-
-				function unpipeStreams() {
-					codeStream.unpipe( inputStream );
-					conversionStream.unpipe( outputStream );
-				}
-			},
-
-			/**
-			 * The task capable of watching, processing and writing CSS files into `build/[formats]/theme`
-			 * directories.
-			 *
-			 * @param {Object} options
-			 * @param {String} options.formats
-			 * @param {Boolean} [options.watch]
-			 * @returns {Stream}
-			 */
-			sass( options ) {
-				if ( options.watch ) {
-					const glob = path.join( config.ROOT_DIR, 'node_modules', 'ckeditor5-*', themesGlob );
-
-					// Initial build.
-					buildSass();
-
-					gutil.log( `Watching theme files in '${ gutil.colors.cyan( glob ) }' for changes...` );
-
-					return gulp.watch( glob, event => {
-						gutil.log( `Theme file '${ gutil.colors.cyan( event.path ) }' has been ${ event.type }...` );
-
-						// Re-build the entire theme if the file has been changed.
-						return buildSass();
-					} );
-				} else {
-					return buildSass();
-				}
-
-				function buildSass() {
-					const formatStreams = build.getThemeFormatDestStreams( buildDir, options.formats );
-
-					return tasks.src.sass()
-						.pipe( gulpPlumber() )
-						.pipe( build.filterThemeEntryPoints() )
-						.pipe(
-							build.noop( file => {
-								gutil.log( `Found theme entry point '${ gutil.colors.cyan( file.path ) }'.` );
-							} )
-						)
-						.pipe( build.compileThemes( 'ckeditor.css' ) )
-						.pipe( mirror( formatStreams ) )
-						.on( 'error', console.log );
-				}
-			},
-
-			/**
-			 * The task capable of converting *.svg icon files into `./build/[formats]/theme/iconmanagermodel.js`
-			 * sprite.
-			 *
-			 * @param {Object} options
-			 * @param {String} options.formats
-			 * @returns {Stream}
-			 */
-			icons( options ) {
-				const formatStreams = build.getThemeFormatDestStreams( buildDir, options.formats, format => {
-					if ( format !== 'esnext' ) {
-						return build.transpile( format, build.getBabelOptionsForSource( format ) );
-					} else {
-						return build.noop();
-					}
-				} );
-
-				const spriteOptions = {
-					template: path.join( __dirname, 'iconmanagermodel.tpl' ),
-					dest: 'iconmanagermodel.js',
-				};
-
-				return tasks.src.icons()
-					.pipe( build.compileIconSprite( spriteOptions ) )
-					.pipe( filter( '*.js' ) )
-					.pipe( mirror( formatStreams ) );
-			}
-		},
-
-		register() {
-			gulp.task( 'build', callback => {
-				runSequence( 'build:clean:all', 'build:themes', 'build:js', callback );
-			} );
-
-			gulp.task( 'build:clean:all', tasks.clean.all );
-			gulp.task( 'build:clean:themes', tasks.clean.themes );
-			gulp.task( 'build:clean:js', () => tasks.clean.js( args ) );
-
-			gulp.task( 'build:themes', ( callback ) => {
-				runSequence( 'build:clean:themes', 'build:icons', 'build:sass', callback );
-			} );
-
-			gulp.task( 'build:sass', () => tasks.build.sass( args ) );
-			gulp.task( 'build:icons', () => tasks.build.icons( args ) );
-			gulp.task( 'build:js', [ 'build:clean:js' ], () => tasks.build.js( args ) );
-
-			// Tasks specific for preparing build with unmodified source files. Uses by `gulp docs` or `gulp bundle`.
-			gulp.task( 'build:clean:js:esnext', () => tasks.clean.js( { formats: [ 'esnext' ] } ) );
-			gulp.task( 'build:clean:themes:esnext', () => tasks.clean.themes( { formats: [ 'esnext' ] } ) );
-			gulp.task( 'build:sass:esnext', () => tasks.build.sass( { formats: [ 'esnext' ] } ) );
-			gulp.task( 'build:icons:esnext', () => tasks.build.icons( { formats: [ 'esnext' ] } ) );
-			gulp.task( 'build:js:esnext', [ 'build:clean:js:esnext' ], () => tasks.build.js( { formats: [ 'esnext' ] } ) );
-			gulp.task( 'build:themes:esnext', ( callback ) => {
-				runSequence( 'build:clean:themes:esnext', 'build:icons:esnext', 'build:sass:esnext', callback );
-			} );
-
-			// Tasks specific for testing under node.
-			gulp.task( 'build:clean:js:cjs', () => tasks.clean.js( { formats: [ 'cjs' ] } ) );
-			gulp.task( 'build:js:cjs', [ 'build:clean:js:cjs' ], () => tasks.build.js( { formats: [ 'cjs' ] } ) );
-		}
-	};
-
-	return tasks;
-};

+ 0 - 33
dev/tasks/docs/plugins/comment-fixer.js

@@ -1,33 +0,0 @@
-/**
- * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
- */
-
-module.exports = {
-	handlers: {
-		/**
-		 * @see http://usejsdoc.org/about-plugins.html#event-beforeparse
-		 * @param evt
-		 */
-		beforeParse( evt ) {
-			'use strict'; // WAT... JSDoc fails when you move it to the top of the file.
-
-			let className;
-			let foundClassName = /export default class ([A-Za-z]+)/.exec( evt.source );
-
-			// Fix for {@link https://github.com/jsdoc3/jsdoc/issues/1137}. Export default class is not parsed by jsdoc 3.4.
-			if ( foundClassName ) {
-				className = foundClassName[ 1 ];
-				evt.source =
-					evt.source.replace( 'export default class', 'class' ) +
-					'\nexport default ' + className + ';\n';
-			}
-
-			// TODO: jsdoc fail to parse method with expanded argument list
-			evt.source = evt.source.replace( '...}', '}' );
-
-			// Make code in comments indented with one tab so it will not be shifted.
-			evt.source = evt.source.replace( /\*\t\t/g, '*\t' );
-		}
-	}
-};

+ 0 - 47
dev/tasks/docs/tasks.js

@@ -1,47 +0,0 @@
-/**
- * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
- */
-
-'use strict';
-
-const gulp = require( 'gulp' );
-const jsdoc = require( 'gulp-jsdoc3' );
-const path = require( 'path' );
-
-module.exports = ( config ) => {
-	const tasks = {
-		buildDocs( cb ) {
-			const esnextBuildPath = path.join( config.ROOT_DIR, config.BUILD_DIR, 'esnext' );
-			const jsDocConfig = {
-				opts: {
-					encoding: 'utf8',
-					destination: path.join( config.BUILD_DIR, 'docs' ),
-					recurse: true,
-					access: 'all'
-				},
-				plugins: [
-					'node_modules/jsdoc/plugins/markdown',
-					'dev/tasks/docs/plugins/comment-fixer'
-				]
-			};
-
-			const patterns = [
-				'README.md',
-				// Add all js and jsdoc files, including tests (which can contain utils).
-				path.join( esnextBuildPath, '**', '*.@(js|jsdoc)' ),
-				// Filter out libs.
-				'!' + path.join( esnextBuildPath, 'ckeditor5', '*', 'lib', '**', '*' )
-			];
-
-			gulp.src( patterns, { read: false } )
-				.pipe( jsdoc( jsDocConfig, cb ) );
-		},
-
-		register() {
-			gulp.task( 'docs', [ 'build:js:esnext' ], tasks.buildDocs );
-		}
-	};
-
-	return tasks;
-};

+ 0 - 149
dev/tests/build/tasks.js

@@ -1,149 +0,0 @@
-/**
- * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
- */
-
-/* global describe, it, beforeEach, afterEach */
-
-'use strict';
-
-const mockery = require( 'mockery' );
-const sinon = require( 'sinon' );
-const Vinyl = require( 'vinyl' );
-const babel = require( 'babel-core' );
-const chai = require( 'chai' );
-const expect = chai.expect;
-const gutil = require( 'gulp-util' );
-const gulp = require( 'gulp' );
-const path = require( 'path' );
-const through = require( 'through2' );
-const { build } = require( 'ckeditor5-dev-utils' );
-
-describe( 'build-tasks', () => {
-	let sandbox, tasks;
-	const config = {
-		ROOT_DIR: '.',
-		BUILD_DIR: 'build'
-	};
-
-	beforeEach( () => {
-		mockery.enable( {
-			warnOnReplace: false,
-			warnOnUnregistered: false
-		} );
-
-		sandbox = sinon.sandbox.create();
-
-		mockery.registerMock( 'minimist', () => {
-			return {
-				formats: 'amd',
-				watch: false
-			};
-		} );
-
-		tasks = require( '../../tasks/build/tasks' )( config );
-	} );
-
-	afterEach( () => {
-		mockery.disable();
-		sandbox.restore();
-	} );
-
-	describe( 'packages', () => {
-		it( 'should return stream with correct packages as src', () => {
-			const fs = require( 'fs' );
-			const readDirStub = sandbox.stub( fs, 'readdirSync', () => [ 'ckeditor5-core', 'ckeditor5-toolbar' ] );
-			const statStub = sandbox.stub( fs, 'lstatSync', () => {
-				return {
-					isDirectory() {
-						return true;
-					},
-					isSymbolicLink() {
-						return false;
-					}
-				};
-			} );
-			const gulpSrcSpy = sandbox.spy( gulp, 'src' );
-			tasks.src.js.packages( false );
-
-			sinon.assert.calledOnce( readDirStub );
-			sinon.assert.calledTwice( gulpSrcSpy );
-			sinon.assert.calledTwice( statStub );
-
-			expect( gulpSrcSpy.firstCall.args[ 0 ] ).to.equal( path.join( 'node_modules', 'ckeditor5-core', '@(src|tests)', '**', '*' ) );
-			expect( gulpSrcSpy.secondCall.args[ 0 ] ).to.equal( path.join( 'node_modules', 'ckeditor5-toolbar', '@(src|tests)', '**', '*' ) );
-		} );
-
-		it( 'should skip files and resolve symbolic links', () => {
-			const fs = require( 'fs' );
-			const readDirStub = sandbox.stub( fs, 'readdirSync', () => [ 'ckeditor5-file.js' ] );
-			const statStub = sandbox.stub( fs, 'lstatSync', () => {
-				return {
-					isDirectory() {
-						return false;
-					},
-					isSymbolicLink() {
-						return true;
-					}
-				};
-			} );
-			const realPathStub = sandbox.stub( fs, 'realpathSync', () => '/real/path' );
-			const gulpSrcSpy = sandbox.spy( gulp, 'src' );
-			tasks.src.js.packages( false );
-
-			sinon.assert.calledOnce( readDirStub );
-			sinon.assert.calledOnce( realPathStub );
-			sinon.assert.notCalled( gulpSrcSpy );
-			sinon.assert.calledTwice( statStub );
-		} );
-	} );
-
-	describe( 'build.js', () => {
-		it( 'should return build stream', ( done ) => {
-			const code = 'export default {};';
-			sandbox.stub( gutil, 'log' );
-
-			const buildTask = tasks.build.js;
-			const stream = require( 'stream' );
-			const files = [
-				new Vinyl( {
-					cwd: './',
-					path: './src/file.js',
-					contents: new Buffer( code )
-				} )
-			];
-
-			let written = 0;
-
-			// Stub input stream.
-			sandbox.stub( tasks.src.js, 'all', () => {
-				const fakeInputStream = new stream.Readable( { objectMode: true } );
-				fakeInputStream._read = () => {
-					fakeInputStream.push( files.pop() || null );
-				};
-
-				return fakeInputStream;
-			} );
-
-			// Stub output stream.
-			sandbox.stub( build, 'destBuild', () => {
-				return through( { objectMode: true }, ( file, encoding, cb ) => {
-					written++;
-
-					const result = babel.transform( code, { plugins: [ 'transform-es2015-modules-amd' ] } );
-					// Check if provided code was transformed by babel.
-					expect( file.contents.toString() ).to.equal( result.code );
-
-					cb( null, file );
-				} );
-			} );
-
-			const conversionStream = buildTask( { formats: [ 'amd' ] } );
-
-			conversionStream.on( 'finish', () => {
-				expect( written ).to.equal( 1 );
-				done();
-			} );
-		} );
-	} );
-} );

+ 37 - 2
gulpfile.js

@@ -22,9 +22,7 @@ const config = {
 	]
 };
 
-require( './dev/tasks/build/tasks' )( config ).register();
 require( './dev/tasks/test/tasks' )( config ).register();
-require( './dev/tasks/docs/tasks' )( config ).register();
 
 // Lint tasks.
 const ckeditor5Lint = require( 'ckeditor5-dev-lint' )( config );
@@ -68,3 +66,40 @@ gulp.task( 'bundle', ( callback ) => {
 		() => ckeditor5DevBundle.showSummary( callback )
 	);
 } );
+
+// Build tasks.
+const ckeditor5DevBuilder = require( 'ckeditor5-dev-builder' )( config );
+const builder = ckeditor5DevBuilder.builder;
+gulp.task( 'build', callback => {
+	runSequence( 'build:clean:all', 'build:themes', 'build:js', callback );
+} );
+
+gulp.task( 'build:clean:all', builder.clean.all );
+gulp.task( 'build:clean:themes', builder.clean.themes );
+gulp.task( 'build:clean:js', () => builder.clean.js() );
+
+gulp.task( 'build:themes', ( callback ) => {
+	runSequence( 'build:clean:themes', 'build:icons', 'build:sass', callback );
+} );
+
+gulp.task( 'build:sass', () => builder.build.sass() );
+gulp.task( 'build:icons', () => builder.build.icons() );
+gulp.task( 'build:js', [ 'build:clean:js' ], () => builder.build.js() );
+
+// Tasks specific for preparing build with unmodified source files. Uses by `gulp docs` or `gulp bundle`.
+gulp.task( 'build:clean:js:esnext', () => builder.clean.js( { formats: [ 'esnext' ] } ) );
+gulp.task( 'build:clean:themes:esnext', () => builder.clean.themes( { formats: [ 'esnext' ] } ) );
+gulp.task( 'build:sass:esnext', () => builder.build.sass( { formats: [ 'esnext' ] } ) );
+gulp.task( 'build:icons:esnext', () => builder.build.icons( { formats: [ 'esnext' ] } ) );
+gulp.task( 'build:js:esnext', [ 'build:clean:js:esnext' ], () => builder.build.js( { formats: [ 'esnext' ] } ) );
+gulp.task( 'build:themes:esnext', ( callback ) => {
+	runSequence( 'build:clean:themes:esnext', 'build:icons:esnext', 'build:sass:esnext', callback );
+} );
+
+// Tasks specific for testing under node.
+gulp.task( 'build:clean:js:cjs', () => builder.clean.js( { formats: [ 'cjs' ] } ) );
+gulp.task( 'build:js:cjs', [ 'build:clean:js:cjs' ], () => builder.build.js( { formats: [ 'cjs' ] } ) );
+
+// Docs.
+const docsBuilder = ckeditor5DevBuilder.docs;
+gulp.task( 'docs', [ 'build:js:esnext' ], docsBuilder.buildDocs );

+ 1 - 4
package.json

@@ -35,6 +35,7 @@
     "benderjs-sinon": "^0.3.0",
     "chai": "^3.4.0",
     "ckeditor5-dev-bundler-rollup": "ckeditor/ckeditor5-dev-bundler-rollup",
+    "ckeditor5-dev-builder": "ckeditor/ckeditor5-dev-builder",
     "ckeditor5-dev-env": "ckeditor/ckeditor5-dev-env",
     "ckeditor5-dev-lint": "ckeditor/ckeditor5-dev-lint",
     "ckeditor5-dev-utils": "ckeditor/ckeditor5-dev-utils",
@@ -44,7 +45,6 @@
     "gulp-filter": "^3.0.1",
     "gulp-filter-by": "^1.2.0",
     "gulp-istanbul": "^0.10.4",
-    "gulp-jsdoc3": "^0.2.0",
     "gulp-mirror": "^1",
     "gulp-mocha": "^2.2.0",
     "gulp-plumber": "^1.1.0",
@@ -57,8 +57,6 @@
     "gulp-watch": "^4.3.7",
     "guppy-pre-commit": "^0.3.0",
     "gzip-size": "^3.0.0",
-    "jsdoc": "^3.4.0",
-    "merge-stream": "^1.0.0",
     "minimist": "^1.2.0",
     "mkdirp": "^0.5.1",
     "mockery": "^1.4.0",
@@ -69,7 +67,6 @@
     "run-sequence": "^1.1.5",
     "semver": "^5.1.0",
     "sinon": "^1.17.0",
-    "through2": "^2.0.0",
     "vinyl": "^1.1.1"
   },
   "engines": {