From 59107897d17db6a1e26c48c0660b0781b37aefd8 Mon Sep 17 00:00:00 2001 From: Filip Sobol Date: Wed, 5 Feb 2025 13:25:28 +0100 Subject: [PATCH 1/2] Other: Update TypeScript `target` to `es2022`. --- tsconfig.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index acb6117ee6f..9c2b419217d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,8 +15,7 @@ */ "types": [], "lib": [ - "ES2019", // Must match the "target" - "ES2020.String", + "ES2022", // Must match the "target" "DOM", "DOM.Iterable" ], @@ -24,7 +23,7 @@ "noImplicitOverride": true, "strict": true, "module": "es6", - "target": "es2019", + "target": "es2022", "sourceMap": true, "allowJs": true, "moduleResolution": "node", From 7d4e38d7eae8696767d6b8f5781b592b6d1c3724 Mon Sep 17 00:00:00 2001 From: Filip Sobol Date: Wed, 5 Feb 2025 13:27:15 +0100 Subject: [PATCH 2/2] Update some docs and code to use new JS features to test the new `target` --- docs/_snippets/examples/bottom-toolbar-editor.js | 6 +++--- docs/_snippets/examples/document-editor.js | 6 +++--- packages/ckeditor5-ckbox/src/utils.ts | 6 ++---- packages/ckeditor5-clipboard/src/clipboardmarkersutils.ts | 2 +- packages/ckeditor5-clipboard/src/dragdrop.ts | 2 +- .../src/uploadgateway/fileuploader.ts | 3 +-- packages/ckeditor5-code-block/src/codeblockcommand.ts | 2 +- packages/ckeditor5-engine/src/view/stylesmap.ts | 4 ++-- packages/ckeditor5-ui/src/button/filedialogbuttonview.ts | 2 +- packages/ckeditor5-ui/src/colorgrid/colorgridview.ts | 4 ++-- .../src/colorselector/colorgridsfragmentview.ts | 2 +- packages/ckeditor5-ui/src/search/text/searchtextview.ts | 4 ++-- 12 files changed, 20 insertions(+), 23 deletions(-) diff --git a/docs/_snippets/examples/bottom-toolbar-editor.js b/docs/_snippets/examples/bottom-toolbar-editor.js index a056cf1f848..b8ac0a08cdb 100644 --- a/docs/_snippets/examples/bottom-toolbar-editor.js +++ b/docs/_snippets/examples/bottom-toolbar-editor.js @@ -207,9 +207,9 @@ DecoupledEditor .then( editor => { window.editor = editor; - const toolbarContainer = document.querySelector( '#editor-toolbar-container' ); - - toolbarContainer.appendChild( editor.ui.view.toolbar.element ); + document + .querySelector( '#editor-toolbar-container' ) + ?.appendChild( editor.ui.view.toolbar.element ); overrideDropdownPositionsToNorth( editor, editor.ui.view.toolbar ); overrideDropdownPositionsToNorth( editor, editor.plugins.get( 'FormattingOptions' ).toolbarView ); diff --git a/docs/_snippets/examples/document-editor.js b/docs/_snippets/examples/document-editor.js index 70c3080001e..de76e13ae2b 100644 --- a/docs/_snippets/examples/document-editor.js +++ b/docs/_snippets/examples/document-editor.js @@ -33,9 +33,9 @@ DecoupledEditor licenseKey: 'GPL' } ) .then( editor => { - const toolbarContainer = document.querySelector( '.document-editor__toolbar' ); - - toolbarContainer.appendChild( editor.ui.view.toolbar.element ); + document + .querySelector( '.document-editor__toolbar' ) + ?.appendChild( editor.ui.view.toolbar.element ); window.editor = editor; } ) diff --git a/packages/ckeditor5-ckbox/src/utils.ts b/packages/ckeditor5-ckbox/src/utils.ts index 84f9e69c8cd..a21d9076e20 100644 --- a/packages/ckeditor5-ckbox/src/utils.ts +++ b/packages/ckeditor5-ckbox/src/utils.ts @@ -62,15 +62,13 @@ export function getImageUrls( imageUrls: CKBoxImageUrls ): { export function getWorkspaceId( token: InitializedToken, defaultWorkspaceId?: string ): string | null { const [ , binaryTokenPayload ] = token.value.split( '.' ); const payload = JSON.parse( atob( binaryTokenPayload ) ); - const workspaces = ( payload.auth && payload.auth.ckbox && payload.auth.ckbox.workspaces ) || [ payload.aud ]; + const workspaces = payload.auth?.ckbox?.workspaces || [ payload.aud ]; if ( !defaultWorkspaceId ) { return workspaces[ 0 ]; } - const role = payload.auth && payload.auth.ckbox && payload.auth.ckbox.role; - - if ( role == 'superadmin' || workspaces.includes( defaultWorkspaceId ) ) { + if ( payload.auth?.ckbox?.role == 'superadmin' || workspaces.includes( defaultWorkspaceId ) ) { return defaultWorkspaceId; } diff --git a/packages/ckeditor5-clipboard/src/clipboardmarkersutils.ts b/packages/ckeditor5-clipboard/src/clipboardmarkersutils.ts index 225217ae264..7b25a62bfff 100644 --- a/packages/ckeditor5-clipboard/src/clipboardmarkersutils.ts +++ b/packages/ckeditor5-clipboard/src/clipboardmarkersutils.ts @@ -484,7 +484,7 @@ export default class ClipboardMarkersUtils extends Plugin { // set them new unique name. let skipAssign = false; - if ( prevFakeMarker && prevFakeMarker.start && prevFakeMarker.end ) { + if ( prevFakeMarker?.start && prevFakeMarker?.end ) { const config = this._getMarkerClipboardConfig( fakeMarker.name )!; if ( config.duplicateOnPaste ) { diff --git a/packages/ckeditor5-clipboard/src/dragdrop.ts b/packages/ckeditor5-clipboard/src/dragdrop.ts index 2e02afbf28d..301a0703e4e 100644 --- a/packages/ckeditor5-clipboard/src/dragdrop.ts +++ b/packages/ckeditor5-clipboard/src/dragdrop.ts @@ -276,7 +276,7 @@ export default class DragDrop extends Plugin { // The handler for the drag start; it is responsible for setting data transfer object. this.listenTo( viewDocument, 'dragstart', ( evt, data ) => { // Don't drag the editable element itself. - if ( data.target && data.target.is( 'editableElement' ) ) { + if ( data.target?.is( 'editableElement' ) ) { data.preventDefault(); return; diff --git a/packages/ckeditor5-cloud-services/src/uploadgateway/fileuploader.ts b/packages/ckeditor5-cloud-services/src/uploadgateway/fileuploader.ts index c77015a3062..3c8592e1192 100644 --- a/packages/ckeditor5-cloud-services/src/uploadgateway/fileuploader.ts +++ b/packages/ckeditor5-cloud-services/src/uploadgateway/fileuploader.ts @@ -272,6 +272,5 @@ function _isBase64( string: string | Blob ): string is string { return false; } - const match = string.match( BASE64_HEADER_REG_EXP ); - return !!( match && match.length ); + return !!string.match( BASE64_HEADER_REG_EXP )?.length; } diff --git a/packages/ckeditor5-code-block/src/codeblockcommand.ts b/packages/ckeditor5-code-block/src/codeblockcommand.ts index b8dab3a945b..1f64bd6b4b7 100644 --- a/packages/ckeditor5-code-block/src/codeblockcommand.ts +++ b/packages/ckeditor5-code-block/src/codeblockcommand.ts @@ -91,7 +91,7 @@ export default class CodeBlockCommand extends Command { private _getValue(): string | false { const selection = this.editor.model.document.selection; const firstBlock = first( selection.getSelectedBlocks() ); - const isCodeBlock = !!( firstBlock && firstBlock.is( 'element', 'codeBlock' ) ); + const isCodeBlock = !!firstBlock?.is( 'element', 'codeBlock' ); return isCodeBlock ? firstBlock.getAttribute( 'language' ) as string : false; } diff --git a/packages/ckeditor5-engine/src/view/stylesmap.ts b/packages/ckeditor5-engine/src/view/stylesmap.ts index 5c4d147d8f0..6e5ddb35ee1 100644 --- a/packages/ckeditor5-engine/src/view/stylesmap.ts +++ b/packages/ckeditor5-engine/src/view/stylesmap.ts @@ -429,12 +429,12 @@ export default class StylesMap implements ElementAttributeValue { } if ( expand ) { - this._cachedExpandedStyleNames = this._cachedExpandedStyleNames || this._styleProcessor.getStyleNames( this._styles ); + this._cachedExpandedStyleNames ||= this._styleProcessor.getStyleNames( this._styles ); return this._cachedExpandedStyleNames; } - this._cachedStyleNames = this._cachedStyleNames || this.getStylesEntries().map( ( [ key ] ) => key ); + this._cachedStyleNames ||= this.getStylesEntries().map( ( [ key ] ) => key ); return this._cachedStyleNames; } diff --git a/packages/ckeditor5-ui/src/button/filedialogbuttonview.ts b/packages/ckeditor5-ui/src/button/filedialogbuttonview.ts index a9f5defd479..0d2012629a5 100644 --- a/packages/ckeditor5-ui/src/button/filedialogbuttonview.ts +++ b/packages/ckeditor5-ui/src/button/filedialogbuttonview.ts @@ -224,7 +224,7 @@ class FileInputView extends View { on: { // Removing from code coverage since we cannot programmatically set input element files. change: bind.to( /* istanbul ignore next -- @preserve */ () => { - if ( this.element && this.element.files && this.element.files.length ) { + if ( this.element?.files?.length ) { this.fire( 'done', this.element.files ); } diff --git a/packages/ckeditor5-ui/src/colorgrid/colorgridview.ts b/packages/ckeditor5-ui/src/colorgrid/colorgridview.ts index 98d0c28190a..380a96589c7 100644 --- a/packages/ckeditor5-ui/src/colorgrid/colorgridview.ts +++ b/packages/ckeditor5-ui/src/colorgrid/colorgridview.ts @@ -78,7 +78,7 @@ export default class ColorGridView extends View implements DropdownPanelFocusabl const colorDefinitions = options && options.colorDefinitions ? options.colorDefinitions : []; - this.columns = options && options.columns ? options.columns : 5; + this.columns = options?.columns || 5; const viewStyleAttribute = { gridTemplateColumns: `repeat( ${ this.columns }, 1fr)` @@ -179,7 +179,7 @@ export default class ColorGridView extends View implements DropdownPanelFocusabl focusTracker: this.focusTracker, gridItems: this.items, numberOfColumns: this.columns, - uiLanguageDirection: this.locale && this.locale.uiLanguageDirection + uiLanguageDirection: this.locale?.uiLanguageDirection } ); } diff --git a/packages/ckeditor5-ui/src/colorselector/colorgridsfragmentview.ts b/packages/ckeditor5-ui/src/colorselector/colorgridsfragmentview.ts index 65dcc8c196f..7b2c3e19275 100644 --- a/packages/ckeditor5-ui/src/colorselector/colorgridsfragmentview.ts +++ b/packages/ckeditor5-ui/src/colorselector/colorgridsfragmentview.ts @@ -411,7 +411,7 @@ export default class ColorGridsFragmentView extends View { colorTile.set( { color: colorObj.color, - hasBorder: colorObj.options && colorObj.options.hasBorder + hasBorder: colorObj.options?.hasBorder } ); if ( colorObj.label ) { diff --git a/packages/ckeditor5-ui/src/search/text/searchtextview.ts b/packages/ckeditor5-ui/src/search/text/searchtextview.ts index 97d86a7a91f..5c87e29c289 100644 --- a/packages/ckeditor5-ui/src/search/text/searchtextview.ts +++ b/packages/ckeditor5-ui/src/search/text/searchtextview.ts @@ -290,7 +290,7 @@ export default class SearchTextView< let primaryText, secondaryText; if ( data.totalItemsCount ) { - if ( defaultTextConfig && defaultTextConfig.notFound ) { + if ( defaultTextConfig?.notFound ) { primaryText = defaultTextConfig.notFound.primary; secondaryText = defaultTextConfig.notFound.secondary; } else { @@ -298,7 +298,7 @@ export default class SearchTextView< secondaryText = ''; } } else { - if ( defaultTextConfig && defaultTextConfig.noSearchableItems ) { + if ( defaultTextConfig?.noSearchableItems ) { primaryText = defaultTextConfig.noSearchableItems.primary; secondaryText = defaultTextConfig.noSearchableItems.secondary; } else {