From 53f5e9eb114d512e8d223c40f9fb0eea9ccb433a Mon Sep 17 00:00:00 2001 From: Aleksander Nowodzinski Date: Fri, 5 Apr 2019 17:14:57 +0200 Subject: [PATCH 01/12] Allowed a configuration to CKEditorInspector#attach() to attach the inspector collapsed. Implemented CKEditorInspector#destroy(). --- README.md | 27 ++++++ src/ckeditorinspector.js | 136 ++++++++++++++++++++++----- src/components/ui.js | 6 +- tests/inspector/ckeditorinspector.js | 44 +++++++++ tests/inspector/components/ui.js | 31 ++++-- 5 files changed, 210 insertions(+), 34 deletions(-) diff --git a/README.md b/README.md index e994b90..fcddbd5 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,33 @@ ClassicEditor Call `CKEditorInspector.detach( name )` to detach an instance from the inspector. +### Configuration + +You can pass configuration options to the `CKEditorInspector.attach()` method as the last argument: + +```js +CKEditorInspector.attach( 'editor-name', editor, { + // configuration options +} ); + +CKEditorInspector.attach( 'editor-name', { + // configuration options +} ); +``` + +#### `isCollapsed` + +To attach the inspector with a collapsed UI, use the `options.isCollapsed` option. + +**Note**: This option works when `CKEditorInspector.attach()` is called for the first time only. + +```js +CKEditorInspector.attach( 'editor-name', editor, { + // Attach the inspector to the "editor" but the UI will be collapsed. + isCollapsed: true +} ); +``` + ## Compatibility The inspector works with CKEditor 5 [v12.0.0](https://github.com/ckeditor/ckeditor5/releases/tag/v12.0.0)+. diff --git a/src/ckeditorinspector.js b/src/ckeditorinspector.js index 8d08725..46535ee 100644 --- a/src/ckeditorinspector.js +++ b/src/ckeditorinspector.js @@ -36,61 +36,147 @@ export default class CKEditorInspector { * console.error( error ); * } ); * + * **Note:** You can pass configuration options when attaching: + * + * CKEditorInspector.attach( editor, { ... } ); + * CKEditorInspector.attach( 'my-editor', editor, { ... } ); + * * @param {Editor|String} editorOrName When an unique string is provided, the editor will be listed in the inspector * under a name (the instance passed as a second argument). If an editor instance is passed, the editor with be * attached and assigned a generated name. - * @param {Editor} [editor] An instance of the editor, if the first argument was specified as a string. + * @param {Editor|CKEditorInspectorConfig} [editorOrOptions] An instance of the editor, if the first argument was specified as a string. + * Otherwise, an object of configuration options controlling the behavior of the inspector. + * @param {CKEditorInspectorConfig} [options] An object of configuration options controlling the behavior of the inspector. * @returns {String} The unique name of the editor in the inspector. Useful when using `CKEditorInspector.detach()`. */ - static attach( editorOrName, editor ) { - let name, instance; - - if ( typeof editorOrName === 'string' ) { - name = editorOrName; - instance = editor; - } else { - name = `editor-${ ++unnamedEditorCount }`; - instance = editorOrName; - } + static attach( ...args ) { + const { editorName, editorInstance, options } = normalizeArguments( args ); Logger.group( '%cAttached the inspector to a CKEditor 5 instance. To learn more, visit https://ckeditor.com/docs/ckeditor5.', 'font-weight: bold;' ); - Logger.log( `Editor instance "${ name }"`, instance ); + Logger.log( `Editor instance "${ editorName }"`, editorInstance ); Logger.groupEnd(); - CKEditorInspector._editors.set( name, instance ); + CKEditorInspector._editors.set( editorName, editorInstance ); - instance.on( 'destroy', () => { - CKEditorInspector.detach( name ); + editorInstance.on( 'destroy', () => { + CKEditorInspector.detach( editorName ); } ); - if ( !container.parentNode ) { - document.body.appendChild( container ); - - ReactDOM.render( - , - container ); + if ( !CKEditorInspector._isMounted ) { + CKEditorInspector._mount( options ); } CKEditorInspector._updateState(); - return name; + return editorName; } + /** + * Detaches the inspector from an editor instance. + * + * CKEditorInspector.attach( 'my-editor', editor ); + * + * // The inspector will no longer inspect the "editor". + * CKEditorInspector.detach( 'my-editor' ); + * + * @param {String} string Name of the editor to detach. + */ static detach( name ) { CKEditorInspector._editors.delete( name ); CKEditorInspector._updateState(); } + /** + * Destroys the entire inspector application and removes it from DOM. + */ + static destroy() { + ReactDOM.unmountComponentAtNode( container ); + CKEditorInspector._editors.clear(); + container.remove(); + } + static _updateState() { + // Don't update state if the application was destroy()ed. + if ( !CKEditorInspector._isMounted ) { + return; + } + CKEditorInspector._inspectorRef.current.setState( { editors: CKEditorInspector._editors } ); } + + static _mount( options ) { + document.body.appendChild( container ); + + ReactDOM.render( + , + container ); + } + + get _isMounted() { + return !!CKEditorInspector._inspectorRef.current; + } +} + +function normalizeArguments( args ) { + const normalized = {}; + + // attach( editor ); + if ( args.length === 1 ) { + normalized.editorName = getNextEditorName(); + normalized.editorInstance = args[ 0 ]; + } + // attach( 'foo', editor ); + // attach( editor, { options } ); + else if ( args.length === 2 ) { + // attach( 'foo', editor ); + if ( typeof args[ 0 ] === 'string' ) { + normalized.editorName = args[ 0 ]; + normalized.editorInstance = args[ 1 ]; + } + // attach( editor, { options } ); + else { + normalized.editorName = getNextEditorName(); + normalized.editorInstance = args[ 0 ]; + normalized.options = args[ 1 ]; + } + } + // attach( 'foo', editor, { options } ); + else { + normalized.editorName = args[ 0 ]; + normalized.editorInstance = args[ 1 ]; + normalized.options = args[ 2 ]; + } + + normalized.options = normalized.options || {}; + + return normalized; +} + +function getNextEditorName() { + return `editor-${ ++unnamedEditorCount }`; } CKEditorInspector._editors = new Map(); CKEditorInspector._inspectorRef = React.createRef(); + +/** + * The configuration options of the inspector. + * + * @interface CKEditorInspectorConfig + */ + +/** + * Controls the initial collapsed state of the inspector. Allows attaching to an editor instance without + * expanding the UI. + * + * **Note**: Works when `attach()` is called for the first time only. + * + * @member {Boolean} CKEditorInspectorConfig#isCollapsed + */ diff --git a/src/components/ui.js b/src/components/ui.js index e607771..aebdc22 100644 --- a/src/components/ui.js +++ b/src/components/ui.js @@ -36,8 +36,12 @@ export default class InspectorUI extends Component { const height = StorageManager.get( LOCAL_STORAGE_INSPECTOR_HEIGHT ) || INSPECTOR_DEFAULT_HEIGHT; + // The collapsed state can be either configured by passing an option to `attach()` + // or retrieved from the last "session". + const isCollapsed = this.props.isCollapsed === true || StorageManager.get( LOCAL_STORAGE_IS_COLLAPSED ) === 'true'; + this.state = { - isCollapsed: StorageManager.get( LOCAL_STORAGE_IS_COLLAPSED ) === 'true', + isCollapsed, height, editors: null, currentEditorName: null, diff --git a/tests/inspector/ckeditorinspector.js b/tests/inspector/ckeditorinspector.js index c8182ee..7b3996c 100644 --- a/tests/inspector/ckeditorinspector.js +++ b/tests/inspector/ckeditorinspector.js @@ -90,6 +90,38 @@ describe( 'CKEditorInspector', () => { expect( inspectorRef.state.editors.size ).to.equal( 0 ); } ); } ); + + describe( 'options', () => { + describe( '#isCollapsed', () => { + beforeEach( () => { + CKEditorInspector.destroy(); + } ); + + it( 'does nothing if unspecified', () => { + CKEditorInspector.attach( 'foo', editor ); + + inspectorRef = CKEditorInspector._inspectorRef.current; + + expect( inspectorRef.props.isCollapsed ).to.be.undefined; + } ); + + it( 'controlls the initial collapsed state of the editor #1', () => { + CKEditorInspector.attach( 'foo', editor, { isCollapsed: true } ); + + inspectorRef = CKEditorInspector._inspectorRef.current; + + expect( inspectorRef.props.isCollapsed ).to.be.true; + } ); + + it( 'controlls the initial collapsed state of the editor #2', () => { + CKEditorInspector.attach( editor, { isCollapsed: true } ); + + inspectorRef = CKEditorInspector._inspectorRef.current; + + expect( inspectorRef.props.isCollapsed ).to.be.true; + } ); + } ); + } ); } ); describe( '#detach()', () => { @@ -105,4 +137,16 @@ describe( 'CKEditorInspector', () => { expect( inspectorRef.state.editors.size ).to.equal( 0 ); } ); } ); + + describe( '#destroy()', () => { + it( 'destroys the entire inspector application', () => { + CKEditorInspector.attach( 'foo', editor ); + + CKEditorInspector.destroy(); + + expect( CKEditorInspector._inspectorRef.current ).to.be.null; + expect( document.querySelector( '.ck-inspector-wrapper' ) ).to.be.null; + expect( CKEditorInspector._editors.size ).to.equal( 0 ); + } ); + } ); } ); diff --git a/tests/inspector/components/ui.js b/tests/inspector/components/ui.js index 6d0bf74..8ffa21c 100644 --- a/tests/inspector/components/ui.js +++ b/tests/inspector/components/ui.js @@ -81,17 +81,32 @@ describe( '', () => { wrapper.unmount(); } ); - it( 'restores state#isCollapsed from the storage', () => { - window.localStorage.setItem( 'ck5-inspector-is-collapsed', 'true' ); + describe( 'state#isCollapsed', () => { + it( 'can be passed as a props and override the state saved in the storage', () => { + window.localStorage.setItem( 'ck5-inspector-is-collapsed', 'false' ); - const wrapper = mount( - , - { attachTo: container } - ); + const wrapper = mount( + , + { attachTo: container } + ); - expect( wrapper.state().isCollapsed ).to.be.true; + expect( wrapper.state().isCollapsed ).to.be.true; - wrapper.unmount(); + wrapper.unmount(); + } ); + + it( 'is restored from the storage', () => { + window.localStorage.setItem( 'ck5-inspector-is-collapsed', 'true' ); + + const wrapper = mount( + , + { attachTo: container } + ); + + expect( wrapper.state().isCollapsed ).to.be.true; + + wrapper.unmount(); + } ); } ); it( 'restores state#activeTab from the storage', () => { From aabfdbfe5d8793105c7ea7cea140c62e3acda3b4 Mon Sep 17 00:00:00 2001 From: Aleksander Nowodzinski Date: Fri, 14 Jun 2019 16:24:30 +0200 Subject: [PATCH 02/12] Improvement CKEditorInspector#attach and #detach. Code refactoring. --- src/ckeditorinspector.js | 74 ++++++++-------------------- src/utils.js | 45 +++++++++++++++++ tests/inspector/ckeditorinspector.js | 35 ++++++++++++- 3 files changed, 98 insertions(+), 56 deletions(-) create mode 100644 src/utils.js diff --git a/src/ckeditorinspector.js b/src/ckeditorinspector.js index 46535ee..4c8d586 100644 --- a/src/ckeditorinspector.js +++ b/src/ckeditorinspector.js @@ -10,16 +10,12 @@ import ReactDOM from 'react-dom'; import InspectorUI from './components/ui'; import Logger from './logger'; +import { normalizeArguments } from './utils'; import './ckeditorinspector.css'; // From changelog -> webpack. window.CKEDITOR_INSPECTOR_VERSION = CKEDITOR_INSPECTOR_VERSION; -const container = document.createElement( 'div' ); -container.className = 'ck-inspector-wrapper'; - -let unnamedEditorCount = 0; - export default class CKEditorInspector { /** * Attaches the inspector to an editor instance. @@ -63,11 +59,8 @@ export default class CKEditorInspector { CKEditorInspector.detach( editorName ); } ); - if ( !CKEditorInspector._isMounted ) { - CKEditorInspector._mount( options ); - } - - CKEditorInspector._updateState(); + CKEditorInspector._mount( options ); + CKEditorInspector._updateEditorsState(); return editorName; } @@ -84,19 +77,24 @@ export default class CKEditorInspector { */ static detach( name ) { CKEditorInspector._editors.delete( name ); - CKEditorInspector._updateState(); + CKEditorInspector._updateEditorsState(); } /** * Destroys the entire inspector application and removes it from DOM. */ static destroy() { - ReactDOM.unmountComponentAtNode( container ); + if ( !CKEditorInspector._wrapper ) { + return; + } + + ReactDOM.unmountComponentAtNode( CKEditorInspector._wrapper ); CKEditorInspector._editors.clear(); - container.remove(); + CKEditorInspector._wrapper.remove(); + CKEditorInspector._wrapper = null; } - static _updateState() { + static _updateEditorsState() { // Don't update state if the application was destroy()ed. if ( !CKEditorInspector._isMounted ) { return; @@ -108,6 +106,12 @@ export default class CKEditorInspector { } static _mount( options ) { + if ( CKEditorInspector._wrapper ) { + return; + } + + const container = CKEditorInspector._wrapper = document.createElement( 'div' ); + container.className = 'ck-inspector-wrapper'; document.body.appendChild( container ); ReactDOM.render( @@ -119,52 +123,14 @@ export default class CKEditorInspector { container ); } - get _isMounted() { + static get _isMounted() { return !!CKEditorInspector._inspectorRef.current; } } -function normalizeArguments( args ) { - const normalized = {}; - - // attach( editor ); - if ( args.length === 1 ) { - normalized.editorName = getNextEditorName(); - normalized.editorInstance = args[ 0 ]; - } - // attach( 'foo', editor ); - // attach( editor, { options } ); - else if ( args.length === 2 ) { - // attach( 'foo', editor ); - if ( typeof args[ 0 ] === 'string' ) { - normalized.editorName = args[ 0 ]; - normalized.editorInstance = args[ 1 ]; - } - // attach( editor, { options } ); - else { - normalized.editorName = getNextEditorName(); - normalized.editorInstance = args[ 0 ]; - normalized.options = args[ 1 ]; - } - } - // attach( 'foo', editor, { options } ); - else { - normalized.editorName = args[ 0 ]; - normalized.editorInstance = args[ 1 ]; - normalized.options = args[ 2 ]; - } - - normalized.options = normalized.options || {}; - - return normalized; -} - -function getNextEditorName() { - return `editor-${ ++unnamedEditorCount }`; -} - CKEditorInspector._editors = new Map(); CKEditorInspector._inspectorRef = React.createRef(); +CKEditorInspector._wrapper = null; /** * The configuration options of the inspector. diff --git a/src/utils.js b/src/utils.js new file mode 100644 index 0000000..008402d --- /dev/null +++ b/src/utils.js @@ -0,0 +1,45 @@ +/** + * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md. + */ + +let unnamedEditorCount = 0; + +export function normalizeArguments( args ) { + const normalized = {}; + + // attach( editor ); + if ( args.length === 1 ) { + normalized.editorName = getNextEditorName(); + normalized.editorInstance = args[ 0 ]; + } + // attach( 'foo', editor ); + // attach( editor, { options } ); + else if ( args.length === 2 ) { + // attach( 'foo', editor ); + if ( typeof args[ 0 ] === 'string' ) { + normalized.editorName = args[ 0 ]; + normalized.editorInstance = args[ 1 ]; + } + // attach( editor, { options } ); + else { + normalized.editorName = getNextEditorName(); + normalized.editorInstance = args[ 0 ]; + normalized.options = args[ 1 ]; + } + } + // attach( 'foo', editor, { options } ); + else { + normalized.editorName = args[ 0 ]; + normalized.editorInstance = args[ 1 ]; + normalized.options = args[ 2 ]; + } + + normalized.options = normalized.options || {}; + + return normalized; +} + +function getNextEditorName() { + return `editor-${ ++unnamedEditorCount }`; +} diff --git a/tests/inspector/ckeditorinspector.js b/tests/inspector/ckeditorinspector.js index 7b3996c..2ce2365 100644 --- a/tests/inspector/ckeditorinspector.js +++ b/tests/inspector/ckeditorinspector.js @@ -3,7 +3,7 @@ * For licensing, see LICENSE.md. */ -/* global document, window */ +/* global document, window, HTMLElement */ import TestEditor from '../utils/testeditor'; import CKEditorInspector from '../../src/ckeditorinspector'; @@ -29,6 +29,8 @@ describe( 'CKEditorInspector', () => { element.remove(); + CKEditorInspector.destroy(); + return editor.destroy(); } ); @@ -41,10 +43,13 @@ describe( 'CKEditorInspector', () => { describe( '#attach()', () => { it( 'adds inspector to DOM', () => { expect( document.querySelector( '.ck-inspector-wrapper' ) ).to.be.null; + expect( CKEditorInspector._wrapper ).to.be.null; CKEditorInspector.attach( 'foo', editor ); - const wrapper = document.querySelector( '.ck-inspector-wrapper' ); + expect( CKEditorInspector._wrapper ).to.be.instanceOf( HTMLElement ); + + const wrapper = CKEditorInspector._wrapper; expect( wrapper.tagName.toLowerCase() ).to.equal( 'div' ); expect( wrapper.parentNode ).to.equal( document.body ); @@ -52,6 +57,22 @@ describe( 'CKEditorInspector', () => { expect( wrapper.firstChild.classList.contains( 'ck-inspector' ) ).to.be.true; } ); + it( 'adds inspector to DOM only once when attaching to the first editor', () => { + return TestEditor.create( element ) + .then( anotherEditor => { + CKEditorInspector.attach( 'foo', editor ); + CKEditorInspector.attach( 'bar', anotherEditor ); + + expect( document.querySelectorAll( '.ck-inspector-wrapper' ) ).to.be.lengthOf( 1 ); + expect( document.querySelectorAll( '.ck-inspector' ) ).to.be.lengthOf( 1 ); + + return anotherEditor.destroy(); + } ) + .catch( err => { + throw err; + } ); + } ); + it( 'attaches editors under generated names', () => { return TestEditor.create( element ) .then( anotherEditor => { @@ -136,6 +157,15 @@ describe( 'CKEditorInspector', () => { expect( inspectorRef.state.editors.size ).to.equal( 0 ); } ); + + it( 'does not throw if executed multiple times', () => { + CKEditorInspector.attach( 'foo', editor ); + + expect( () => { + CKEditorInspector.detach( 'foo' ); + CKEditorInspector.detach( 'foo' ); + } ).to.not.throw(); + } ); } ); describe( '#destroy()', () => { @@ -147,6 +177,7 @@ describe( 'CKEditorInspector', () => { expect( CKEditorInspector._inspectorRef.current ).to.be.null; expect( document.querySelector( '.ck-inspector-wrapper' ) ).to.be.null; expect( CKEditorInspector._editors.size ).to.equal( 0 ); + expect( CKEditorInspector._wrapper ).to.be.null; } ); } ); } ); From 5e16c58bc4485e4cb0c516e0945d79aed6fef875 Mon Sep 17 00:00:00 2001 From: Aleksander Nowodzinski Date: Fri, 14 Jun 2019 17:05:14 +0200 Subject: [PATCH 03/12] Unified CKEditorInspector#attach arguments format for better DX. --- README.md | 48 +++++++++++++++------ sample/index.html | 2 +- src/ckeditorinspector.js | 64 +++++++++++++++++----------- src/utils.js | 53 ++++++++++++++--------- tests/inspector/ckeditorinspector.js | 56 ++++++++++++++++-------- 5 files changed, 147 insertions(+), 76 deletions(-) diff --git a/README.md b/README.md index e8e002c..59b9555 100644 --- a/README.md +++ b/README.md @@ -21,33 +21,55 @@ Include the script to load the inspector: ``` -Call `CKEditorInspector.attach( name, editor )` when editor instance is ready: +Call `CKEditorInspector.attach( editor )` when editor instance is ready: ```js ClassicEditor - .create( ... ) - .then( editor => { - CKEditorInspector.attach( 'editor-name', editor ); - } ) - .catch( error => { - console.error( error ); - } ); + .create( ... ) + .then( editor => { + CKEditorInspector.attach( editor ); + } ) + .catch( error => { + console.error( error ); + } ); ``` -**Note**: You can attach multiple editors to the inspector. Select the editor instance in the drop–down inside the inspector panel to switch context. +**Note**: You can attach to multiple editors under unique names at a time. Then you can select the editor instance in the drop–down inside the inspector panel to switch context. -Call `CKEditorInspector.detach( name )` to detach an instance from the inspector. +```js +CKEditorInspector.attach( { + 'header-editor': editor1, + 'footer-editor': editor2, + // ... +} ); +``` + +Call `CKEditorInspector.detach( name )` to detach the inspector from an editor instance. + +***Tip**: `CKEditorInspector.attach()` returns the generated name of the editor if it was not provided. + +```js +// Attach the inspector to two editor instances: +const generatedName = CKEditorInspector.attach( editor1 ); +CKEditorInspector.attach( { myEditor: editor2 } ); + +// ... + +// Detach from the instances: +CKEditorInspector.detach( generatedName ); +CKEditorInspector.detach( 'myEditor' ); +``` ### Configuration You can pass configuration options to the `CKEditorInspector.attach()` method as the last argument: ```js -CKEditorInspector.attach( 'editor-name', editor, { +CKEditorInspector.attach( editor, { // configuration options } ); -CKEditorInspector.attach( 'editor-name', { +CKEditorInspector.attach( { 'editor-name': editor }, { // configuration options } ); ``` @@ -59,7 +81,7 @@ To attach the inspector with a collapsed UI, use the `options.isCollapsed` optio **Note**: This option works when `CKEditorInspector.attach()` is called for the first time only. ```js -CKEditorInspector.attach( 'editor-name', editor, { +CKEditorInspector.attach( { 'editor-name': editor }, { // Attach the inspector to the "editor" but the UI will be collapsed. isCollapsed: true } ); diff --git a/sample/index.html b/sample/index.html index 0a6962f..d6a01d1 100644 --- a/sample/index.html +++ b/sample/index.html @@ -81,7 +81,7 @@

Second editor

.then( editor => { window.firstEditor = editor; document.body.insertBefore( editor.ui.view.toolbar.element, editor.ui.getEditableElement() ); - CKEditorInspector.attach( 'first-editor', editor ); + CKEditorInspector.attach( { 'first-editor': editor } ); } ) .catch( error => { console.error( error ); diff --git a/src/ckeditorinspector.js b/src/ckeditorinspector.js index 4c8d586..1598a21 100644 --- a/src/ckeditorinspector.js +++ b/src/ckeditorinspector.js @@ -24,51 +24,63 @@ export default class CKEditorInspector { * .create( ... ) * .then( editor => { * CKEditorInspector.attach( editor ); - * - * // Alternatively: - * // CKEditorInspector.attach( 'my-editor', editor ); * } ) * .catch( error => { * console.error( error ); * } ); * - * **Note:** You can pass configuration options when attaching: + * **Note:** You can attach to multiple editors at a time under unique names: + * + * CKEditorInspector.attach( { + * 'header-editor': editor1, + * 'footer-editor': editor2, + * // ... + * } ); * - * CKEditorInspector.attach( editor, { ... } ); - * CKEditorInspector.attach( 'my-editor', editor, { ... } ); + * **Note:** You can pass global configuration options when attaching: * - * @param {Editor|String} editorOrName When an unique string is provided, the editor will be listed in the inspector - * under a name (the instance passed as a second argument). If an editor instance is passed, the editor with be - * attached and assigned a generated name. - * @param {Editor|CKEditorInspectorConfig} [editorOrOptions] An instance of the editor, if the first argument was specified as a string. - * Otherwise, an object of configuration options controlling the behavior of the inspector. - * @param {CKEditorInspectorConfig} [options] An object of configuration options controlling the behavior of the inspector. - * @returns {String} The unique name of the editor in the inspector. Useful when using `CKEditorInspector.detach()`. + * CKEditorInspector.attach( editor, { option: 'value', ... } ); + * CKEditorInspector.attach( { + * 'header-editor': editor1, + * 'footer-editor': editor2 + * }, { option: 'value', ... } ); + * + * @param {Editor|Object} editorOrEditors If an editor instance is passed, the inspect will attach to the editor + * with an auto–generated name. It is possible to pass an object with `name: instance` pairs to attach to + * multiple editors at a time with unique names. + * @param {CKEditorInspectorConfig} [options] An object of global configuration options controlling the + * behavior of the inspector. + * @returns {Array.} Names of the editors the inspector attached to. Useful when using `CKEditorInspector.detach()` + * with generated editor names. */ static attach( ...args ) { - const { editorName, editorInstance, options } = normalizeArguments( args ); + const { editors, options } = normalizeArguments( args ); - Logger.group( '%cAttached the inspector to a CKEditor 5 instance. To learn more, visit https://ckeditor.com/docs/ckeditor5.', - 'font-weight: bold;' ); - Logger.log( `Editor instance "${ editorName }"`, editorInstance ); - Logger.groupEnd(); + for ( const editorName in editors ) { + const editorInstance = editors[ editorName ]; - CKEditorInspector._editors.set( editorName, editorInstance ); + Logger.group( '%cAttached the inspector to a CKEditor 5 instance. To learn more, visit https://ckeditor.com/docs/ckeditor5.', + 'font-weight: bold;' ); + Logger.log( `Editor instance "${ editorName }"`, editorInstance ); + Logger.groupEnd(); - editorInstance.on( 'destroy', () => { - CKEditorInspector.detach( editorName ); - } ); + CKEditorInspector._editors.set( editorName, editorInstance ); - CKEditorInspector._mount( options ); - CKEditorInspector._updateEditorsState(); + editorInstance.on( 'destroy', () => { + CKEditorInspector.detach( editorName ); + } ); + + CKEditorInspector._mount( options ); + CKEditorInspector._updateEditorsState(); + } - return editorName; + return Object.keys( editors ); } /** * Detaches the inspector from an editor instance. * - * CKEditorInspector.attach( 'my-editor', editor ); + * CKEditorInspector.attach( { 'my-editor': editor } ); * * // The inspector will no longer inspect the "editor". * CKEditorInspector.detach( 'my-editor' ); diff --git a/src/utils.js b/src/utils.js index 008402d..f1192bf 100644 --- a/src/utils.js +++ b/src/utils.js @@ -6,33 +6,43 @@ let unnamedEditorCount = 0; export function normalizeArguments( args ) { - const normalized = {}; + const normalized = { + editors: {} + }; // attach( editor ); + // attach( { foo: editor1, bar: editor2 } ); if ( args.length === 1 ) { - normalized.editorName = getNextEditorName(); - normalized.editorInstance = args[ 0 ]; - } - // attach( 'foo', editor ); - // attach( editor, { options } ); - else if ( args.length === 2 ) { - // attach( 'foo', editor ); - if ( typeof args[ 0 ] === 'string' ) { - normalized.editorName = args[ 0 ]; - normalized.editorInstance = args[ 1 ]; + const editorOrEditorPairs = args[ 0 ]; + + // attach( editor ); + if ( isEditorInstance( editorOrEditorPairs ) ) { + normalized.editors[ getNextEditorName() ] = args[ 0 ]; } - // attach( editor, { options } ); + // attach( { foo: editor1, bar: editor2, ... } ); else { - normalized.editorName = getNextEditorName(); - normalized.editorInstance = args[ 0 ]; - normalized.options = args[ 1 ]; + for ( const name in editorOrEditorPairs ) { + normalized.editors[ name ] = editorOrEditorPairs[ name ]; + } } } - // attach( 'foo', editor, { options } ); + // attach( editor, { options } ); + // attach( { foo: editor1, bar: editor2 }, { options } ); else { - normalized.editorName = args[ 0 ]; - normalized.editorInstance = args[ 1 ]; - normalized.options = args[ 2 ]; + // attach( editor, { options } ); + if ( isEditorInstance( args[ 0 ] ) ) { + normalized.editors[ getNextEditorName() ] = args[ 0 ]; + } + // attach( { foo: editor1, bar: editor2 }, { options } ); + else { + const editorOrEditorPairs = args[ 0 ]; + + for ( const name in editorOrEditorPairs ) { + normalized.editors[ name ] = editorOrEditorPairs[ name ]; + } + } + + normalized.options = args[ 1 ]; } normalized.options = normalized.options || {}; @@ -43,3 +53,8 @@ export function normalizeArguments( args ) { function getNextEditorName() { return `editor-${ ++unnamedEditorCount }`; } + +function isEditorInstance( arg ) { + // Quack! 🦆 + return !!arg.model; +} diff --git a/tests/inspector/ckeditorinspector.js b/tests/inspector/ckeditorinspector.js index 2ce2365..452a482 100644 --- a/tests/inspector/ckeditorinspector.js +++ b/tests/inspector/ckeditorinspector.js @@ -45,7 +45,7 @@ describe( 'CKEditorInspector', () => { expect( document.querySelector( '.ck-inspector-wrapper' ) ).to.be.null; expect( CKEditorInspector._wrapper ).to.be.null; - CKEditorInspector.attach( 'foo', editor ); + CKEditorInspector.attach( { foo: editor } ); expect( CKEditorInspector._wrapper ).to.be.instanceOf( HTMLElement ); @@ -60,8 +60,8 @@ describe( 'CKEditorInspector', () => { it( 'adds inspector to DOM only once when attaching to the first editor', () => { return TestEditor.create( element ) .then( anotherEditor => { - CKEditorInspector.attach( 'foo', editor ); - CKEditorInspector.attach( 'bar', anotherEditor ); + CKEditorInspector.attach( { foo: editor } ); + CKEditorInspector.attach( { bar: anotherEditor } ); expect( document.querySelectorAll( '.ck-inspector-wrapper' ) ).to.be.lengthOf( 1 ); expect( document.querySelectorAll( '.ck-inspector' ) ).to.be.lengthOf( 1 ); @@ -73,16 +73,18 @@ describe( 'CKEditorInspector', () => { } ); } ); - it( 'attaches editors under generated names', () => { + it( 'attaches to editors under generated names', () => { return TestEditor.create( element ) .then( anotherEditor => { - CKEditorInspector.attach( editor ); - CKEditorInspector.attach( anotherEditor ); + const firstNames = CKEditorInspector.attach( editor ); + const secondNames = CKEditorInspector.attach( anotherEditor ); inspectorRef = CKEditorInspector._inspectorRef.current; expect( inspectorRef.state.editors.get( 'editor-1' ) ).to.equal( editor ); expect( inspectorRef.state.editors.get( 'editor-2' ) ).to.equal( anotherEditor ); + expect( firstNames ).to.have.members( [ 'editor-1' ] ); + expect( secondNames ).to.have.members( [ 'editor-2' ] ); return anotherEditor.destroy(); } ) @@ -91,23 +93,43 @@ describe( 'CKEditorInspector', () => { } ); } ); - it( 'attaches a new editor (named)', () => { - CKEditorInspector.attach( 'foo', editor ); + it( 'attaches to a named editor', () => { + CKEditorInspector.attach( { foo: editor } ); inspectorRef = CKEditorInspector._inspectorRef.current; expect( inspectorRef.state.editors.get( 'foo' ) ).to.equal( editor ); } ); + it( 'attaches to multiple editors at a time', () => { + return TestEditor.create( element ) + .then( anotherEditor => { + const names = CKEditorInspector.attach( { foo: editor, bar: anotherEditor } ); + + inspectorRef = CKEditorInspector._inspectorRef.current; + + expect( inspectorRef.state.editors.get( 'foo' ) ).to.equal( editor ); + expect( inspectorRef.state.editors.get( 'bar' ) ).to.equal( anotherEditor ); + expect( names ).to.have.members( [ 'foo', 'bar' ] ); + + return anotherEditor.destroy(); + } ) + .catch( err => { + throw err; + } ); + } ); + it( 'detaches when the editor is destroyed', () => { const spy = sinon.spy( CKEditorInspector, 'detach' ); - CKEditorInspector.attach( 'bar', editor ); + CKEditorInspector.attach( { bar: editor } ); return editor.destroy().then( () => { sinon.assert.calledOnce( spy ); sinon.assert.calledWith( spy, 'bar' ); + inspectorRef = CKEditorInspector._inspectorRef.current; + expect( inspectorRef.state.editors.size ).to.equal( 0 ); } ); } ); @@ -119,23 +141,23 @@ describe( 'CKEditorInspector', () => { } ); it( 'does nothing if unspecified', () => { - CKEditorInspector.attach( 'foo', editor ); + CKEditorInspector.attach( editor ); inspectorRef = CKEditorInspector._inspectorRef.current; expect( inspectorRef.props.isCollapsed ).to.be.undefined; } ); - it( 'controlls the initial collapsed state of the editor #1', () => { - CKEditorInspector.attach( 'foo', editor, { isCollapsed: true } ); + it( 'controlls the initial collapsed state of the editor (single editor)', () => { + CKEditorInspector.attach( editor, { isCollapsed: true } ); inspectorRef = CKEditorInspector._inspectorRef.current; expect( inspectorRef.props.isCollapsed ).to.be.true; } ); - it( 'controlls the initial collapsed state of the editor #2', () => { - CKEditorInspector.attach( editor, { isCollapsed: true } ); + it( 'controlls the initial collapsed state of the editor (multiple editors)', () => { + CKEditorInspector.attach( { foo: editor }, { isCollapsed: true } ); inspectorRef = CKEditorInspector._inspectorRef.current; @@ -147,7 +169,7 @@ describe( 'CKEditorInspector', () => { describe( '#detach()', () => { it( 'detaches an editor', () => { - CKEditorInspector.attach( 'foo', editor ); + CKEditorInspector.attach( { foo: editor } ); inspectorRef = CKEditorInspector._inspectorRef.current; @@ -159,7 +181,7 @@ describe( 'CKEditorInspector', () => { } ); it( 'does not throw if executed multiple times', () => { - CKEditorInspector.attach( 'foo', editor ); + CKEditorInspector.attach( { foo: editor } ); expect( () => { CKEditorInspector.detach( 'foo' ); @@ -170,7 +192,7 @@ describe( 'CKEditorInspector', () => { describe( '#destroy()', () => { it( 'destroys the entire inspector application', () => { - CKEditorInspector.attach( 'foo', editor ); + CKEditorInspector.attach( { foo: editor } ); CKEditorInspector.destroy(); From 0a16f76fb38bda902c7bb3aa6a8ed80091b3ce3d Mon Sep 17 00:00:00 2001 From: Aleksander Nowodzinski Date: Mon, 17 Jun 2019 10:29:17 +0200 Subject: [PATCH 04/12] Docs: Fixed a typo in README.md. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 59b9555..9bf4533 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ CKEditorInspector.attach( { Call `CKEditorInspector.detach( name )` to detach the inspector from an editor instance. -***Tip**: `CKEditorInspector.attach()` returns the generated name of the editor if it was not provided. +**Tip**: `CKEditorInspector.attach()` returns the generated name of the editor if it was not provided. ```js // Attach the inspector to two editor instances: From 4fcb6aa504fdd38990d443a88303c6b807e30790 Mon Sep 17 00:00:00 2001 From: Aleksander Nowodzinski Date: Tue, 18 Jun 2019 10:59:06 +0200 Subject: [PATCH 05/12] Code refactoring: simplified conditions in the normalizeArguments() helper. --- src/utils.js | 40 ++++++++++------------------------------ 1 file changed, 10 insertions(+), 30 deletions(-) diff --git a/src/utils.js b/src/utils.js index f1192bf..7c3e0ad 100644 --- a/src/utils.js +++ b/src/utils.js @@ -10,42 +10,22 @@ export function normalizeArguments( args ) { editors: {} }; - // attach( editor ); - // attach( { foo: editor1, bar: editor2 } ); - if ( args.length === 1 ) { - const editorOrEditorPairs = args[ 0 ]; + const editorOrEditorPairs = args[ 0 ]; - // attach( editor ); - if ( isEditorInstance( editorOrEditorPairs ) ) { - normalized.editors[ getNextEditorName() ] = args[ 0 ]; - } - // attach( { foo: editor1, bar: editor2, ... } ); - else { - for ( const name in editorOrEditorPairs ) { - normalized.editors[ name ] = editorOrEditorPairs[ name ]; - } - } + // attach( editor ); + if ( isEditorInstance( editorOrEditorPairs ) ) { + normalized.editors[ getNextEditorName() ] = args[ 0 ]; } - // attach( editor, { options } ); - // attach( { foo: editor1, bar: editor2 }, { options } ); + // attach( { foo: editor1, bar: editor2, ... } ); else { - // attach( editor, { options } ); - if ( isEditorInstance( args[ 0 ] ) ) { - normalized.editors[ getNextEditorName() ] = args[ 0 ]; + for ( const name in editorOrEditorPairs ) { + normalized.editors[ name ] = editorOrEditorPairs[ name ]; } - // attach( { foo: editor1, bar: editor2 }, { options } ); - else { - const editorOrEditorPairs = args[ 0 ]; - - for ( const name in editorOrEditorPairs ) { - normalized.editors[ name ] = editorOrEditorPairs[ name ]; - } - } - - normalized.options = args[ 1 ]; } - normalized.options = normalized.options || {}; + // attach( editor, { options } ); + // attach( { foo: editor1, bar: editor2 }, { options } ); + normalized.options = args[ 1 ] || {}; return normalized; } From ff94adc4212451aecf058b6527a9ef450078c1bb Mon Sep 17 00:00:00 2001 From: Aleksander Nowodzinski Date: Tue, 18 Jun 2019 11:20:38 +0200 Subject: [PATCH 06/12] Allowed deprecated syntax for an easier breaking change migration but followed by a warning. --- src/logger.js | 4 ++++ src/utils.js | 24 +++++++++++++++++------- tests/inspector/ckeditorinspector.js | 13 ++++++++++++- tests/inspector/logger.js | 10 ++++++++++ 4 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/logger.js b/src/logger.js index 2e2eb15..1092918 100644 --- a/src/logger.js +++ b/src/logger.js @@ -17,4 +17,8 @@ export default class Logger { static log( ...args ) { console.log( ...args ); } + + static warn( ...args ) { + console.warn( ...args ); + } } diff --git a/src/utils.js b/src/utils.js index 7c3e0ad..72e1f31 100644 --- a/src/utils.js +++ b/src/utils.js @@ -3,18 +3,32 @@ * For licensing, see LICENSE.md. */ +import Logger from './logger'; + let unnamedEditorCount = 0; export function normalizeArguments( args ) { const normalized = { - editors: {} + editors: {}, + + // attach( ..., { options } ); + options: args[ 1 ] || {} }; - const editorOrEditorPairs = args[ 0 ]; + let editorOrEditorPairs = args[ 0 ]; + + if ( typeof editorOrEditorPairs === 'string' ) { + Logger.warn( + '[CKEditorInspector] The CKEditorInspector.attach( \'editorName\', editor ) syntax has been deprecated and will be removed ' + + 'in the near future. To pass a name of an editor instance, use CKEditorInspector.attach( { editorName: editor } ) instead.' + ); + + editorOrEditorPairs = { [ editorOrEditorPairs ]: args[ 1 ] }; + } // attach( editor ); if ( isEditorInstance( editorOrEditorPairs ) ) { - normalized.editors[ getNextEditorName() ] = args[ 0 ]; + normalized.editors[ getNextEditorName() ] = editorOrEditorPairs; } // attach( { foo: editor1, bar: editor2, ... } ); else { @@ -23,10 +37,6 @@ export function normalizeArguments( args ) { } } - // attach( editor, { options } ); - // attach( { foo: editor1, bar: editor2 }, { options } ); - normalized.options = args[ 1 ] || {}; - return normalized; } diff --git a/tests/inspector/ckeditorinspector.js b/tests/inspector/ckeditorinspector.js index 452a482..caea26d 100644 --- a/tests/inspector/ckeditorinspector.js +++ b/tests/inspector/ckeditorinspector.js @@ -10,11 +10,12 @@ import CKEditorInspector from '../../src/ckeditorinspector'; import Logger from '../../src/logger'; describe( 'CKEditorInspector', () => { - let editor, element, inspectorRef; + let editor, element, inspectorRef, warnStub; beforeEach( () => { // Silence inspector logs. sinon.stub( Logger, 'log' ).callsFake( () => {} ); + warnStub = sinon.stub( Logger, 'warn' ).callsFake( () => {} ); element = document.createElement( 'div' ); document.body.appendChild( element ); @@ -26,6 +27,7 @@ describe( 'CKEditorInspector', () => { afterEach( () => { Logger.log.restore(); + Logger.warn.restore(); element.remove(); @@ -119,6 +121,15 @@ describe( 'CKEditorInspector', () => { } ); } ); + it( 'supports the deprecated syntax but warns', () => { + CKEditorInspector.attach( 'foo', editor ); + + inspectorRef = CKEditorInspector._inspectorRef.current; + expect( inspectorRef.state.editors.get( 'foo' ) ).to.equal( editor ); + sinon.assert.calledOnce( warnStub ); + sinon.assert.calledWithMatch( warnStub, /^\[CKEditorInspector\]/ ); + } ); + it( 'detaches when the editor is destroyed', () => { const spy = sinon.spy( CKEditorInspector, 'detach' ); diff --git a/tests/inspector/logger.js b/tests/inspector/logger.js index ad77290..0598abb 100644 --- a/tests/inspector/logger.js +++ b/tests/inspector/logger.js @@ -37,4 +37,14 @@ describe( 'Logger', () => { sinon.assert.calledWithExactly( spy.firstCall, 'foo', 'bar' ); } ); } ); + + describe( '#warn()', () => { + it( 'calls console.warn', () => { + const spy = sinon.spy( console, 'warn' ); + + Logger.warn( 'foo', 'bar' ); + + sinon.assert.calledWithExactly( spy.firstCall, 'foo', 'bar' ); + } ); + } ); } ); From 905e9655530b07e3f87c8dfb806a8c19bd81d7d6 Mon Sep 17 00:00:00 2001 From: Aleksander Nowodzinski Date: Tue, 18 Jun 2019 12:04:31 +0200 Subject: [PATCH 07/12] Fix: Do not consider #attach() options when using deprecated syntax. Enhanced the deprecated syntax warning. --- src/utils.js | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/src/utils.js b/src/utils.js index 72e1f31..8733f48 100644 --- a/src/utils.js +++ b/src/utils.js @@ -10,31 +10,32 @@ let unnamedEditorCount = 0; export function normalizeArguments( args ) { const normalized = { editors: {}, - - // attach( ..., { options } ); - options: args[ 1 ] || {} + options: {} }; - let editorOrEditorPairs = args[ 0 ]; - - if ( typeof editorOrEditorPairs === 'string' ) { + // Deprecated // attach( 'name', editor ); + if ( typeof args[ 0 ] === 'string' ) { Logger.warn( - '[CKEditorInspector] The CKEditorInspector.attach( \'editorName\', editor ) syntax has been deprecated and will be removed ' + - 'in the near future. To pass a name of an editor instance, use CKEditorInspector.attach( { editorName: editor } ) instead.' + `[CKEditorInspector] The CKEditorInspector.attach( '${ args[ 0 ] }', editor ) syntax has been deprecated ` + + 'and will be removed in the near future. To pass a name of an editor instance, use ' + + `CKEditorInspector.attach( { '${ args[ 0 ] }': editor } ) instead.` ); - editorOrEditorPairs = { [ editorOrEditorPairs ]: args[ 1 ] }; - } - - // attach( editor ); - if ( isEditorInstance( editorOrEditorPairs ) ) { - normalized.editors[ getNextEditorName() ] = editorOrEditorPairs; - } - // attach( { foo: editor1, bar: editor2, ... } ); - else { - for ( const name in editorOrEditorPairs ) { - normalized.editors[ name ] = editorOrEditorPairs[ name ]; + normalized.editors[ args[ 0 ] ] = args[ 1 ]; + } else { + // attach( editor ); + if ( isEditorInstance( args[ 0 ] ) ) { + normalized.editors[ getNextEditorName() ] = args[ 0 ]; + } + // attach( { foo: editor1, bar: editor2, ... } ); + else { + for ( const name in args[ 0 ] ) { + normalized.editors[ name ] = args[ 0 ][ name ]; + } } + + // attach( ..., { options } ); + normalized.options = args[ 1 ] || normalized.options; } return normalized; From 851b66c165d6737256dd8045df9f87dd56221631 Mon Sep 17 00:00:00 2001 From: Aleksander Nowodzinski Date: Fri, 20 Sep 2019 13:26:57 +0200 Subject: [PATCH 08/12] Tests: Added a post-execution clean-up in Logger tests. --- tests/inspector/logger.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/tests/inspector/logger.js b/tests/inspector/logger.js index 0598abb..de4bb48 100644 --- a/tests/inspector/logger.js +++ b/tests/inspector/logger.js @@ -8,9 +8,15 @@ import Logger from '../../src/logger'; describe( 'Logger', () => { + let spy; + + afterEach( () => { + spy.restore(); + } ); + describe( '#group()', () => { it( 'calls console.group', () => { - const spy = sinon.spy( console, 'group' ); + spy = sinon.spy( console, 'group' ); Logger.group( 'foo', 'bar' ); @@ -20,7 +26,7 @@ describe( 'Logger', () => { describe( '#groupEnd()', () => { it( 'calls console.groupEnd', () => { - const spy = sinon.spy( console, 'groupEnd' ); + spy = sinon.spy( console, 'groupEnd' ); Logger.groupEnd( 'foo', 'bar' ); @@ -30,7 +36,7 @@ describe( 'Logger', () => { describe( '#log()', () => { it( 'calls console.log', () => { - const spy = sinon.spy( console, 'log' ); + spy = sinon.spy( console, 'log' ); Logger.log( 'foo', 'bar' ); @@ -40,7 +46,7 @@ describe( 'Logger', () => { describe( '#warn()', () => { it( 'calls console.warn', () => { - const spy = sinon.spy( console, 'warn' ); + spy = sinon.spy( console, 'warn' ); Logger.warn( 'foo', 'bar' ); From b9beb277ba3c8c6bdfe655cb76cd849c42c2ae87 Mon Sep 17 00:00:00 2001 From: Aleksander Nowodzinski Date: Fri, 20 Sep 2019 13:33:20 +0200 Subject: [PATCH 09/12] Aligned to the latest CKEditor API. --- tests/utils/testeditor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/utils/testeditor.js b/tests/utils/testeditor.js index 1a69367..b994624 100644 --- a/tests/utils/testeditor.js +++ b/tests/utils/testeditor.js @@ -74,7 +74,7 @@ class ClassicTestEditorUI extends EditorUI { view.render(); view.main.add( view.editable ); - this._editableElements.set( 'main', view.editable.element ); + this.setEditableElement( 'main', view.editable.element ); this._elementReplacer.replace( element, view.element ); this.editor.commands.add( 'foo', new FooCommand( this.editor ) ); From 08e7077ef3120954f156710c340765ca8e6701fd Mon Sep 17 00:00:00 2001 From: Aleksander Nowodzinski Date: Fri, 20 Sep 2019 13:56:29 +0200 Subject: [PATCH 10/12] Bumped dependencies in package.json. Aligned tests to the latest editor API. --- package.json | 18 +- .../components/view/nodeinspector.js | 2 + tests/inspector/components/view/tree.js | 2 + yarn.lock | 883 ++++++++++-------- 4 files changed, 515 insertions(+), 390 deletions(-) diff --git a/package.json b/package.json index 4fad16a..0be3f36 100644 --- a/package.json +++ b/package.json @@ -41,13 +41,13 @@ "@babel/cli": "^7.2.3", "@babel/core": "^7.2.2", "@babel/preset-react": "^7.0.0", - "@ckeditor/ckeditor5-basic-styles": "^11.0.0", - "@ckeditor/ckeditor5-build-decoupled-document": "^12.0.0", - "@ckeditor/ckeditor5-core": "^12.0.0", - "@ckeditor/ckeditor5-dev-env": "^13.0.2", - "@ckeditor/ckeditor5-paragraph": "^11.0.0", - "@ckeditor/ckeditor5-ui": "^12.0.0", - "@ckeditor/ckeditor5-utils": "^12.0.0", + "@ckeditor/ckeditor5-basic-styles": "^11.1.4", + "@ckeditor/ckeditor5-build-decoupled-document": "^12.4.0", + "@ckeditor/ckeditor5-core": "^12.3.0", + "@ckeditor/ckeditor5-dev-env": "^16.0.0", + "@ckeditor/ckeditor5-paragraph": "^11.0.5", + "@ckeditor/ckeditor5-ui": "^14.0.0", + "@ckeditor/ckeditor5-utils": "^14.0.0", "babel-eslint": "^10.0.1", "babel-loader": "^8.0.5", "chai": "^4.1.2", @@ -56,8 +56,8 @@ "cssnano": "^4.1.10", "enzyme": "^3.9.0", "enzyme-adapter-react-16": "^1.10.0", - "eslint": "^5.14.1", - "eslint-config-ckeditor5": "^1.0.11", + "eslint": "^5.5.0", + "eslint-config-ckeditor5": "^2.0.0", "eslint-plugin-react": "^7.12.4", "husky": "^1.3.1", "istanbul-instrumenter-loader": "^3.0.1", diff --git a/tests/inspector/components/view/nodeinspector.js b/tests/inspector/components/view/nodeinspector.js index 904abdd..71ba18b 100644 --- a/tests/inspector/components/view/nodeinspector.js +++ b/tests/inspector/components/view/nodeinspector.js @@ -126,6 +126,8 @@ describe( '', () => { expect( lists[ 0 ].name ).to.equal( 'Attributes' ); expect( lists[ 0 ].items ).to.deep.equal( [ [ 'aria-label', '"Rich Text Editor, main"' ], + [ 'lang', '"en"' ], + [ 'dir', '"ltr"' ], [ 'role', '"textbox"' ], [ 'contenteditable', '"true"' ], [ 'class', '"ck-blurred ck ck-content ck-editor__editable ck-rounded-corners ck-editor__editable_inline"' ], diff --git a/tests/inspector/components/view/tree.js b/tests/inspector/components/view/tree.js index 6499d3d..eed484e 100644 --- a/tests/inspector/components/view/tree.js +++ b/tests/inspector/components/view/tree.js @@ -17,6 +17,8 @@ import BoldEditing from '@ckeditor/ckeditor5-basic-styles/src/bold/boldediting'; import { assertTreeItems } from '../../../../tests/utils/utils'; const ROOT_ATTRIBUTES = [ + [ 'lang', 'en' ], + [ 'dir', 'ltr' ], [ 'aria-label', 'Rich Text Editor, main' ], [ 'role', 'textbox' ], [ 'contenteditable', 'true' ], diff --git a/yarn.lock b/yarn.lock index 6707b5c..c4d0501 100644 --- a/yarn.lock +++ b/yarn.lock @@ -206,43 +206,43 @@ lodash "^4.17.11" to-fast-properties "^2.0.0" -"@ckeditor/ckeditor5-basic-styles@^11.0.0": - version "11.1.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-11.1.0.tgz#e9fa972331749d56d82b12a13bb8a19ddfe39a13" - integrity sha512-CosI0uATQqz5ZKvzVUxlG3Fwi1kmnvNyVIxl/DVR6xLo3wmXHMp3IN/uUcBIhoHzNJLiF+qK7m34cz7nkMQyag== - dependencies: - "@ckeditor/ckeditor5-core" "^12.1.0" - "@ckeditor/ckeditor5-ui" "^12.1.0" - -"@ckeditor/ckeditor5-build-decoupled-document@^12.0.0": - version "12.1.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-build-decoupled-document/-/ckeditor5-build-decoupled-document-12.1.0.tgz#d9c79347295bdc66d10f5ceac7d434d6fa797a6b" - integrity sha512-1bMlZBkZocJJFfeoe3reRPHL5T667gWGFeCjXui8d6yuDtIPImGXe8gx5KQQFbphMegNMtRmPumxxOffRk7oMw== - -"@ckeditor/ckeditor5-core@^12.0.0", "@ckeditor/ckeditor5-core@^12.1.0": - version "12.1.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-12.1.0.tgz#a6f89583b066efb384f66e2f6c660d0378b786ec" - integrity sha512-6WyJjMrdtVLanJaDjnsf08NToVH6z2onZQu+R442po/JdNM7gH5vEdeKpPSNhq0bJp89dbb7V1HZdul7mG6k9Q== - dependencies: - "@ckeditor/ckeditor5-engine" "^13.1.0" - "@ckeditor/ckeditor5-utils" "^12.1.0" +"@ckeditor/ckeditor5-basic-styles@^11.1.4": + version "11.1.4" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-11.1.4.tgz#8b855ccc45122dede8fd8c7c269152d66033dfd5" + integrity sha512-ww+I0LPlPrd0xAJz/GV1TFUT/za85G9nbQ8mgqz2CikCDyFnMd4ZyLiqg/v12PrMQ/bU7Gnei2P6xpUVpq3x8Q== + dependencies: + "@ckeditor/ckeditor5-core" "^12.3.0" + "@ckeditor/ckeditor5-ui" "^14.0.0" + +"@ckeditor/ckeditor5-build-decoupled-document@^12.4.0": + version "12.4.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-build-decoupled-document/-/ckeditor5-build-decoupled-document-12.4.0.tgz#b675f3b485fc27bcc5edc5e4df00a75a4f31c945" + integrity sha512-HH8Ga6amebDv0swVWcJSqM4Roq4gMps+j1r0jv12yL6L+pkY63Z6Suhav7pjarPgv9bTXvSLllBPQGcL5OxhBg== + +"@ckeditor/ckeditor5-core@^12.3.0": + version "12.3.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-12.3.0.tgz#8b230c86fce19ffd76b46f45fff5f8a50a7f3ef9" + integrity sha512-uUK+snI1G9b/kHOqULpEM+b3PCppQOOGkBg+eP/xggn3WPn33u2eh44RPpArsjx80dg5GWx+uj6E7OFdPylHLA== + dependencies: + "@ckeditor/ckeditor5-engine" "^14.0.0" + "@ckeditor/ckeditor5-utils" "^14.0.0" lodash-es "^4.17.10" -"@ckeditor/ckeditor5-dev-env@^13.0.2": - version "13.0.3" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-env/-/ckeditor5-dev-env-13.0.3.tgz#5dd55d1799db5ed484ad9779172345ffe35d2a36" - integrity sha512-rRTgZfeMiLrysG+PcV+taZKQ1aHtDjNvgJMHvxoCbKIUUKvXFxcD4mOSIQcTD7dKvjeDmAFe+bt7vDf9wv0vNA== +"@ckeditor/ckeditor5-dev-env@^16.0.0": + version "16.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-env/-/ckeditor5-dev-env-16.0.0.tgz#e842b19e8a3c8579351aba5599b9f3dedfed1774" + integrity sha512-mlf2Ab8Yp2mBEXiuSNsLoHozixrbi8i/3wwHwW5LttRLIzcaCIHOkK38L8l2EKf8LMUS4QEWDwRP/JIVErujAg== dependencies: - "@ckeditor/ckeditor5-dev-utils" "^11.0.2" - "@octokit/rest" "^15.12.0" + "@ckeditor/ckeditor5-dev-utils" "^12.0.5" + "@octokit/rest" "^16.28.2" chalk "^2.4.1" compare-func "^1.3.2" - concat-stream "^1.6.0" - conventional-changelog "^2.0.1" + concat-stream "^2.0.0" + conventional-changelog "^3.1.8" conventional-commits-filter "^2.0.0" conventional-commits-parser "^3.0.0" - del "^3.0.0" - fs-extra "^7.0.0" + del "^5.0.0" + fs-extra "^8.1.0" git-raw-commits "^2.0.0" glob "^7.1.3" inquirer "^6.2.0" @@ -250,60 +250,61 @@ moment "^2.22.2" parse-github-url "^1.0.0" request "^2.83.0" - semver "^5.4.1" + semver "^6.2.0" -"@ckeditor/ckeditor5-dev-utils@^11.0.2": - version "11.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-utils/-/ckeditor5-dev-utils-11.0.2.tgz#d883bef3be3a9f2bd866dd9a263f20521c35f018" - integrity sha512-lo/46QCpmA8yCTh3G+zlD9+92YuE9Kz/7wmZJVqKIu6EGdy2Wx8kBQvZN2ON00WO7F9E0SsNHPVpR3BwOtjN5A== +"@ckeditor/ckeditor5-dev-utils@^12.0.5": + version "12.0.5" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-utils/-/ckeditor5-dev-utils-12.0.5.tgz#a196208a1b9da9abcaa207fcc77ae0a112b36acf" + integrity sha512-D7gJuI1XLmYtwcR8bZnmXZdpEF6HGZdkvx97vbuhF9hANH/ype7rsnrbMxj+gZsj+MV6H5F6NG3Fs+TG6Y0B3Q== dependencies: - acorn "^5.1.2" + acorn "^6.2.1" + acorn-walk "^6.2.0" chalk "^2.4.1" cssnano "^4.0.0" - del "^3.0.0" + del "^5.0.0" escodegen "^1.9.0" - fs-extra "^7.0.0" + fs-extra "^8.1.0" javascript-stringify "^1.6.0" pofile "^1.0.9" - postcss "^6.0.23" + postcss "^7.0.17" postcss-import "^12.0.0" postcss-mixins "^6.2.0" - postcss-nesting "^6.0.0" + postcss-nesting "^7.0.0" shelljs "^0.8.1" - through2 "^2.0.3" + through2 "^3.0.1" -"@ckeditor/ckeditor5-engine@^13.1.0": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-13.1.0.tgz#3fee9664234ce39920ea8b18e501378eeb1eec28" - integrity sha512-RZ8wiS2Ymz9Yrdsd9qF9x4OhJW2PsJHaRiKPznOkELIAVIIk7b4RcAPIX9JEGbQu2Pbxn9GDYh4hQ+bHa7Qzfg== +"@ckeditor/ckeditor5-engine@^14.0.0": + version "14.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-14.0.0.tgz#45547ef8a9951bd568607e046751c9b60d99dd2d" + integrity sha512-Y9EWmWwJ6anckAdSDhAFkMryz494y2LsBlF9o/wY3ChwfpEODpaaADBh22yFqQp6PXrFvk4LmAOJeOyTeA13FA== dependencies: - "@ckeditor/ckeditor5-utils" "^12.1.0" + "@ckeditor/ckeditor5-utils" "^14.0.0" lodash-es "^4.17.10" -"@ckeditor/ckeditor5-paragraph@^11.0.0": - version "11.0.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-11.0.1.tgz#4c82efc60c52724fb622cf05d15fae7343126f78" - integrity sha512-ephcX81iVKvMnkF12mSIkNUDOOztzjqy0XJDyI+7KeokraUu+WhJH9qaawXCtrZvNaXsywsuHzvQQlQhohbdaA== +"@ckeditor/ckeditor5-paragraph@^11.0.5": + version "11.0.5" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-11.0.5.tgz#15dd09a5b207138ec1579313daf3be5daa08d502" + integrity sha512-/E4RhtVXNC7IPHkQyNdPyl362mivzLbYMHMKhhDXnPFjHwBZMYbiVpzH+K5Fpajkzl1SYb2PPO5uh7JF5BlhbA== dependencies: - "@ckeditor/ckeditor5-core" "^12.1.0" - "@ckeditor/ckeditor5-ui" "^12.1.0" - "@ckeditor/ckeditor5-utils" "^12.1.0" + "@ckeditor/ckeditor5-core" "^12.3.0" + "@ckeditor/ckeditor5-ui" "^14.0.0" + "@ckeditor/ckeditor5-utils" "^14.0.0" -"@ckeditor/ckeditor5-ui@^12.0.0", "@ckeditor/ckeditor5-ui@^12.1.0": - version "12.1.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-12.1.0.tgz#9e594e80009788cc7094d700149ff2dc134f53ba" - integrity sha512-RwixUS8mSUOXJfaiWBAVuVPqvqrAkX+snz2zJ+LDIdRDcqiAiK8oVeneNYoHYN3qOFqI31KK/EK38MupINMTbQ== +"@ckeditor/ckeditor5-ui@^14.0.0": + version "14.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-14.0.0.tgz#5444c1fd863486e87089b15fd86fc6f937f80ce9" + integrity sha512-zV4o4K5zUMcDr2q3Mmohisb2VTNFFsJ4BvhUt6jCNgM0kD6M4BwalmG7XdaXWMqOh15iqLC4f0p93/6DloyD+Q== dependencies: - "@ckeditor/ckeditor5-core" "^12.1.0" - "@ckeditor/ckeditor5-utils" "^12.1.0" + "@ckeditor/ckeditor5-core" "^12.3.0" + "@ckeditor/ckeditor5-utils" "^14.0.0" lodash-es "^4.17.10" -"@ckeditor/ckeditor5-utils@^12.0.0", "@ckeditor/ckeditor5-utils@^12.1.0": - version "12.1.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-12.1.0.tgz#9becd0849df8322c137ba32440dc11d770482809" - integrity sha512-RoayI8F7n6Ypyj41PVHESyDJdiVNcQq++8ebkAMyV/pwnc7eXQ88DKa1iHfnnHhQeFhIpM6bLGHWy+ANN4hoPA== +"@ckeditor/ckeditor5-utils@^14.0.0": + version "14.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-14.0.0.tgz#9eba9b30a00e2b1011ffc954dd206fcb8a193e20" + integrity sha512-JC9sDlRbvmhL+Gqpq4HPZkrnpMFgEwlkVNUd2RKD/heOvzdpMfpLnIFpdXi1ohx/LQHDC9GZce0t6NJM5PbGoA== dependencies: - ckeditor5 "^12.1.0" + ckeditor5 "^12.4.0" lodash-es "^4.17.10" "@mrmlnc/readdir-enhanced@^2.2.1": @@ -314,25 +315,78 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" +"@nodelib/fs.scandir@2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.2.tgz#1f981cd5b83e85cfdeb386fc693d4baab392fa54" + integrity sha512-wrIBsjA5pl13f0RN4Zx4FNWmU71lv03meGKnqRUoCyan17s4V3WL92f3w3AIuWbNnpcrQyFBU5qMavJoB8d27w== + dependencies: + "@nodelib/fs.stat" "2.0.2" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.2", "@nodelib/fs.stat@^2.0.1": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.2.tgz#2762aea8fe78ea256860182dcb52d61ee4b8fda6" + integrity sha512-z8+wGWV2dgUhLqrtRYa03yDx4HWMvXKi1z8g3m2JyxAx8F7xk74asqPk5LAETjqDSGLFML/6CDl0+yFunSYicw== + "@nodelib/fs.stat@^1.1.2": version "1.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== -"@octokit/rest@^15.12.0": - version "15.18.1" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-15.18.1.tgz#ec7fb0f8775ef64dc095fae6635411d3fbff9b62" - integrity sha512-g2tecjp2TEtYV8bKAFvfQtu+W29HM7ektmWmw8zrMy9/XCKDEYRErR2YvvhN9+IxkLC4O3lDqYP4b6WgsL6Utw== +"@nodelib/fs.walk@^1.2.1": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.3.tgz#a555dc256acaf00c62b0db29529028dd4d4cb141" + integrity sha512-l6t8xEhfK9Sa4YO5mIRdau7XSOADfmh3jCr0evNHdY+HNkW6xuQhgMH7D73VV6WpZOagrW0UludvMTiifiwTfA== + dependencies: + "@nodelib/fs.scandir" "2.1.2" + fastq "^1.6.0" + +"@octokit/endpoint@^5.1.0": + version "5.3.5" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-5.3.5.tgz#2822c3b01107806dbdce3863b6205e3eff4289ed" + integrity sha512-f8KqzIrnzPLiezDsZZPB+K8v8YSv6aKFl7eOu59O46lmlW4HagWl1U6NWl6LmT8d1w7NsKBI3paVtzcnRGO1gw== + dependencies: + is-plain-object "^3.0.0" + universal-user-agent "^4.0.0" + +"@octokit/request-error@^1.0.1", "@octokit/request-error@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.0.4.tgz#15e1dc22123ba4a9a4391914d80ec1e5303a23be" + integrity sha512-L4JaJDXn8SGT+5G0uX79rZLv0MNJmfGa4vb4vy1NnpjSnWDLJRy6m90udGwvMmavwsStgbv2QNkPzzTCMmL+ig== + dependencies: + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.1.0.tgz#5609dcc7b5323e529f29d535214383d9eaf0c05c" + integrity sha512-I15T9PwjFs4tbWyhtFU2Kq7WDPidYMvRB7spmxoQRZfxSmiqullG+Nz+KbSmpkfnlvHwTr1e31R5WReFRKMXjg== + dependencies: + "@octokit/endpoint" "^5.1.0" + "@octokit/request-error" "^1.0.1" + deprecation "^2.0.0" + is-plain-object "^3.0.0" + node-fetch "^2.3.0" + once "^1.4.0" + universal-user-agent "^4.0.0" + +"@octokit/rest@^16.28.2": + version "16.29.0" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.29.0.tgz#5bbbfc818a44bb9ab32bee72cc0acc32e4556058" + integrity sha512-t01+Hz6sUJx2/HzY4KSgmST5n7KcTYr8i6+UwqS6TkgyjyA6YmeTxVhZrQUobEXaDdQFxs1dRhh1hgmOo6OF9Q== dependencies: - before-after-hook "^1.1.0" + "@octokit/request" "^5.0.0" + "@octokit/request-error" "^1.0.2" + atob-lite "^2.0.0" + before-after-hook "^2.0.0" btoa-lite "^1.0.0" - debug "^3.1.0" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.0" - lodash "^4.17.4" - node-fetch "^2.1.1" - universal-user-agent "^2.0.0" - url-template "^2.0.8" + deprecation "^2.0.0" + lodash.get "^4.4.2" + lodash.set "^4.3.2" + lodash.uniq "^4.5.0" + octokit-pagination-methods "^1.1.0" + once "^1.4.0" + universal-user-agent "^4.0.0" "@samverschueren/stream-to-observable@^0.3.0": version "0.3.0" @@ -370,6 +424,25 @@ resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== +"@types/events@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== + +"@types/glob@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + "@types/node@*": version "12.0.4" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.4.tgz#46832183115c904410c275e34cf9403992999c32" @@ -572,27 +645,33 @@ acorn-jsx@^5.0.0: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== -acorn@^5.1.2: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== +acorn-walk@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== acorn@^6.0.5, acorn@^6.0.7: version "6.1.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== +acorn@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" + integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== + after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= -agent-base@4, agent-base@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== +aggregate-error@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.0.tgz#5b5a3c95e9095f311c9ab16c19fb4f3527cd3f79" + integrity sha512-yKD9kEoJIR+2IFqhMwayIBgheLYbB3PS2OBhWae1L/ODTd/JF/30cW0bc9TqzRL3k4U41Dieu3BF4I29p8xesA== dependencies: - es6-promisify "^5.0.0" + clean-stack "^2.0.0" + indent-string "^3.2.0" airbnb-prop-types@^2.13.2: version "2.13.2" @@ -772,6 +851,11 @@ array-union@^1.0.1: dependencies: array-uniq "^1.0.1" +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -880,6 +964,11 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +atob-lite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" + integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= + atob@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -1041,10 +1130,10 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -before-after-hook@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.4.0.tgz#2b6bf23dca4f32e628fd2747c10a37c74a4b484d" - integrity sha512-l5r9ir56nda3qu14nAXIlyq1MmUSs0meCIaFAh8HwkFwP1F8eToOuS3ah2VAHHcY04jaYD7FpJC5JTXHYRbkzg== +before-after-hook@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" + integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== better-assert@~1.0.0: version "1.0.2" @@ -1123,6 +1212,13 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -1201,24 +1297,6 @@ browserslist@^4.0.0: electron-to-chromium "^1.3.137" node-releases "^1.1.21" -browserstack-local@^1.3.7: - version "1.4.0" - resolved "https://registry.yarnpkg.com/browserstack-local/-/browserstack-local-1.4.0.tgz#d979cac056f57b9af159b3bcd7fdc09b4354537c" - integrity sha512-BUJWxIsJkJxqfTPJIvGWTsf+IYSqSFUeFNW9tnuyTG7va/0LkXLhIi/ErFGDle1urQkol48HlQUXj4QrliXFpg== - dependencies: - https-proxy-agent "^2.2.1" - is-running "^2.0.0" - ps-tree "=1.1.1" - sinon "^1.17.6" - temp-fs "^0.9.9" - -browserstack@~1.5.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.2.tgz#17d8bb76127a1cc0ea416424df80d218f803673f" - integrity sha512-+6AFt9HzhKykcPF79W6yjEUJcdvZOV0lIXdkORXMJftGrDl0OKWqRF4GHqpDNkxiceDT/uB7Fb/aDwktvXX7dg== - dependencies: - https-proxy-agent "^2.2.1" - btoa-lite@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" @@ -1507,10 +1585,10 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -ckeditor5@^12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-12.1.0.tgz#90727a05927bed1d1be7c96fae4ba91d1b8dfeaa" - integrity sha512-uxedeLRnQld36BcuUykdhW3aDT0EqvZV/hJH6or/JsyXaGS1t1AW/f0MxuVaZhLtLgVDpyz1ialrVn2icIdWXw== +ckeditor5@^12.4.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-12.4.0.tgz#60bfc4848d29f6c9d5915fa588017152fbd3db60" + integrity sha512-gd6PGm3pId5KibAZNvACc5NN657xP0IEyqziRI0tBFnLyXgDjw3e8Uu2zkIEUbxPR2vXG1J7PoqS9ZxJuE9XTQ== class-utils@^0.3.5: version "0.3.6" @@ -1527,6 +1605,11 @@ classnames@^2.2.5: resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + cli-cursor@^2.0.0, cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -1700,7 +1783,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.4.7, concat-stream@^1.5.0, concat-stream@^1.6.0: +concat-stream@^1.4.7, concat-stream@^1.5.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -1710,6 +1793,16 @@ concat-stream@^1.4.7, concat-stream@^1.5.0, concat-stream@^1.6.0: readable-stream "^2.2.2" typedarray "^0.0.6" +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + connect@^3.6.0: version "3.7.0" resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" @@ -1742,40 +1835,48 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -conventional-changelog-angular@^1.6.6: - version "1.6.6" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz#b27f2b315c16d0a1f23eb181309d0e6a4698ea0f" - integrity sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg== +conventional-changelog-angular@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.3.tgz#299fdd43df5a1f095283ac16aeedfb0a682ecab0" + integrity sha512-YD1xzH7r9yXQte/HF9JBuEDfvjxxwDGGwZU1+ndanbY0oFgA+Po1T9JDSpPLdP0pZT6MhCAsdvFKC4TJ4MTJTA== dependencies: compare-func "^1.3.1" q "^1.5.1" -conventional-changelog-atom@^2.0.0: +conventional-changelog-atom@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-2.0.1.tgz#dc88ce650ffa9ceace805cbe70f88bfd0cb2c13a" integrity sha512-9BniJa4gLwL20Sm7HWSNXd0gd9c5qo49gCi8nylLFpqAHhkFTj7NQfROq3f1VpffRtzfTQp4VKU5nxbe2v+eZQ== dependencies: q "^1.5.1" -conventional-changelog-codemirror@^2.0.0: +conventional-changelog-codemirror@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.1.tgz#acc046bc0971460939a0cc2d390e5eafc5eb30da" integrity sha512-23kT5IZWa+oNoUaDUzVXMYn60MCdOygTA2I+UjnOMiYVhZgmVwNd6ri/yDlmQGXHqbKhNR5NoXdBzSOSGxsgIQ== dependencies: q "^1.5.1" -conventional-changelog-core@^3.1.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.2.tgz#de41e6b4a71011a18bcee58e744f6f8f0e7c29c0" - integrity sha512-cssjAKajxaOX5LNAJLB+UOcoWjAIBvXtDMedv/58G+YEmAXMNfC16mmPl0JDOuVJVfIqM0nqQiZ8UCm8IXbE0g== +conventional-changelog-conventionalcommits@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.1.0.tgz#eb7d47a9c5f1a6f9846a649482294e4ac50d7683" + integrity sha512-J3xolGrH8PTxpCqueHOuZtv3Cp73SQOWiBQzlsaugZAZ+hZgcJBonmC+1bQbfGs2neC2S18p2L1Gx+nTEglJTQ== + dependencies: + compare-func "^1.3.1" + q "^1.5.1" + +conventional-changelog-core@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.0.0.tgz#a9e83889e43a21b05fa098a507cad475905a0439" + integrity sha512-+bZMeBUdjKxfyX2w6EST9U7zb85wxrGS3IV4H7SqPya44osNQbm3P+vyqfLs6s57FkoEamC93ioDEiguVLWmSQ== dependencies: - conventional-changelog-writer "^4.0.5" - conventional-commits-parser "^3.0.2" + conventional-changelog-writer "^4.0.7" + conventional-commits-parser "^3.0.3" dateformat "^3.0.0" get-pkg-repo "^1.0.0" git-raw-commits "2.0.0" git-remote-origin-url "^2.0.0" - git-semver-tags "^2.0.2" + git-semver-tags "^3.0.0" lodash "^4.2.1" normalize-package-data "^2.3.5" q "^1.5.1" @@ -1783,42 +1884,35 @@ conventional-changelog-core@^3.1.0: read-pkg-up "^3.0.0" through2 "^3.0.0" -conventional-changelog-ember@^2.0.1: +conventional-changelog-ember@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-2.0.2.tgz#284ffdea8c83ea8c210b65c5b4eb3e5cc0f4f51a" integrity sha512-qtZbA3XefO/n6DDmkYywDYi6wDKNNc98MMl2F9PKSaheJ25Trpi3336W8fDlBhq0X+EJRuseceAdKLEMmuX2tg== dependencies: q "^1.5.1" -conventional-changelog-eslint@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.1.tgz#f65e0e7f63dc09c044244b8785313a602e628002" - integrity sha512-yH3+bYrtvgKxSFChUBQnKNh9/U9kN2JElYBm253VpYs5wXhPHVc9ENcuVGWijh24nnOkei7wEJmnmUzgZ4ok+A== +conventional-changelog-eslint@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.2.tgz#e9eb088cda6be3e58b2de6a5aac63df0277f3cbe" + integrity sha512-Yi7tOnxjZLXlCYBHArbIAm8vZ68QUSygFS7PgumPRiEk+9NPUeucy5Wg9AAyKoBprSV3o6P7Oghh4IZSLtKCvQ== dependencies: q "^1.5.1" -conventional-changelog-express@^2.0.0: +conventional-changelog-express@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-2.0.1.tgz#fea2231d99a5381b4e6badb0c1c40a41fcacb755" integrity sha512-G6uCuCaQhLxdb4eEfAIHpcfcJ2+ao3hJkbLrw/jSK/eROeNfnxCJasaWdDAfFkxsbpzvQT4W01iSynU3OoPLIw== dependencies: q "^1.5.1" -conventional-changelog-jquery@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz#0208397162e3846986e71273b6c79c5b5f80f510" - integrity sha1-Agg5cWLjhGmG5xJztsecW1+A9RA= - dependencies: - q "^1.4.1" - -conventional-changelog-jscs@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz#0479eb443cc7d72c58bf0bcf0ef1d444a92f0e5c" - integrity sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw= +conventional-changelog-jquery@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.4.tgz#7eb598467b83db96742178e1e8d68598bffcd7ae" + integrity sha512-IVJGI3MseYoY6eybknnTf9WzeQIKZv7aNTm2KQsiFVJH21bfP2q7XVjfoMibdCg95GmgeFlaygMdeoDDa+ZbEQ== dependencies: - q "^1.4.1" + q "^1.5.1" -conventional-changelog-jshint@^2.0.0: +conventional-changelog-jshint@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.1.tgz#11c0e8283abf156a4ff78e89be6fdedf9bd72202" integrity sha512-kRFJsCOZzPFm2tzRHULWP4tauGMvccOlXYf3zGeuSW4U0mZhk5NsjnRZ7xFWrTFPlCLV+PNmHMuXp5atdoZmEg== @@ -1826,20 +1920,20 @@ conventional-changelog-jshint@^2.0.0: compare-func "^1.3.1" q "^1.5.1" -conventional-changelog-preset-loader@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.0.2.tgz#81d1a07523913f3d17da3a49f0091f967ad345b0" - integrity sha512-pBY+qnUoJPXAXXqVGwQaVmcye05xi6z231QM98wHWamGAmu/ghkBprQAwmF5bdmyobdVxiLhPY3PrCfSeUNzRQ== +conventional-changelog-preset-loader@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.2.0.tgz#571e2b3d7b53d65587bea9eedf6e37faa5db4fcc" + integrity sha512-zXB+5vF7D5Y3Cb/rJfSyCCvFphCVmF8mFqOdncX3BmjZwAtGAPfYrBcT225udilCKvBbHgyzgxqz2GWDB5xShQ== -conventional-changelog-writer@^4.0.5: - version "4.0.6" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.6.tgz#24db578ac8e7c89a409ef9bba12cf3c095990148" - integrity sha512-ou/sbrplJMM6KQpR5rKFYNVQYesFjN7WpNGdudQSWNi6X+RgyFUcSv871YBYkrUYV9EX8ijMohYVzn9RUb+4ag== +conventional-changelog-writer@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.7.tgz#e4b7d9cbea902394ad671f67108a71fa90c7095f" + integrity sha512-p/wzs9eYaxhFbrmX/mCJNwJuvvHR+j4Fd0SQa2xyAhYed6KBiZ780LvoqUUvsayP4R1DtC27czalGUhKV2oabw== dependencies: compare-func "^1.3.1" conventional-commits-filter "^2.0.2" dateformat "^3.0.0" - handlebars "^4.1.0" + handlebars "^4.1.2" json-stringify-safe "^5.0.1" lodash "^4.2.1" meow "^4.0.0" @@ -1847,22 +1941,22 @@ conventional-changelog-writer@^4.0.5: split "^1.0.0" through2 "^3.0.0" -conventional-changelog@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-2.0.3.tgz#779cff582c0091d2b24574003eaa82ef5ddf653d" - integrity sha512-4bcII9cJHSKb2qi9e8qGF6aJHLf/AB0dokhyR+X6QILTMl77s4l163vK+reXhajvfOYbbHQvsrWybr5+PKZwNA== - dependencies: - conventional-changelog-angular "^1.6.6" - conventional-changelog-atom "^2.0.0" - conventional-changelog-codemirror "^2.0.0" - conventional-changelog-core "^3.1.0" - conventional-changelog-ember "^2.0.1" - conventional-changelog-eslint "^3.0.0" - conventional-changelog-express "^2.0.0" - conventional-changelog-jquery "^0.1.0" - conventional-changelog-jscs "^0.1.0" - conventional-changelog-jshint "^2.0.0" - conventional-changelog-preset-loader "^2.0.1" +conventional-changelog@^3.1.8: + version "3.1.10" + resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-3.1.10.tgz#889a8daa4b7673a1dc1605746f9ae66546b373c1" + integrity sha512-6RDj31hL39HUkpqvPjRlOxAwJRwur8O2qu9m6R0FBNDGwCJyy4SYH9NfyshozxYSeklrauKRf3oSbyoEZVzu9Q== + dependencies: + conventional-changelog-angular "^5.0.3" + conventional-changelog-atom "^2.0.1" + conventional-changelog-codemirror "^2.0.1" + conventional-changelog-conventionalcommits "^4.1.0" + conventional-changelog-core "^4.0.0" + conventional-changelog-ember "^2.0.2" + conventional-changelog-eslint "^3.0.2" + conventional-changelog-express "^2.0.1" + conventional-changelog-jquery "^3.0.4" + conventional-changelog-jshint "^2.0.1" + conventional-changelog-preset-loader "^2.2.0" conventional-commits-filter@^2.0.0: version "2.0.1" @@ -1893,7 +1987,7 @@ conventional-commits-parser@^3.0.0: through2 "^2.0.0" trim-off-newlines "^1.0.0" -conventional-commits-parser@^3.0.2: +conventional-commits-parser@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.3.tgz#c3f972fd4e056aa8b9b4f5f3d0e540da18bf396d" integrity sha512-KaA/2EeUkO4bKjinNfGUyqPTX/6w9JGshuQRik4r/wJz7rUw3+D3fDG6sZSEqJvKILzKXFQuFkpPLclcsAuZcg== @@ -2382,6 +2476,20 @@ del@^3.0.0: pify "^3.0.0" rimraf "^2.2.8" +del@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7" + integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== + dependencies: + globby "^10.0.1" + graceful-fs "^4.2.2" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.1" + p-map "^3.0.0" + rimraf "^3.0.0" + slash "^3.0.0" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -2397,6 +2505,11 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +deprecation@^2.0.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + des.js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" @@ -2449,6 +2562,13 @@ dir-glob@2.0.0: arrify "^1.0.1" path-type "^3.0.0" +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + discontinuous-range@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" @@ -2533,11 +2653,6 @@ dot-prop@^4.1.1: dependencies: is-obj "^1.0.0" -duplexer@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= - duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" @@ -2771,18 +2886,6 @@ es6-iterator@~2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-promise@^4.0.3: - version "4.2.6" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f" - integrity sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - es6-symbol@^3.1.1, es6-symbol@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" @@ -2825,10 +2928,10 @@ escodegen@^1.9.0: optionalDependencies: source-map "~0.6.1" -eslint-config-ckeditor5@^1.0.11: - version "1.0.14" - resolved "https://registry.yarnpkg.com/eslint-config-ckeditor5/-/eslint-config-ckeditor5-1.0.14.tgz#fe486a85ea1e46546e34002c81f651ab48856365" - integrity sha512-0eo7n/og5+JlM5FqpuU5mwpSjaXZ+9DvcwZdk5Hnd9w5t97rSreg8kc/Uc6LiZQUYvb6TxCTMxOTr3eh95tgBg== +eslint-config-ckeditor5@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-ckeditor5/-/eslint-config-ckeditor5-2.0.0.tgz#d02dc459996642cbf8ae0dd1bca0d8730fc3b6b8" + integrity sha512-fdCeR8s0s4+N8/r8xTlooA6vL7Qu+t5cW8lcycUkiGfo8+dtgUaSRUR1WIpC57j20KfeOOOMDEhiITCzgqWt5Q== dependencies: eslint-plugin-ckeditor5-rules "^0.0.3" @@ -2876,7 +2979,7 @@ eslint-visitor-keys@^1.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== -eslint@^5.14.1: +eslint@^5.5.0: version "5.16.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== @@ -2971,19 +3074,6 @@ esutils@^2.0.0, esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= -event-stream@=3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" - integrity sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE= - dependencies: - duplexer "~0.1.1" - from "~0" - map-stream "~0.1.0" - pause-stream "0.0.11" - split "0.3" - stream-combiner "~0.0.4" - through "~2.3.1" - eventemitter3@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" @@ -3110,6 +3200,18 @@ fast-glob@^2.0.2: merge2 "^1.2.3" micromatch "^3.1.10" +fast-glob@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.0.4.tgz#d484a41005cb6faeb399b951fd1bd70ddaebb602" + integrity sha512-wkIbV6qg37xTJwqSsdnIphL1e+LaGz4AIQqr00mIubMaEhv1/HEmJ0uuCGZRNRUkZZmOB5mJKO0ZUTVq+SxMQg== + dependencies: + "@nodelib/fs.stat" "^2.0.1" + "@nodelib/fs.walk" "^1.2.1" + glob-parent "^5.0.0" + is-glob "^4.0.1" + merge2 "^1.2.3" + micromatch "^4.0.2" + fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" @@ -3120,6 +3222,13 @@ fast-levenshtein@~2.0.4: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fastq@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.6.0.tgz#4ec8a38f4ac25f21492673adb7eae9cfef47d1c2" + integrity sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA== + dependencies: + reusify "^1.0.0" + figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -3157,6 +3266,13 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + finalhandler@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -3269,13 +3385,6 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -formatio@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.1.1.tgz#5ed3ccd636551097383465d996199100e86161e9" - integrity sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek= - dependencies: - samsam "~1.1" - fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -3291,11 +3400,6 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -from@~0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" - integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= - fs-access@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" @@ -3303,7 +3407,7 @@ fs-access@^1.0.0: dependencies: null-check "^1.0.0" -fs-extra@^7.0.0, fs-extra@^7.0.1: +fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -3312,6 +3416,15 @@ fs-extra@^7.0.0, fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.6" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" @@ -3471,13 +3584,13 @@ git-remote-origin-url@^2.0.0: gitconfiglocal "^1.0.0" pify "^2.3.0" -git-semver-tags@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.2.tgz#f506ec07caade191ac0c8d5a21bdb8131b4934e3" - integrity sha512-34lMF7Yo1xEmsK2EkbArdoU79umpvm0MfzaDkSNYSJqtM5QLAVTPWgpiXSVI5o/O9EvZPSrP4Zvnec/CqhSd5w== +git-semver-tags@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-3.0.0.tgz#fe10147824657662c82efd9341f0fa59f74ddcba" + integrity sha512-T4C/gJ9k2Bnxz+PubtcyiMtUUKrC+Nh9Q4zaECcnmVMwJgPhrNyP/Rf+YpdRqsJbCV/+kYrCH24Xg+IeAmbOPg== dependencies: meow "^4.0.0" - semver "^5.5.0" + semver "^6.0.0" gitconfiglocal@^1.0.0: version "1.0.0" @@ -3494,6 +3607,13 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob-parent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" + integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== + dependencies: + is-glob "^4.0.1" + glob-stream@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" @@ -3538,7 +3658,7 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== @@ -3580,6 +3700,20 @@ globals@^9.18.0: resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== +globby@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" + integrity sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -3609,12 +3743,17 @@ graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== +graceful-fs@^4.2.0, graceful-fs@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" + integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== + growl@1.10.5, "growl@~> 1.10.0": version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== -handlebars@^4.0.1, handlebars@^4.1.0: +handlebars@^4.0.1: version "4.1.2" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== @@ -3625,6 +3764,17 @@ handlebars@^4.0.1, handlebars@^4.1.0: optionalDependencies: uglify-js "^3.1.4" +handlebars@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.2.0.tgz#57ce8d2175b9bbb3d8b3cf3e4217b1aec8ddcb2e" + integrity sha512-Kb4xn5Qh1cxAKvQnzNWZ512DhABzyFNmsaJf3OAkWNa4NkaqWcNI8Tao8Tasi0/F4JD9oyG0YxuFyvyR57d+Gw== + dependencies: + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -3814,14 +3964,6 @@ http-errors@1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== - dependencies: - agent-base "4" - debug "3.1.0" - http-proxy@^1.13.0: version "1.17.0" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" @@ -3845,14 +3987,6 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -https-proxy-agent@^2.2.0, https-proxy-agent@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" - integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== - dependencies: - agent-base "^4.1.0" - debug "^3.1.0" - husky@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0" @@ -3915,6 +4049,11 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.1.1: + version "5.1.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" + integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== + import-cwd@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" @@ -3965,7 +4104,7 @@ indent-string@^2.1.0: dependencies: repeating "^2.0.0" -indent-string@^3.0.0: +indent-string@^3.0.0, indent-string@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= @@ -4066,11 +4205,6 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" -is-arguments@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" - integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -4200,11 +4334,6 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= -is-generator-function@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" - integrity sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw== - is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -4212,7 +4341,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0: +is-glob@^4.0.0, is-glob@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -4236,6 +4365,11 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -4253,6 +4387,11 @@ is-path-cwd@^1.0.0: resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + is-path-in-cwd@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" @@ -4267,6 +4406,11 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" +is-path-inside@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.1.tgz#7417049ed551d053ab82bba3fdd6baa6b3a81e89" + integrity sha512-CKstxrctq1kUesU6WhtZDbYKzzYBuRH0UYInAVrkc/EYdB9ltbfE0gOoayG9nhohG6447sOOVGhHqsdmBvkbNg== + is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -4279,6 +4423,13 @@ is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-plain-object@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" + integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg== + dependencies: + isobject "^4.0.0" + is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" @@ -4308,11 +4459,6 @@ is-resolvable@^1.0.0: resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== -is-running@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-running/-/is-running-2.1.0.tgz#30a73ff5cc3854e4fc25490809e9f5abf8de09e0" - integrity sha1-MKc/9cw4VOT8JUkICen1q/jeCeA= - is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -4427,6 +4573,11 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +isobject@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" + integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -4596,15 +4747,6 @@ just-extend@^4.0.2: resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.0.2.tgz#f3f47f7dfca0f989c55410a7ebc8854b07108afc" integrity sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw== -karma-browserstack-launcher@^1.3.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/karma-browserstack-launcher/-/karma-browserstack-launcher-1.5.1.tgz#4caf4cd476a76d3c88205818d8994fc170a68fb4" - integrity sha512-zt9Ukow5A9WZHZXCFVO/h5kRsAdaZYeMNJK9Uan8v42amQXt3B/DZVxl24NCcAIxufKjW13UWd9iJ9knG9OCYw== - dependencies: - browserstack "~1.5.1" - browserstack-local "^1.3.7" - q "~1.5.0" - karma-chai@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/karma-chai/-/karma-chai-0.1.0.tgz#bee5ad40400517811ae34bb945f762909108b79a" @@ -4930,6 +5072,11 @@ lodash.flattendeep@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + lodash.isequal@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" @@ -4945,6 +5092,11 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.set@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" + integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= + lodash.template@^4.0.2: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" @@ -5017,11 +5169,6 @@ loglevelnext@^1.0.1: es6-symbol "^3.1.1" object.assign "^4.1.0" -lolex@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.3.2.tgz#7c3da62ffcb30f0f5a80a2566ca24e45d8a01f31" - integrity sha1-fD2mL/yzDw9agKJWbKJORdigHzE= - lolex@^2.3.2: version "2.7.5" resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.7.5.tgz#113001d56bfc7e02d56e36291cc5c413d1aa0733" @@ -5102,11 +5249,6 @@ map-obj@^2.0.0: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= -map-stream@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" - integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ= - map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -5212,6 +5354,14 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: snapdragon "^0.8.1" to-regex "^3.0.2" +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -5470,7 +5620,7 @@ nise@^1.4.10: lolex "^2.3.2" path-to-regexp "^1.7.0" -node-fetch@^2.1.1: +node-fetch@^2.3.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== @@ -5740,6 +5890,11 @@ object.values@^1.0.4, object.values@^1.1.0: function-bind "^1.1.1" has "^1.0.3" +octokit-pagination-methods@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" + integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -5807,7 +5962,7 @@ os-locale@^3.0.0: lcid "^2.0.0" mem "^4.0.0" -os-name@^3.0.0: +os-name@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== @@ -5890,6 +6045,13 @@ p-map@^2.0.0: resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -6059,18 +6221,16 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + pathval@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= -pause-stream@0.0.11: - version "0.0.11" - resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" - integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU= - dependencies: - through "~2.3" - pbkdf2@^3.0.3: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" @@ -6087,6 +6247,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picomatch@^2.0.5: + version "2.0.7" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" + integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== + pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -6336,13 +6501,6 @@ postcss-modules-values@^2.0.0: icss-replace-symbols "^1.1.0" postcss "^7.0.6" -postcss-nesting@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-6.0.0.tgz#4c45276a065765ec063efe1e4daf75c131518991" - integrity sha512-Yoglsy6eZbDCbRIXoYSmnIt9ao4xyg07iFwVBd7WyIkDzMSeRxIqUk8xEAdkeJQ7eGfWo6RufrTU7FSUjZ22fg== - dependencies: - postcss "^6.0.22" - postcss-nesting@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.0.tgz#6e26a770a0c8fcba33782a6b6f350845e1a448f6" @@ -6518,15 +6676,6 @@ postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3, postcss-value-parser@^ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss@^6.0.22, postcss@^6.0.23: - version "6.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.5, postcss@^7.0.6: version "7.0.16" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.16.tgz#48f64f1b4b558cb8b52c88987724359acb010da2" @@ -6536,6 +6685,15 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.5, source-map "^0.6.1" supports-color "^6.1.0" +postcss@^7.0.17: + version "7.0.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.18.tgz#4b9cda95ae6c069c67a4d933029eddd4838ac233" + integrity sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -6589,13 +6747,6 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -ps-tree@=1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.1.tgz#5f1ba35455b8c25eeb718d04c37de1555d96d3db" - integrity sha512-kef7fYYSKVqQffmzTMsVcUD1ObNJMp8sNSmHGlGKsZQyL/ht9MZKk86u0Rd1NhpTOAuhqwKCLLpktwkqz+MF8A== - dependencies: - event-stream "=3.3.4" - pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -6658,7 +6809,7 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -q@^1.1.2, q@^1.4.1, q@^1.5.1, q@~1.5.0: +q@^1.1.2, q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= @@ -6873,7 +7024,7 @@ read-pkg@^4.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3", readable-stream@^3.1.1: +"readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.1.1: version "3.4.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== @@ -7094,6 +7245,11 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +reusify@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + rfdc@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2" @@ -7116,12 +7272,12 @@ rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf dependencies: glob "^7.1.3" -rimraf@~2.5.2: - version "2.5.4" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" - integrity sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ= +rimraf@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" + integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== dependencies: - glob "^7.0.5" + glob "^7.1.3" ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" @@ -7151,6 +7307,11 @@ run-node@^1.0.0: resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== +run-parallel@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" + integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== + run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" @@ -7182,16 +7343,6 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -samsam@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.2.tgz#bec11fdc83a9fda063401210e40176c3024d1567" - integrity sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc= - -samsam@~1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.3.tgz#9f5087419b4d091f232571e7fa52e90b0f552621" - integrity sha1-n1CHQZtNCR8jJXHn+lLpCw9VJiE= - sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -7236,6 +7387,11 @@ semver@^6.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.1.tgz#53f53da9b30b2103cd4f15eab3a18ecbcb210c9b" integrity sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ== +semver@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + serialize-javascript@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" @@ -7324,16 +7480,6 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -sinon@^1.17.6: - version "1.17.7" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-1.17.7.tgz#4542a4f49ba0c45c05eb2e9dd9d203e2b8efe0bf" - integrity sha1-RUKk9JugxFwF6y6d2dID4rjv4L8= - dependencies: - formatio "1.1.1" - lolex "1.3.2" - samsam "1.1.2" - util ">=0.10.3 <1" - sinon@^7.2.3: version "7.3.2" resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.3.2.tgz#82dba3a6d85f6d2181e1eca2c10d8657c2161f28" @@ -7357,6 +7503,11 @@ slash@^2.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" @@ -7533,13 +7684,6 @@ split2@^2.0.0: dependencies: through2 "^2.0.2" -split@0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" - integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8= - dependencies: - through "2" - split@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" @@ -7605,13 +7749,6 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" -stream-combiner@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" - integrity sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ= - dependencies: - duplexer "~0.1.1" - stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" @@ -7808,7 +7945,7 @@ supports-color@^3.1.0: dependencies: has-flag "^1.0.0" -supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -7880,13 +8017,6 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.2" -temp-fs@^0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/temp-fs/-/temp-fs-0.9.9.tgz#8071730437870720e9431532fe2814364f8803d7" - integrity sha1-gHFzBDeHByDpQxUy/igUNk+IA9c= - dependencies: - rimraf "~2.5.2" - terser-webpack-plugin@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz#69aa22426299f4b5b3775cbed8cb2c5d419aa1d4" @@ -7943,14 +8073,14 @@ through2@^2.0.0, through2@^2.0.2, through2@^2.0.3, through2@~2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through2@^3.0.0: +through2@^3.0.0, through2@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww== dependencies: readable-stream "2 || 3" -through@2, "through@>=2.2.7 <3", through@^2.3.6, through@~2.3, through@~2.3.1: +through@2, "through@>=2.2.7 <3", through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -8017,6 +8147,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -8179,12 +8316,12 @@ unique-stream@^2.0.2: json-stable-stringify-without-jsonify "^1.0.1" through2-filter "^3.0.0" -universal-user-agent@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-2.1.0.tgz#5abfbcc036a1ba490cb941f8fd68c46d3669e8e4" - integrity sha512-8itiX7G05Tu3mGDTdNY2fB4KJ8MgZLS54RdG6PkkfwMAavrXu1mV/lls/GABx9O3Rw4PnTtasxrvbMQoBYY92Q== +universal-user-agent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.0.tgz#27da2ec87e32769619f68a14996465ea1cb9df16" + integrity sha512-eM8knLpev67iBDizr/YtqkJsF3GK8gzDc6st/WKzrTuPtcsOKW/0IdL4cnMBsU69pOx0otavLWBDGTwg+dB0aA== dependencies: - os-name "^3.0.0" + os-name "^3.1.0" universalify@^0.1.0: version "0.1.2" @@ -8231,11 +8368,6 @@ url-join@^2.0.2: resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" integrity sha1-WvIvGMBSoACkjXuCxenC4v7tpyg= -url-template@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21" - integrity sha1-/FZaPMy/93MMd19WQflVV5FDnyE= - url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -8277,17 +8409,6 @@ util@0.10.3: dependencies: inherits "2.0.1" -"util@>=0.10.3 <1": - version "0.12.0" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.0.tgz#bb5e3d29ba2703c7add0ad337003be3ca477798a" - integrity sha512-pPSOFl7VLhZ7LO/SFABPraZEEurkJUWSMn3MuA/r3WQZc+Z1fqou2JqLSOZbCLl73EUIxuUVX8X4jkX2vfJeAA== - dependencies: - inherits "2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - object.entries "^1.1.0" - safe-buffer "^5.1.2" - util@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" From eb9fa75c67fa498dc134b44411e8adbd99628a9c Mon Sep 17 00:00:00 2001 From: Aleksander Nowodzinski Date: Fri, 20 Sep 2019 13:58:59 +0200 Subject: [PATCH 11/12] Resolved conflicts in package.json. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0be3f36..8fbb3e1 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "cssnano": "^4.1.10", "enzyme": "^3.9.0", "enzyme-adapter-react-16": "^1.10.0", - "eslint": "^5.5.0", + "eslint": "^5.14.1", "eslint-config-ckeditor5": "^2.0.0", "eslint-plugin-react": "^7.12.4", "husky": "^1.3.1", From ae6e77349c3f30b2db5abfe6372ef931b9e68771 Mon Sep 17 00:00:00 2001 From: Aleksander Nowodzinski Date: Fri, 20 Sep 2019 14:22:22 +0200 Subject: [PATCH 12/12] Tests: Stabilized a ViewNodeInspector test. --- .../inspector/components/view/nodeinspector.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/tests/inspector/components/view/nodeinspector.js b/tests/inspector/components/view/nodeinspector.js index 71ba18b..6e4ac59 100644 --- a/tests/inspector/components/view/nodeinspector.js +++ b/tests/inspector/components/view/nodeinspector.js @@ -124,14 +124,15 @@ describe( '', () => { const lists = inspector.props().lists; expect( lists[ 0 ].name ).to.equal( 'Attributes' ); - expect( lists[ 0 ].items ).to.deep.equal( [ - [ 'aria-label', '"Rich Text Editor, main"' ], - [ 'lang', '"en"' ], - [ 'dir', '"ltr"' ], - [ 'role', '"textbox"' ], - [ 'contenteditable', '"true"' ], - [ 'class', '"ck-blurred ck ck-content ck-editor__editable ck-rounded-corners ck-editor__editable_inline"' ], - ] ); + expect( lists[ 0 ].items.sort( ( itemA, itemB ) => itemA[ 0 ] > itemB[ 0 ] ? 1 : -1 ) ) + .to.deep.equal( [ + [ 'aria-label', '"Rich Text Editor, main"' ], + [ 'class', '"ck-blurred ck ck-content ck-editor__editable ck-rounded-corners ck-editor__editable_inline"' ], + [ 'contenteditable', '"true"' ], + [ 'dir', '"ltr"' ], + [ 'lang', '"en"' ], + [ 'role', '"textbox"' ] + ] ); expect( lists[ 1 ].name ).to.equal( 'Properties' ); expect( lists[ 1 ].items ).to.deep.equal( [