diff --git a/.eslintrc.js b/.eslintrc.js index 14d27ca1a..5b539133b 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -101,6 +101,8 @@ function buildTSOverride({files, tsconfig}) { '@typescript-eslint/no-empty-function': ['off'], // Temporarily disable. 3 problems. '@typescript-eslint/no-empty-interface': ['off'], + // We use this pattern extensively for block (e.g. controls_if) interfaces. + '@typescript-eslint/no-empty-object-type': ['off'], // TsDoc rules (using JsDoc plugin) // Disable built-in jsdoc verifier. diff --git a/.github/workflows/appengine_deploy.yml b/.github/workflows/appengine_deploy.yml index ab8c6bc2e..438d2f094 100644 --- a/.github/workflows/appengine_deploy.yml +++ b/.github/workflows/appengine_deploy.yml @@ -42,7 +42,7 @@ jobs: path: _deploy/ - name: Deploy to App Engine - uses: google-github-actions/deploy-appengine@v2.1.2 + uses: google-github-actions/deploy-appengine@v2.1.3 # For parameters see: # https://github.com/google-github-actions/deploy-appengine#inputs with: diff --git a/.prettierrc.js b/.prettierrc.js index bbfb46639..84a85c115 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -10,4 +10,6 @@ module.exports = { bracketSpacing: false, // Put HTML tag closing brackets on same line as last attribute. bracketSameLine: true, + // Organise imports using a plugin. + 'plugins': ['prettier-plugin-organize-imports'], }; diff --git a/blocks/blocks.ts b/blocks/blocks.ts index a9874e54d..dc6ca386c 100644 --- a/blocks/blocks.ts +++ b/blocks/blocks.ts @@ -6,6 +6,7 @@ // Former goog.module ID: Blockly.libraryBlocks +import type {BlockDefinition} from '../core/blocks.js'; import * as lists from './lists.js'; import * as logic from './logic.js'; import * as loops from './loops.js'; @@ -14,7 +15,6 @@ import * as procedures from './procedures.js'; import * as texts from './text.js'; import * as variables from './variables.js'; import * as variablesDynamic from './variables_dynamic.js'; -import type {BlockDefinition} from '../core/blocks.js'; export { lists, diff --git a/blocks/lists.ts b/blocks/lists.ts index 3b468dc9d..28ff17b3d 100644 --- a/blocks/lists.ts +++ b/blocks/lists.ts @@ -6,22 +6,22 @@ // Former goog.module ID: Blockly.libraryBlocks.lists -import * as fieldRegistry from '../core/field_registry.js'; -import * as xmlUtils from '../core/utils/xml.js'; -import {Align} from '../core/inputs/align.js'; import type {Block} from '../core/block.js'; -import type {Connection} from '../core/connection.js'; import type {BlockSvg} from '../core/block_svg.js'; -import type {FieldDropdown} from '../core/field_dropdown.js'; -import {Msg} from '../core/msg.js'; -import {MutatorIcon} from '../core/icons/mutator_icon.js'; -import type {Workspace} from '../core/workspace.js'; import { createBlockDefinitionsFromJsonArray, defineBlocks, } from '../core/common.js'; +import type {Connection} from '../core/connection.js'; import '../core/field_dropdown.js'; +import type {FieldDropdown} from '../core/field_dropdown.js'; +import * as fieldRegistry from '../core/field_registry.js'; +import {MutatorIcon} from '../core/icons/mutator_icon.js'; +import {Align} from '../core/inputs/align.js'; import {ValueInput} from '../core/inputs/value_input.js'; +import {Msg} from '../core/msg.js'; +import * as xmlUtils from '../core/utils/xml.js'; +import type {Workspace} from '../core/workspace.js'; /** * A dictionary of the block definitions provided by this module. diff --git a/blocks/logic.ts b/blocks/logic.ts index 3e5b807eb..d2a7405ff 100644 --- a/blocks/logic.ts +++ b/blocks/logic.ts @@ -6,22 +6,22 @@ // Former goog.module ID: Blockly.libraryBlocks.logic -import * as Events from '../core/events/events.js'; -import * as Extensions from '../core/extensions.js'; -import * as xmlUtils from '../core/utils/xml.js'; -import type {Abstract as AbstractEvent} from '../core/events/events_abstract.js'; import type {Block} from '../core/block.js'; import type {BlockSvg} from '../core/block_svg.js'; -import type {Connection} from '../core/connection.js'; -import {Msg} from '../core/msg.js'; -import type {Workspace} from '../core/workspace.js'; import { createBlockDefinitionsFromJsonArray, defineBlocks, } from '../core/common.js'; +import type {Connection} from '../core/connection.js'; +import * as Events from '../core/events/events.js'; +import type {Abstract as AbstractEvent} from '../core/events/events_abstract.js'; +import * as Extensions from '../core/extensions.js'; import '../core/field_dropdown.js'; import '../core/field_label.js'; import '../core/icons/mutator_icon.js'; +import {Msg} from '../core/msg.js'; +import * as xmlUtils from '../core/utils/xml.js'; +import type {Workspace} from '../core/workspace.js'; /** * A dictionary of the block definitions provided by this module. diff --git a/blocks/loops.ts b/blocks/loops.ts index c7cb710d7..dd5a81162 100644 --- a/blocks/loops.ts +++ b/blocks/loops.ts @@ -6,27 +6,27 @@ // Former goog.module ID: Blockly.libraryBlocks.loops -import type {Abstract as AbstractEvent} from '../core/events/events_abstract.js'; import type {Block} from '../core/block.js'; +import { + createBlockDefinitionsFromJsonArray, + defineBlocks, +} from '../core/common.js'; import * as ContextMenu from '../core/contextmenu.js'; import type { ContextMenuOption, LegacyContextMenuOption, } from '../core/contextmenu_registry.js'; import * as Events from '../core/events/events.js'; -import * as Extensions from '../core/extensions.js'; -import {Msg} from '../core/msg.js'; -import { - createBlockDefinitionsFromJsonArray, - defineBlocks, -} from '../core/common.js'; +import type {Abstract as AbstractEvent} from '../core/events/events_abstract.js'; import * as eventUtils from '../core/events/utils.js'; +import * as Extensions from '../core/extensions.js'; import '../core/field_dropdown.js'; import '../core/field_label.js'; import '../core/field_number.js'; import '../core/field_variable.js'; -import '../core/icons/warning_icon.js'; import {FieldVariable} from '../core/field_variable.js'; +import '../core/icons/warning_icon.js'; +import {Msg} from '../core/msg.js'; import {WorkspaceSvg} from '../core/workspace_svg.js'; /** diff --git a/blocks/math.ts b/blocks/math.ts index c96aef3c2..e5aef5fbb 100644 --- a/blocks/math.ts +++ b/blocks/math.ts @@ -6,18 +6,18 @@ // Former goog.module ID: Blockly.libraryBlocks.math -import * as Extensions from '../core/extensions.js'; -import type {FieldDropdown} from '../core/field_dropdown.js'; -import * as xmlUtils from '../core/utils/xml.js'; import type {Block} from '../core/block.js'; import { createBlockDefinitionsFromJsonArray, defineBlocks, } from '../core/common.js'; +import * as Extensions from '../core/extensions.js'; import '../core/field_dropdown.js'; +import type {FieldDropdown} from '../core/field_dropdown.js'; import '../core/field_label.js'; import '../core/field_number.js'; import '../core/field_variable.js'; +import * as xmlUtils from '../core/utils/xml.js'; /** * A dictionary of the block definitions provided by this module. diff --git a/blocks/procedures.ts b/blocks/procedures.ts index 1214eb55e..bf9a9206b 100644 --- a/blocks/procedures.ts +++ b/blocks/procedures.ts @@ -6,40 +6,40 @@ // Former goog.module ID: Blockly.libraryBlocks.procedures -import * as ContextMenu from '../core/contextmenu.js'; -import * as Events from '../core/events/events.js'; -import * as Procedures from '../core/procedures.js'; -import * as Variables from '../core/variables.js'; -import * as Xml from '../core/xml.js'; -import * as fieldRegistry from '../core/field_registry.js'; -import * as xmlUtils from '../core/utils/xml.js'; -import type {Abstract as AbstractEvent} from '../core/events/events_abstract.js'; -import {Align} from '../core/inputs/align.js'; import type {Block} from '../core/block.js'; import type {BlockSvg} from '../core/block_svg.js'; -import type {BlockCreate} from '../core/events/events_block_create.js'; -import type {BlockChange} from '../core/events/events_block_change.js'; import type {BlockDefinition} from '../core/blocks.js'; +import * as common from '../core/common.js'; +import {defineBlocks} from '../core/common.js'; +import {config} from '../core/config.js'; import type {Connection} from '../core/connection.js'; +import * as ContextMenu from '../core/contextmenu.js'; import type { ContextMenuOption, LegacyContextMenuOption, } from '../core/contextmenu_registry.js'; +import * as Events from '../core/events/events.js'; +import type {Abstract as AbstractEvent} from '../core/events/events_abstract.js'; +import type {BlockChange} from '../core/events/events_block_change.js'; +import type {BlockCreate} from '../core/events/events_block_create.js'; import * as eventUtils from '../core/events/utils.js'; import {FieldCheckbox} from '../core/field_checkbox.js'; import {FieldLabel} from '../core/field_label.js'; +import * as fieldRegistry from '../core/field_registry.js'; import {FieldTextInput} from '../core/field_textinput.js'; -import {Msg} from '../core/msg.js'; +import '../core/icons/comment_icon.js'; import {MutatorIcon as Mutator} from '../core/icons/mutator_icon.js'; +import '../core/icons/warning_icon.js'; +import {Align} from '../core/inputs/align.js'; +import {Msg} from '../core/msg.js'; import {Names} from '../core/names.js'; +import * as Procedures from '../core/procedures.js'; +import * as xmlUtils from '../core/utils/xml.js'; import type {VariableModel} from '../core/variable_model.js'; +import * as Variables from '../core/variables.js'; import type {Workspace} from '../core/workspace.js'; import type {WorkspaceSvg} from '../core/workspace_svg.js'; -import {config} from '../core/config.js'; -import {defineBlocks} from '../core/common.js'; -import '../core/icons/comment_icon.js'; -import '../core/icons/warning_icon.js'; -import * as common from '../core/common.js'; +import * as Xml from '../core/xml.js'; /** A dictionary of the block definitions provided by this module. */ export const blocks: {[key: string]: BlockDefinition} = {}; @@ -1206,7 +1206,7 @@ blocks['procedures_callreturn'] = { this.appendDummyInput('TOPROW').appendField('', 'NAME'); this.setOutput(true); this.setStyle('procedure_blocks'); - // Tooltip is set in domToMutation. + // Tooltip is set in renameProcedure. this.setHelpUrl(Msg['PROCEDURES_CALLRETURN_HELPURL']); this.arguments_ = []; this.argumentVarModels_ = []; diff --git a/blocks/text.ts b/blocks/text.ts index 91a27005a..5ab631836 100644 --- a/blocks/text.ts +++ b/blocks/text.ts @@ -6,25 +6,25 @@ // Former goog.module ID: Blockly.libraryBlocks.texts -import * as Extensions from '../core/extensions.js'; -import * as fieldRegistry from '../core/field_registry.js'; -import * as xmlUtils from '../core/utils/xml.js'; -import {Align} from '../core/inputs/align.js'; import type {Block} from '../core/block.js'; import type {BlockSvg} from '../core/block_svg.js'; -import {Connection} from '../core/connection.js'; -import {FieldImage} from '../core/field_image.js'; -import {FieldDropdown} from '../core/field_dropdown.js'; -import {FieldTextInput} from '../core/field_textinput.js'; -import {Msg} from '../core/msg.js'; -import {MutatorIcon} from '../core/icons/mutator_icon.js'; -import type {Workspace} from '../core/workspace.js'; import { createBlockDefinitionsFromJsonArray, defineBlocks, } from '../core/common.js'; +import {Connection} from '../core/connection.js'; +import * as Extensions from '../core/extensions.js'; +import {FieldDropdown} from '../core/field_dropdown.js'; +import {FieldImage} from '../core/field_image.js'; +import * as fieldRegistry from '../core/field_registry.js'; +import {FieldTextInput} from '../core/field_textinput.js'; import '../core/field_variable.js'; +import {MutatorIcon} from '../core/icons/mutator_icon.js'; +import {Align} from '../core/inputs/align.js'; import {ValueInput} from '../core/inputs/value_input.js'; +import {Msg} from '../core/msg.js'; +import * as xmlUtils from '../core/utils/xml.js'; +import type {Workspace} from '../core/workspace.js'; /** * A dictionary of the block definitions provided by this module. @@ -438,6 +438,11 @@ const PROMPT_COMMON = { domToMutation: function (this: PromptCommonBlock, xmlElement: Element) { this.updateType_(xmlElement.getAttribute('type')!); }, + + // These blocks do not need JSO serialization hooks (saveExtraState + // and loadExtraState) because the state of this object is already + // encoded in the dropdown values. + // XML hooks are kept for backwards compatibility. }; blocks['text_prompt_ext'] = { @@ -468,16 +473,11 @@ blocks['text_prompt_ext'] = { : Msg['TEXT_PROMPT_TOOLTIP_NUMBER']; }); }, - - // This block does not need JSO serialization hooks (saveExtraState and - // loadExtraState) because the state of this object is already encoded in the - // dropdown values. - // XML hooks are kept for backwards compatibility. }; type PromptBlock = Block & PromptCommonMixin & QuoteImageMixin; -const TEXT_PROMPT_BLOCK = { +blocks['text_prompt'] = { ...PROMPT_COMMON, /** * Block for prompt function (internal message). @@ -520,8 +520,6 @@ const TEXT_PROMPT_BLOCK = { }, }; -blocks['text_prompt'] = TEXT_PROMPT_BLOCK; - blocks['text_count'] = { /** * Block for counting how many times one string appears within another string. @@ -666,7 +664,7 @@ const QUOTE_IMAGE_MIXIN = { * closing double quote. The selected quote will be adapted for RTL blocks. * * @param open If the image should be open quote (“ in LTR). - * Otherwise, a closing quote is used (” in LTR). + * Otherwise, a closing quote is used (” in LTR). * @returns The new field. */ newQuote_: function (this: QuoteImageBlock, open: boolean): FieldImage { diff --git a/blocks/variables.ts b/blocks/variables.ts index 8ac038fb2..0ec9112a3 100644 --- a/blocks/variables.ts +++ b/blocks/variables.ts @@ -6,22 +6,22 @@ // Former goog.module ID: Blockly.libraryBlocks.variables -import * as ContextMenu from '../core/contextmenu.js'; -import * as Extensions from '../core/extensions.js'; -import * as Variables from '../core/variables.js'; import type {Block} from '../core/block.js'; -import type { - ContextMenuOption, - LegacyContextMenuOption, -} from '../core/contextmenu_registry.js'; -import {FieldVariable} from '../core/field_variable.js'; -import {Msg} from '../core/msg.js'; -import type {WorkspaceSvg} from '../core/workspace_svg.js'; import { createBlockDefinitionsFromJsonArray, defineBlocks, } from '../core/common.js'; +import * as ContextMenu from '../core/contextmenu.js'; +import type { + ContextMenuOption, + LegacyContextMenuOption, +} from '../core/contextmenu_registry.js'; +import * as Extensions from '../core/extensions.js'; import '../core/field_label.js'; +import {FieldVariable} from '../core/field_variable.js'; +import {Msg} from '../core/msg.js'; +import * as Variables from '../core/variables.js'; +import type {WorkspaceSvg} from '../core/workspace_svg.js'; /** * A dictionary of the block definitions provided by this module. diff --git a/blocks/variables_dynamic.ts b/blocks/variables_dynamic.ts index e74cae423..8e4ce290e 100644 --- a/blocks/variables_dynamic.ts +++ b/blocks/variables_dynamic.ts @@ -6,23 +6,23 @@ // Former goog.module ID: Blockly.libraryBlocks.variablesDynamic -import * as ContextMenu from '../core/contextmenu.js'; -import * as Extensions from '../core/extensions.js'; -import * as Variables from '../core/variables.js'; -import {Abstract as AbstractEvent} from '../core/events/events_abstract.js'; import type {Block} from '../core/block.js'; -import type { - ContextMenuOption, - LegacyContextMenuOption, -} from '../core/contextmenu_registry.js'; -import {FieldVariable} from '../core/field_variable.js'; -import {Msg} from '../core/msg.js'; -import type {WorkspaceSvg} from '../core/workspace_svg.js'; import { createBlockDefinitionsFromJsonArray, defineBlocks, } from '../core/common.js'; +import * as ContextMenu from '../core/contextmenu.js'; +import type { + ContextMenuOption, + LegacyContextMenuOption, +} from '../core/contextmenu_registry.js'; +import {Abstract as AbstractEvent} from '../core/events/events_abstract.js'; +import * as Extensions from '../core/extensions.js'; import '../core/field_label.js'; +import {FieldVariable} from '../core/field_variable.js'; +import {Msg} from '../core/msg.js'; +import * as Variables from '../core/variables.js'; +import type {WorkspaceSvg} from '../core/workspace_svg.js'; /** * A dictionary of the block definitions provided by this module. diff --git a/core/block.ts b/core/block.ts index 6a911d557..189f67781 100644 --- a/core/block.ts +++ b/core/block.ts @@ -23,35 +23,36 @@ import * as common from './common.js'; import {Connection} from './connection.js'; import {ConnectionType} from './connection_type.js'; import * as constants from './constants.js'; -import {DuplicateIconType} from './icons/exceptions.js'; import type {Abstract} from './events/events_abstract.js'; import type {BlockChange} from './events/events_block_change.js'; import type {BlockMove} from './events/events_block_move.js'; -import * as deprecation from './utils/deprecation.js'; +import {EventType} from './events/type.js'; import * as eventUtils from './events/utils.js'; import * as Extensions from './extensions.js'; import type {Field} from './field.js'; import * as fieldRegistry from './field_registry.js'; -import {Input} from './inputs/input.js'; -import {Align} from './inputs/align.js'; -import type {IASTNodeLocation} from './interfaces/i_ast_node_location.js'; -import {type IIcon} from './interfaces/i_icon.js'; -import {isCommentIcon} from './interfaces/i_comment_icon.js'; +import {DuplicateIconType} from './icons/exceptions.js'; +import {IconType} from './icons/icon_types.js'; import type {MutatorIcon} from './icons/mutator_icon.js'; +import {Align} from './inputs/align.js'; +import {DummyInput} from './inputs/dummy_input.js'; +import {EndRowInput} from './inputs/end_row_input.js'; +import {Input} from './inputs/input.js'; +import {StatementInput} from './inputs/statement_input.js'; +import {ValueInput} from './inputs/value_input.js'; +import type {IASTNodeLocation} from './interfaces/i_ast_node_location.js'; +import {isCommentIcon} from './interfaces/i_comment_icon.js'; +import {type IIcon} from './interfaces/i_icon.js'; +import * as registry from './registry.js'; import * as Tooltip from './tooltip.js'; import * as arrayUtils from './utils/array.js'; import {Coordinate} from './utils/coordinate.js'; +import * as deprecation from './utils/deprecation.js'; import * as idGenerator from './utils/idgenerator.js'; import * as parsing from './utils/parsing.js'; -import * as registry from './registry.js'; import {Size} from './utils/size.js'; import type {VariableModel} from './variable_model.js'; import type {Workspace} from './workspace.js'; -import {DummyInput} from './inputs/dummy_input.js'; -import {EndRowInput} from './inputs/end_row_input.js'; -import {ValueInput} from './inputs/value_input.js'; -import {StatementInput} from './inputs/statement_input.js'; -import {IconType} from './icons/icon_types.js'; /** * Class for one block. @@ -143,24 +144,31 @@ export class Block implements IASTNodeLocation { suppressPrefixSuffix: boolean | null = false; /** - * An optional property for declaring developer variables. Return a list of - * variable names for use by generators. Developer variables are never - * shown to the user, but are declared as global variables in the generated - * code. + * An optional method for declaring developer variables, to be used + * by generators. Developer variables are never shown to the user, + * but are declared as global variables in the generated code. + * + * @returns a list of developer variable names. */ getDeveloperVariables?: () => string[]; /** - * An optional function that reconfigures the block based on the contents of - * the mutator dialog. + * An optional method that reconfigures the block based on the + * contents of the mutator dialog. + * + * @param rootBlock The root block in the mutator flyout. */ - compose?: (p1: Block) => void; + compose?: (rootBlock: Block) => void; /** - * An optional function that populates the mutator's dialog with - * this block's components. + * An optional function that populates the mutator flyout with + * blocks representing this block's configuration. + * + * @param workspace The mutator flyout's workspace. + * @returns The root block created in the flyout's workspace. */ - decompose?: (p1: Workspace) => Block; + decompose?: (workspace: Workspace) => Block; + id: string; outputConnection: Connection | null = null; nextConnection: Connection | null = null; @@ -216,7 +224,7 @@ export class Block implements IASTNodeLocation { /** * String for block help, or function that returns a URL. Null for no help. */ - helpUrl: string | Function | null = null; + helpUrl: string | (() => string) | null = null; /** A bound callback function to use when the parent workspace changes. */ private onchangeWrapper_: ((p1: Abstract) => void) | null = null; @@ -297,7 +305,7 @@ export class Block implements IASTNodeLocation { // Fire a create event. if (eventUtils.isEnabled()) { - eventUtils.fire(new (eventUtils.get(eventUtils.BLOCK_CREATE))(this)); + eventUtils.fire(new (eventUtils.get(EventType.BLOCK_CREATE))(this)); } } finally { eventUtils.setGroup(existingGroup); @@ -332,7 +340,7 @@ export class Block implements IASTNodeLocation { this.unplug(healStack); if (eventUtils.isEnabled()) { // Constructing the delete event is costly. Only perform if necessary. - eventUtils.fire(new (eventUtils.get(eventUtils.BLOCK_DELETE))(this)); + eventUtils.fire(new (eventUtils.get(EventType.BLOCK_DELETE))(this)); } this.workspace.removeTopBlock(this); this.disposeInternal(); @@ -716,7 +724,7 @@ export class Block implements IASTNodeLocation { } // Check that block is connected to new parent if new parent is not null and - // that block is not connected to superior one if new parent is null. + // that block is not connected to superior one if new parent is null. const targetBlock = (this.previousConnection && this.previousConnection.targetBlock()) || (this.outputConnection && this.outputConnection.targetBlock()); @@ -734,14 +742,13 @@ export class Block implements IASTNodeLocation { } // This block hasn't actually moved on-screen, so there's no need to - // update - // its connection locations. + // update its connection locations. if (this.parentBlock_) { // Remove this block from the old parent's child list. arrayUtils.removeElem(this.parentBlock_.childBlocks_, this); } else { - // New parent must be non-null so remove this block from the workspace's - // list of top-most blocks. + // New parent must be non-null so remove this block from the + // workspace's list of top-most blocks. this.workspace.removeTopBlock(this); } @@ -991,7 +998,7 @@ export class Block implements IASTNodeLocation { * @param url URL string for block help, or function that returns a URL. Null * for no help. */ - setHelpUrl(url: string | Function) { + setHelpUrl(url: string | (() => string)) { this.helpUrl = url; } @@ -1323,7 +1330,7 @@ export class Block implements IASTNodeLocation { setInputsInline(newBoolean: boolean) { if (this.inputsInline !== newBoolean) { eventUtils.fire( - new (eventUtils.get(eventUtils.BLOCK_CHANGE))( + new (eventUtils.get(EventType.BLOCK_CHANGE))( this, 'inline', null, @@ -1485,7 +1492,7 @@ export class Block implements IASTNodeLocation { } else { this.disabledReasons.delete(reason); } - const blockChangeEvent = new (eventUtils.get(eventUtils.BLOCK_CHANGE))( + const blockChangeEvent = new (eventUtils.get(EventType.BLOCK_CHANGE))( this, 'disabled', /* name= */ null, @@ -1553,7 +1560,7 @@ export class Block implements IASTNodeLocation { setCollapsed(collapsed: boolean) { if (this.collapsed_ !== collapsed) { eventUtils.fire( - new (eventUtils.get(eventUtils.BLOCK_CHANGE))( + new (eventUtils.get(EventType.BLOCK_CHANGE))( this, 'collapsed', null, @@ -1858,7 +1865,7 @@ export class Block implements IASTNodeLocation { const rawValue = json['colour']; try { this.setColour(rawValue); - } catch (e) { + } catch { console.warn(warningPrefix + 'Illegal colour value: ', rawValue); } } @@ -1875,7 +1882,7 @@ export class Block implements IASTNodeLocation { const blockStyleName = json['style']; try { this.setStyle(blockStyleName); - } catch (styleError) { + } catch { console.warn(warningPrefix + 'Style does not exist: ', blockStyleName); } } @@ -2352,7 +2359,7 @@ export class Block implements IASTNodeLocation { } eventUtils.fire( - new (eventUtils.get(eventUtils.BLOCK_CHANGE))( + new (eventUtils.get(EventType.BLOCK_CHANGE))( this, 'comment', null, @@ -2452,10 +2459,8 @@ export class Block implements IASTNodeLocation { if (this.parentBlock_) { throw Error('Block has parent'); } - const event = new (eventUtils.get(eventUtils.BLOCK_MOVE))( - this, - ) as BlockMove; - reason && event.setReason(reason); + const event = new (eventUtils.get(EventType.BLOCK_MOVE))(this) as BlockMove; + if (reason) event.setReason(reason); this.xy_.translate(dx, dy); event.recordNew(); eventUtils.fire(event); diff --git a/core/block_svg.ts b/core/block_svg.ts index 79f548caf..db75acde2 100644 --- a/core/block_svg.ts +++ b/core/block_svg.ts @@ -16,7 +16,9 @@ import './events/events_selected.js'; import {Block} from './block.js'; import * as blockAnimations from './block_animations.js'; +import {IDeletable} from './blockly.js'; import * as browserEvents from './browser_events.js'; +import {BlockCopyData, BlockPaster} from './clipboard/block_paster.js'; import * as common from './common.js'; import {config} from './config.js'; import type {Connection} from './connection.js'; @@ -28,11 +30,15 @@ import { ContextMenuRegistry, LegacyContextMenuOption, } from './contextmenu_registry.js'; +import {BlockDragStrategy} from './dragging/block_drag_strategy.js'; import type {BlockMove} from './events/events_block_move.js'; -import * as deprecation from './utils/deprecation.js'; +import {EventType} from './events/type.js'; import * as eventUtils from './events/utils.js'; import type {Field} from './field.js'; import {FieldLabel} from './field_label.js'; +import {IconType} from './icons/icon_types.js'; +import {MutatorIcon} from './icons/mutator_icon.js'; +import {WarningIcon} from './icons/warning_icon.js'; import type {Input} from './inputs/input.js'; import type {IASTNodeLocationSvg} from './interfaces/i_ast_node_location_svg.js'; import type {IBoundedElement} from './interfaces/i_bounded_element.js'; @@ -44,26 +50,21 @@ import {ASTNode} from './keyboard_nav/ast_node.js'; import {TabNavigateCursor} from './keyboard_nav/tab_navigate_cursor.js'; import {MarkerManager} from './marker_manager.js'; import {Msg} from './msg.js'; -import {MutatorIcon} from './icons/mutator_icon.js'; +import * as renderManagement from './render_management.js'; import {RenderedConnection} from './rendered_connection.js'; import type {IPathObject} from './renderers/common/i_path_object.js'; import * as blocks from './serialization/blocks.js'; import type {BlockStyle} from './theme.js'; import * as Tooltip from './tooltip.js'; import {Coordinate} from './utils/coordinate.js'; +import * as deprecation from './utils/deprecation.js'; import * as dom from './utils/dom.js'; import {Rect} from './utils/rect.js'; import {Svg} from './utils/svg.js'; import * as svgMath from './utils/svg_math.js'; -import {WarningIcon} from './icons/warning_icon.js'; +import {FlyoutItemInfo} from './utils/toolbox.js'; import type {Workspace} from './workspace.js'; import type {WorkspaceSvg} from './workspace_svg.js'; -import * as renderManagement from './render_management.js'; -import {IconType} from './icons/icon_types.js'; -import {BlockCopyData, BlockPaster} from './clipboard/block_paster.js'; -import {BlockDragStrategy} from './dragging/block_drag_strategy.js'; -import {IDeletable} from './blockly.js'; -import {FlyoutItemInfo} from './utils/toolbox.js'; /** * Class for a block's SVG representation. @@ -92,7 +93,25 @@ export class BlockSvg static readonly COLLAPSED_WARNING_ID = 'TEMP_COLLAPSED_WARNING_'; override decompose?: (p1: Workspace) => BlockSvg; // override compose?: ((p1: BlockSvg) => void)|null; - saveConnections?: (p1: BlockSvg) => void; + + /** + * An optional method which saves a record of blocks connected to + * this block so they can be later restored after this block is + * recoomposed (reconfigured). Typically records the connected + * blocks on properties on blocks in the mutator flyout, so that + * rearranging those component blocks will automatically rearrange + * the corresponding connected blocks on this block after this block + * is recomposed. + * + * To keep the saved connection information up-to-date, MutatorIcon + * arranges for an event listener to call this method any time the + * mutator flyout is open and a change occurs on this block's + * workspace. + * + * @param rootBlock The root block in the mutator flyout. + */ + saveConnections?: (rootBlock: BlockSvg) => void; + customContextMenu?: ( p1: Array, ) => void; @@ -359,8 +378,8 @@ export class BlockSvg const eventsEnabled = eventUtils.isEnabled(); let event: BlockMove | null = null; if (eventsEnabled) { - event = new (eventUtils.get(eventUtils.BLOCK_MOVE)!)(this) as BlockMove; - reason && event.setReason(reason); + event = new (eventUtils.get(EventType.BLOCK_MOVE)!)(this) as BlockMove; + if (reason) event.setReason(reason); } const delta = new Coordinate(dx, dy); @@ -1153,10 +1172,11 @@ export class BlockSvg * tags do not respect z-index so SVG renders them in the * order that they are in the DOM. By placing this block first within the * block group's , it will render on top of any other blocks. + * Use sparingly, this method is expensive because it reorders the DOM + * nodes. * - * @param blockOnly: True to only move this block to the front without + * @param blockOnly True to only move this block to the front without * adjusting its parents. - * @internal */ bringToFront(blockOnly = false) { /* eslint-disable-next-line @typescript-eslint/no-this-alias */ diff --git a/core/blockly.ts b/core/blockly.ts index 77362c0b4..01490dbb6 100644 --- a/core/blockly.ts +++ b/core/blockly.ts @@ -22,8 +22,10 @@ import {BlocklyOptions} from './blockly_options.js'; import {Blocks} from './blocks.js'; import * as browserEvents from './browser_events.js'; import * as bubbles from './bubbles.js'; +import {MiniWorkspaceBubble} from './bubbles/mini_workspace_bubble.js'; import * as bumpObjects from './bump_objects.js'; import * as clipboard from './clipboard.js'; +import * as comments from './comments.js'; import * as common from './common.js'; import {ComponentManager} from './component_manager.js'; import {config} from './config.js'; @@ -31,15 +33,15 @@ import {Connection} from './connection.js'; import {ConnectionChecker} from './connection_checker.js'; import {ConnectionDB} from './connection_db.js'; import {ConnectionType} from './connection_type.js'; +import * as constants from './constants.js'; import * as ContextMenu from './contextmenu.js'; import * as ContextMenuItems from './contextmenu_items.js'; import {ContextMenuRegistry} from './contextmenu_registry.js'; -import * as comments from './comments.js'; import * as Css from './css.js'; import {DeleteArea} from './delete_area.js'; import * as dialog from './dialog.js'; -import * as dragging from './dragging.js'; import {DragTarget} from './drag_target.js'; +import * as dragging from './dragging.js'; import * as dropDownDiv from './dropdowndiv.js'; import * as Events from './events/events.js'; import * as Extensions from './extensions.js'; @@ -104,8 +106,8 @@ import {Gesture} from './gesture.js'; import {Grid} from './grid.js'; import * as icons from './icons.js'; import {inject} from './inject.js'; -import {Input} from './inputs/input.js'; import * as inputs from './inputs.js'; +import {Input} from './inputs/input.js'; import {InsertionMarkerManager} from './insertion_marker_manager.js'; import {InsertionMarkerPreviewer} from './insertion_marker_previewer.js'; import {IASTNodeLocation} from './interfaces/i_ast_node_location.js'; @@ -119,16 +121,16 @@ import {IComponent} from './interfaces/i_component.js'; import {IConnectionChecker} from './interfaces/i_connection_checker.js'; import {IConnectionPreviewer} from './interfaces/i_connection_previewer.js'; import {IContextMenu} from './interfaces/i_contextmenu.js'; -import {ICopyable, isCopyable, ICopyData} from './interfaces/i_copyable.js'; +import {ICopyData, ICopyable, isCopyable} from './interfaces/i_copyable.js'; import {IDeletable, isDeletable} from './interfaces/i_deletable.js'; import {IDeleteArea} from './interfaces/i_delete_area.js'; import {IDragTarget} from './interfaces/i_drag_target.js'; -import {IDragger} from './interfaces/i_dragger.js'; import { + IDragStrategy, IDraggable, isDraggable, - IDragStrategy, } from './interfaces/i_draggable.js'; +import {IDragger} from './interfaces/i_dragger.js'; import {IFlyout} from './interfaces/i_flyout.js'; import {IHasBubble, hasBubble} from './interfaces/i_has_bubble.js'; import {IIcon, isIcon} from './interfaces/i_icon.js'; @@ -159,23 +161,21 @@ import {BasicCursor} from './keyboard_nav/basic_cursor.js'; import {Cursor} from './keyboard_nav/cursor.js'; import {Marker} from './keyboard_nav/marker.js'; import {TabNavigateCursor} from './keyboard_nav/tab_navigate_cursor.js'; -import {MarkerManager} from './marker_manager.js'; import type {LayerManager} from './layer_manager.js'; import * as layers from './layers.js'; +import {MarkerManager} from './marker_manager.js'; import {Menu} from './menu.js'; import {MenuItem} from './menuitem.js'; import {MetricsManager} from './metrics_manager.js'; import {Msg, setLocale} from './msg.js'; -import {MiniWorkspaceBubble} from './bubbles/mini_workspace_bubble.js'; import {Names} from './names.js'; import {Options} from './options.js'; import * as uiPosition from './positionable_helpers.js'; import * as Procedures from './procedures.js'; import * as registry from './registry.js'; -import {RenderedConnection} from './rendered_connection.js'; import * as renderManagement from './render_management.js'; +import {RenderedConnection} from './rendered_connection.js'; import * as blockRendering from './renderers/common/block_rendering.js'; -import * as constants from './constants.js'; import * as geras from './renderers/geras/geras.js'; import * as thrasos from './renderers/thrasos/thrasos.js'; import * as zelos from './renderers/zelos/zelos.js'; @@ -418,172 +418,187 @@ Names.prototype.populateProcedures = function ( // clang-format on // Re-export submodules that no longer declareLegacyNamespace. -export {browserEvents}; -export {ContextMenu}; -export {ContextMenuItems}; -export {Css}; -export {Events}; -export {Extensions}; -export {Procedures}; -export {Procedures as procedures}; -export {ShortcutItems}; -export {Themes}; -export {Tooltip}; -export {Touch}; -export {Variables}; -export {VariablesDynamic}; -export {WidgetDiv}; -export {Xml}; -export {blockAnimations}; -export {blockRendering}; -export {bumpObjects}; -export {clipboard}; -export {common}; -export {constants}; -export {dialog}; -export {fieldRegistry}; -export {geras}; -export {registry}; -export {thrasos}; -export {uiPosition}; -export {utils}; -export {zelos}; -export {ASTNode}; -export {BasicCursor}; -export {Block}; -export {BlocklyOptions}; -export {BlockSvg}; -export {Blocks}; -export {bubbles}; -export {CollapsibleToolboxCategory}; -export {ComponentManager}; -export {Connection}; -export {ConnectionType}; -export {ConnectionChecker}; -export {ConnectionDB}; -export {ContextMenuRegistry}; -export {comments}; -export {Cursor}; -export {DeleteArea}; -export {dragging}; -export {DragTarget}; -export const DropDownDiv = dropDownDiv; -export {Field, FieldConfig, FieldValidator, UnattachedFieldError}; export { + ASTNode, + BasicCursor, + Block, + BlockSvg, + BlocklyOptions, + Blocks, + CollapsibleToolboxCategory, + ComponentManager, + Connection, + ConnectionChecker, + ConnectionDB, + ConnectionType, + ContextMenu, + ContextMenuItems, + ContextMenuRegistry, + Css, + Cursor, + DeleteArea, + DragTarget, + Events, + Extensions, + Procedures, + ShortcutItems, + Themes, + Tooltip, + Touch, + Variables, + VariablesDynamic, + WidgetDiv, + Xml, + blockAnimations, + blockRendering, + browserEvents, + bubbles, + bumpObjects, + clipboard, + comments, + common, + constants, + dialog, + dragging, + fieldRegistry, + geras, + Procedures as procedures, + registry, + thrasos, + uiPosition, + utils, + zelos, +}; +export const DropDownDiv = dropDownDiv; +export { + CodeGenerator, + Field, FieldCheckbox, FieldCheckboxConfig, FieldCheckboxFromJsonConfig, FieldCheckboxValidator, -}; -export { + FieldConfig, FieldDropdown, FieldDropdownConfig, FieldDropdownFromJsonConfig, FieldDropdownValidator, - MenuGenerator, - MenuGeneratorFunction, - MenuOption, -}; -export {FieldImage, FieldImageConfig, FieldImageFromJsonConfig}; -export {FieldLabel, FieldLabelConfig, FieldLabelFromJsonConfig}; -export {FieldLabelSerializable}; -export { + FieldImage, + FieldImageConfig, + FieldImageFromJsonConfig, + FieldLabel, + FieldLabelConfig, + FieldLabelFromJsonConfig, + FieldLabelSerializable, FieldNumber, FieldNumberConfig, FieldNumberFromJsonConfig, FieldNumberValidator, -}; -export { FieldTextInput, FieldTextInputConfig, FieldTextInputFromJsonConfig, FieldTextInputValidator, -}; -export { + FieldValidator, FieldVariable, FieldVariableConfig, FieldVariableFromJsonConfig, FieldVariableValidator, + Flyout, + FlyoutButton, + FlyoutMetricsManager, + CodeGenerator as Generator, + Gesture, + Grid, + HorizontalFlyout, + IASTNodeLocation, + IASTNodeLocationSvg, + IASTNodeLocationWithBlock, + IAutoHideable, + IBoundedElement, + IBubble, + ICollapsibleToolboxItem, + IComponent, + IConnectionChecker, + IConnectionPreviewer, + IContextMenu, + ICopyData, + ICopyable, + IDeletable, + IDeleteArea, + IDragStrategy, + IDragTarget, + IDraggable, + IDragger, + IFlyout, + IHasBubble, + IIcon, + IKeyboardAccessible, + IMetricsManager, + IMovable, + IObservable, + IPaster, + IPositionable, + IRegistrable, + IRenderedElement, + ISelectable, + ISelectableToolboxItem, + ISerializable, + IStyleable, + IToolbox, + IToolboxItem, + IVariableBackedParameterModel, + Input, + InsertionMarkerManager, + InsertionMarkerPreviewer, + LayerManager, + Marker, + MarkerManager, + Menu, + MenuGenerator, + MenuGeneratorFunction, + MenuItem, + MenuOption, + MetricsManager, + Msg, + Names, + Options, + RenderedConnection, + Scrollbar, + ScrollbarPair, + ShortcutRegistry, + TabNavigateCursor, + Theme, + ThemeManager, + Toolbox, + ToolboxCategory, + ToolboxItem, + ToolboxSeparator, + Trashcan, + UnattachedFieldError, + VariableMap, + VariableModel, + VerticalFlyout, + Workspace, + WorkspaceAudio, + WorkspaceDragger, + WorkspaceSvg, + ZoomControls, + config, + hasBubble, + icons, + inject, + inputs, + isCopyable, + isDeletable, + isDraggable, + isIcon, + isObservable, + isPaster, + isRenderedElement, + isSelectable, + isSerializable, + isVariableBackedParameterModel, + layers, + renderManagement, + serialization, + setLocale, }; -export {Flyout}; -export {FlyoutButton}; -export {FlyoutMetricsManager}; -export {CodeGenerator}; -export {CodeGenerator as Generator}; // Deprecated name, October 2022. -export {Gesture}; -export {Grid}; -export {HorizontalFlyout}; -export {IASTNodeLocation}; -export {IASTNodeLocationSvg}; -export {IASTNodeLocationWithBlock}; -export {IAutoHideable}; -export {IBoundedElement}; -export {IBubble}; -export {ICollapsibleToolboxItem}; -export {IComponent}; -export {IConnectionChecker}; -export {IConnectionPreviewer}; -export {IContextMenu}; -export {icons}; -export {ICopyable, isCopyable, ICopyData}; -export {IDeletable, isDeletable}; -export {IDeleteArea}; -export {IDragTarget}; -export {IDragger}; -export {IDraggable, isDraggable, IDragStrategy}; -export {IFlyout}; -export {IHasBubble, hasBubble}; -export {IIcon, isIcon}; -export {IKeyboardAccessible}; -export {IMetricsManager}; -export {IMovable}; -export {Input}; -export {inputs}; -export {InsertionMarkerManager}; -export {InsertionMarkerPreviewer}; -export {IObservable, isObservable}; -export {IPaster, isPaster}; -export {IPositionable}; -export {IRegistrable}; -export {IRenderedElement, isRenderedElement}; -export {ISelectable, isSelectable}; -export {ISelectableToolboxItem}; -export {ISerializable, isSerializable}; -export {IStyleable}; -export {IToolbox}; -export {IToolboxItem}; -export {IVariableBackedParameterModel, isVariableBackedParameterModel}; -export {Marker}; -export {MarkerManager}; -export {LayerManager}; -export {Menu}; -export {MenuItem}; -export {MetricsManager}; -export {Msg, setLocale}; -export {Names}; -export {Options}; -export {RenderedConnection}; -export {renderManagement}; -export {Scrollbar}; -export {ScrollbarPair}; -export {ShortcutRegistry}; -export {TabNavigateCursor}; -export {Theme}; -export {ThemeManager}; -export {Toolbox}; -export {ToolboxCategory}; -export {ToolboxItem}; -export {ToolboxSeparator}; -export {Trashcan}; -export {VariableMap}; -export {VariableModel}; -export {VerticalFlyout}; -export {Workspace}; -export {WorkspaceAudio}; -export {WorkspaceDragger}; -export {WorkspaceSvg}; -export {ZoomControls}; -export {config}; -export {inject}; -export {serialization}; -export {layers}; diff --git a/core/blockly_options.ts b/core/blockly_options.ts index e3ed0b912..dd18dbfee 100644 --- a/core/blockly_options.ts +++ b/core/blockly_options.ts @@ -6,9 +6,9 @@ // Former goog.module ID: Blockly.BlocklyOptions -import type {Theme, ITheme} from './theme.js'; -import type {WorkspaceSvg} from './workspace_svg.js'; +import type {ITheme, Theme} from './theme.js'; import type {ToolboxDefinition} from './utils/toolbox.js'; +import type {WorkspaceSvg} from './workspace_svg.js'; /** * Blockly options. diff --git a/core/browser_events.ts b/core/browser_events.ts index 54fec307e..8176fe10f 100644 --- a/core/browser_events.ts +++ b/core/browser_events.ts @@ -6,6 +6,10 @@ // Former goog.module ID: Blockly.browserEvents +// Theoretically we could figure out a way to type the event params correctly, +// but it's not high priority. +/* eslint-disable @typescript-eslint/no-unsafe-function-type */ + import * as Touch from './touch.js'; import * as userAgent from './utils/useragent.js'; @@ -47,7 +51,7 @@ const PAGE_MODE_MULTIPLIER = 125; export function conditionalBind( node: EventTarget, name: string, - thisObject: Object | null, + thisObject: object | null, func: Function, opt_noCaptureIdentifier?: boolean, ): Data { @@ -96,7 +100,7 @@ export function conditionalBind( export function bind( node: EventTarget, name: string, - thisObject: Object | null, + thisObject: object | null, func: Function, ): Data { /** diff --git a/core/bubbles.ts b/core/bubbles.ts index 0c61741f9..a49c2ae35 100644 --- a/core/bubbles.ts +++ b/core/bubbles.ts @@ -5,8 +5,8 @@ */ import {Bubble} from './bubbles/bubble.js'; +import {MiniWorkspaceBubble} from './bubbles/mini_workspace_bubble.js'; import {TextBubble} from './bubbles/text_bubble.js'; import {TextInputBubble} from './bubbles/textinput_bubble.js'; -import {MiniWorkspaceBubble} from './bubbles/mini_workspace_bubble.js'; -export {Bubble, TextBubble, TextInputBubble, MiniWorkspaceBubble}; +export {Bubble, MiniWorkspaceBubble, TextBubble, TextInputBubble}; diff --git a/core/bubbles/bubble.ts b/core/bubbles/bubble.ts index 35b9e7dde..bac94dbc8 100644 --- a/core/bubbles/bubble.ts +++ b/core/bubbles/bubble.ts @@ -4,21 +4,21 @@ * SPDX-License-Identifier: Apache-2.0 */ +import {ISelectable} from '../blockly.js'; import * as browserEvents from '../browser_events.js'; +import * as common from '../common.js'; import {BubbleDragStrategy} from '../dragging/bubble_drag_strategy.js'; import {IBubble} from '../interfaces/i_bubble.js'; import {ContainerRegion} from '../metrics_manager.js'; import {Scrollbar} from '../scrollbar.js'; import {Coordinate} from '../utils/coordinate.js'; import * as dom from '../utils/dom.js'; +import * as idGenerator from '../utils/idgenerator.js'; import * as math from '../utils/math.js'; import {Rect} from '../utils/rect.js'; import {Size} from '../utils/size.js'; import {Svg} from '../utils/svg.js'; import {WorkspaceSvg} from '../workspace_svg.js'; -import * as common from '../common.js'; -import {ISelectable} from '../blockly.js'; -import * as idGenerator from '../utils/idgenerator.js'; /** * The abstract pop-up bubble class. This creates a UI that looks like a speech @@ -212,9 +212,10 @@ export abstract class Bubble implements IBubble, ISelectable { this.background.setAttribute('fill', colour); } - /** Passes the pointer event off to the gesture system. */ + /** Brings the bubble to the front and passes the pointer event off to the gesture system. */ private onMouseDown(e: PointerEvent) { this.workspace.getGesture(e)?.handleBubbleStart(e, this); + this.bringToFront(); common.setSelected(this); } diff --git a/core/bubbles/mini_workspace_bubble.ts b/core/bubbles/mini_workspace_bubble.ts index 74317d57b..f4ad96c8c 100644 --- a/core/bubbles/mini_workspace_bubble.ts +++ b/core/bubbles/mini_workspace_bubble.ts @@ -4,16 +4,16 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {Abstract as AbstractEvent} from '../events/events_abstract.js'; import type {BlocklyOptions} from '../blockly_options.js'; -import {Bubble} from './bubble.js'; +import {Abstract as AbstractEvent} from '../events/events_abstract.js'; +import {Options} from '../options.js'; import {Coordinate} from '../utils/coordinate.js'; import * as dom from '../utils/dom.js'; -import {Options} from '../options.js'; -import {Svg} from '../utils/svg.js'; import type {Rect} from '../utils/rect.js'; import {Size} from '../utils/size.js'; +import {Svg} from '../utils/svg.js'; import type {WorkspaceSvg} from '../workspace_svg.js'; +import {Bubble} from './bubble.js'; /** * A bubble that contains a mini-workspace which can hold arbitrary blocks. diff --git a/core/bubbles/text_bubble.ts b/core/bubbles/text_bubble.ts index 020ab4f2e..7ac5fa029 100644 --- a/core/bubbles/text_bubble.ts +++ b/core/bubbles/text_bubble.ts @@ -4,13 +4,13 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {Bubble} from './bubble.js'; import {Coordinate} from '../utils/coordinate.js'; import * as dom from '../utils/dom.js'; import {Rect} from '../utils/rect.js'; import {Size} from '../utils/size.js'; import {Svg} from '../utils/svg.js'; import {WorkspaceSvg} from '../workspace_svg.js'; +import {Bubble} from './bubble.js'; /** * A bubble that displays non-editable text. Used by the warning icon. diff --git a/core/bubbles/textinput_bubble.ts b/core/bubbles/textinput_bubble.ts index d7d1f5ae7..675dbb539 100644 --- a/core/bubbles/textinput_bubble.ts +++ b/core/bubbles/textinput_bubble.ts @@ -4,16 +4,16 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {Bubble} from './bubble.js'; -import {Coordinate} from '../utils/coordinate.js'; import * as Css from '../css.js'; +import * as touch from '../touch.js'; +import {browserEvents} from '../utils.js'; +import {Coordinate} from '../utils/coordinate.js'; import * as dom from '../utils/dom.js'; import {Rect} from '../utils/rect.js'; import {Size} from '../utils/size.js'; import {Svg} from '../utils/svg.js'; -import * as touch from '../touch.js'; import {WorkspaceSvg} from '../workspace_svg.js'; -import {browserEvents} from '../utils.js'; +import {Bubble} from './bubble.js'; /** * A bubble that displays editable text. It can also be resized by the user. diff --git a/core/bump_objects.ts b/core/bump_objects.ts index f9495b3d8..2aae257dd 100644 --- a/core/bump_objects.ts +++ b/core/bump_objects.ts @@ -13,7 +13,8 @@ import type {BlockMove} from './events/events_block_move.js'; import type {CommentCreate} from './events/events_comment_create.js'; import type {CommentMove} from './events/events_comment_move.js'; import type {CommentResize} from './events/events_comment_resize.js'; -import type {ViewportChange} from './events/events_viewport.js'; +import {isViewportChange} from './events/predicates.js'; +import {BUMP_EVENTS, EventType} from './events/type.js'; import * as eventUtils from './events/utils.js'; import type {IBoundedElement} from './interfaces/i_bounded_element.js'; import type {ContainerRegion} from './metrics_manager.js'; @@ -99,7 +100,7 @@ export function bumpIntoBoundsHandler( return; } - if (eventUtils.BUMP_EVENTS.includes(e.type ?? '')) { + if (BUMP_EVENTS.includes(e.type ?? '')) { const scrollMetricsInWsCoords = metricsManager.getScrollMetrics(true); // Triggered by move/create event @@ -127,13 +128,8 @@ export function bumpIntoBoundsHandler( ); } eventUtils.setGroup(existingGroup); - } else if (e.type === eventUtils.VIEWPORT_CHANGE) { - const viewportEvent = e as ViewportChange; - if ( - viewportEvent.scale && - viewportEvent.oldScale && - viewportEvent.scale > viewportEvent.oldScale - ) { + } else if (isViewportChange(e)) { + if (e.scale && e.oldScale && e.scale > e.oldScale) { bumpTopObjectsIntoBounds(workspace); } } @@ -155,16 +151,16 @@ function extractObjectFromEvent( ): IBoundedElement | null { let object = null; switch (e.type) { - case eventUtils.BLOCK_CREATE: - case eventUtils.BLOCK_MOVE: + case EventType.BLOCK_CREATE: + case EventType.BLOCK_MOVE: object = workspace.getBlockById((e as BlockCreate | BlockMove).blockId!); if (object) { object = object.getRootBlock(); } break; - case eventUtils.COMMENT_CREATE: - case eventUtils.COMMENT_MOVE: - case eventUtils.COMMENT_RESIZE: + case EventType.COMMENT_CREATE: + case EventType.COMMENT_MOVE: + case EventType.COMMENT_RESIZE: object = workspace.getCommentById( (e as CommentCreate | CommentMove | CommentResize).commentId!, ) as RenderedWorkspaceComment; diff --git a/core/clipboard.ts b/core/clipboard.ts index ed574d112..62e23fd24 100644 --- a/core/clipboard.ts +++ b/core/clipboard.ts @@ -6,12 +6,12 @@ // Former goog.module ID: Blockly.clipboard -import type {ICopyData, ICopyable} from './interfaces/i_copyable.js'; import {BlockPaster} from './clipboard/block_paster.js'; -import * as globalRegistry from './registry.js'; -import {WorkspaceSvg} from './workspace_svg.js'; import * as registry from './clipboard/registry.js'; +import type {ICopyData, ICopyable} from './interfaces/i_copyable.js'; +import * as globalRegistry from './registry.js'; import {Coordinate} from './utils/coordinate.js'; +import {WorkspaceSvg} from './workspace_svg.js'; /** Metadata about the object that is currently on the clipboard. */ let stashedCopyData: ICopyData | null = null; diff --git a/core/clipboard/block_paster.ts b/core/clipboard/block_paster.ts index f82adf2b3..08ff220ee 100644 --- a/core/clipboard/block_paster.ts +++ b/core/clipboard/block_paster.ts @@ -5,15 +5,16 @@ */ import {BlockSvg} from '../block_svg.js'; -import * as registry from './registry.js'; +import * as common from '../common.js'; +import {config} from '../config.js'; +import {EventType} from '../events/type.js'; +import * as eventUtils from '../events/utils.js'; import {ICopyData} from '../interfaces/i_copyable.js'; import {IPaster} from '../interfaces/i_paster.js'; import {State, append} from '../serialization/blocks.js'; import {Coordinate} from '../utils/coordinate.js'; import {WorkspaceSvg} from '../workspace_svg.js'; -import * as eventUtils from '../events/utils.js'; -import {config} from '../config.js'; -import * as common from '../common.js'; +import * as registry from './registry.js'; export class BlockPaster implements IPaster { static TYPE = 'block'; @@ -52,7 +53,7 @@ export class BlockPaster implements IPaster { if (!block) return block; if (eventUtils.isEnabled() && !block.isShadow()) { - eventUtils.fire(new (eventUtils.get(eventUtils.BLOCK_CREATE))(block)); + eventUtils.fire(new (eventUtils.get(EventType.BLOCK_CREATE))(block)); } common.setSelected(block); return block; diff --git a/core/clipboard/workspace_comment_paster.ts b/core/clipboard/workspace_comment_paster.ts index c7e5eed68..fdfbf0a84 100644 --- a/core/clipboard/workspace_comment_paster.ts +++ b/core/clipboard/workspace_comment_paster.ts @@ -4,15 +4,16 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {IPaster} from '../interfaces/i_paster.js'; +import {RenderedWorkspaceComment} from '../comments/rendered_workspace_comment.js'; +import * as common from '../common.js'; +import {EventType} from '../events/type.js'; +import * as eventUtils from '../events/utils.js'; import {ICopyData} from '../interfaces/i_copyable.js'; +import {IPaster} from '../interfaces/i_paster.js'; +import * as commentSerialiation from '../serialization/workspace_comments.js'; import {Coordinate} from '../utils/coordinate.js'; import {WorkspaceSvg} from '../workspace_svg.js'; import * as registry from './registry.js'; -import * as commentSerialiation from '../serialization/workspace_comments.js'; -import * as eventUtils from '../events/utils.js'; -import * as common from '../common.js'; -import {RenderedWorkspaceComment} from '../comments/rendered_workspace_comment.js'; export class WorkspaceCommentPaster implements IPaster @@ -46,7 +47,7 @@ export class WorkspaceCommentPaster if (!comment) return null; if (eventUtils.isEnabled()) { - eventUtils.fire(new (eventUtils.get(eventUtils.COMMENT_CREATE))(comment)); + eventUtils.fire(new (eventUtils.get(EventType.COMMENT_CREATE))(comment)); } common.setSelected(comment); return comment; diff --git a/core/comments.ts b/core/comments.ts index 368db0e77..ee8591987 100644 --- a/core/comments.ts +++ b/core/comments.ts @@ -5,5 +5,5 @@ */ export {CommentView} from './comments/comment_view.js'; -export {WorkspaceComment} from './comments/workspace_comment.js'; export {RenderedWorkspaceComment} from './comments/rendered_workspace_comment.js'; +export {WorkspaceComment} from './comments/workspace_comment.js'; diff --git a/core/comments/comment_view.ts b/core/comments/comment_view.ts index bda2b9762..72f72fa38 100644 --- a/core/comments/comment_view.ts +++ b/core/comments/comment_view.ts @@ -4,16 +4,16 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {IRenderedElement} from '../interfaces/i_rendered_element.js'; -import {WorkspaceSvg} from '../workspace_svg.js'; -import * as dom from '../utils/dom.js'; -import {Svg} from '../utils/svg.js'; -import * as layers from '../layers.js'; -import * as css from '../css.js'; -import {Coordinate} from '../utils/coordinate.js'; -import {Size} from '../utils/size.js'; import * as browserEvents from '../browser_events.js'; +import * as css from '../css.js'; +import {IRenderedElement} from '../interfaces/i_rendered_element.js'; +import * as layers from '../layers.js'; import * as touch from '../touch.js'; +import {Coordinate} from '../utils/coordinate.js'; +import * as dom from '../utils/dom.js'; +import {Size} from '../utils/size.js'; +import {Svg} from '../utils/svg.js'; +import {WorkspaceSvg} from '../workspace_svg.js'; export class CommentView implements IRenderedElement { /** The root group element of the comment view. */ @@ -827,7 +827,6 @@ css.register(` } .blocklyCommentTopbarBackground { - cursor: grab; fill: var(--commentBorderColour); height: 24px; } diff --git a/core/comments/rendered_workspace_comment.ts b/core/comments/rendered_workspace_comment.ts index 79caf6a1d..ff2133574 100644 --- a/core/comments/rendered_workspace_comment.ts +++ b/core/comments/rendered_workspace_comment.ts @@ -4,30 +4,31 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {WorkspaceComment} from './workspace_comment.js'; -import {WorkspaceSvg} from '../workspace_svg.js'; -import {CommentView} from './comment_view.js'; -import {Coordinate} from '../utils/coordinate.js'; -import {Rect} from '../utils/rect.js'; -import {Size} from '../utils/size.js'; -import {IBoundedElement} from '../interfaces/i_bounded_element.js'; -import {IRenderedElement} from '../interfaces/i_rendered_element.js'; -import * as dom from '../utils/dom.js'; -import {IDraggable} from '../interfaces/i_draggable.js'; -import {CommentDragStrategy} from '../dragging/comment_drag_strategy.js'; import * as browserEvents from '../browser_events.js'; -import * as common from '../common.js'; -import {ISelectable} from '../interfaces/i_selectable.js'; -import {IDeletable} from '../interfaces/i_deletable.js'; -import {ICopyable} from '../interfaces/i_copyable.js'; -import * as commentSerialization from '../serialization/workspace_comments.js'; import { - WorkspaceCommentPaster, WorkspaceCommentCopyData, + WorkspaceCommentPaster, } from '../clipboard/workspace_comment_paster.js'; -import {IContextMenu} from '../interfaces/i_contextmenu.js'; +import * as common from '../common.js'; import * as contextMenu from '../contextmenu.js'; import {ContextMenuRegistry} from '../contextmenu_registry.js'; +import {CommentDragStrategy} from '../dragging/comment_drag_strategy.js'; +import {IBoundedElement} from '../interfaces/i_bounded_element.js'; +import {IContextMenu} from '../interfaces/i_contextmenu.js'; +import {ICopyable} from '../interfaces/i_copyable.js'; +import {IDeletable} from '../interfaces/i_deletable.js'; +import {IDraggable} from '../interfaces/i_draggable.js'; +import {IRenderedElement} from '../interfaces/i_rendered_element.js'; +import {ISelectable} from '../interfaces/i_selectable.js'; +import * as layers from '../layers.js'; +import * as commentSerialization from '../serialization/workspace_comments.js'; +import {Coordinate} from '../utils/coordinate.js'; +import * as dom from '../utils/dom.js'; +import {Rect} from '../utils/rect.js'; +import {Size} from '../utils/size.js'; +import {WorkspaceSvg} from '../workspace_svg.js'; +import {CommentView} from './comment_view.js'; +import {WorkspaceComment} from './workspace_comment.js'; export class RenderedWorkspaceComment extends WorkspaceComment @@ -208,6 +209,7 @@ export class RenderedWorkspaceComment const gesture = this.workspace.getGesture(e); if (gesture) { gesture.handleCommentStart(e, this); + this.workspace.getLayerManager()?.append(this, layers.BLOCK); common.setSelected(this); } } diff --git a/core/comments/workspace_comment.ts b/core/comments/workspace_comment.ts index 0764b5168..bda77f28c 100644 --- a/core/comments/workspace_comment.ts +++ b/core/comments/workspace_comment.ts @@ -4,13 +4,14 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {Workspace} from '../workspace.js'; -import {Size} from '../utils/size.js'; -import {Coordinate} from '../utils/coordinate.js'; -import * as idGenerator from '../utils/idgenerator.js'; -import * as eventUtils from '../events/utils.js'; import {CommentMove} from '../events/events_comment_move.js'; import {CommentResize} from '../events/events_comment_resize.js'; +import {EventType} from '../events/type.js'; +import * as eventUtils from '../events/utils.js'; +import {Coordinate} from '../utils/coordinate.js'; +import * as idGenerator from '../utils/idgenerator.js'; +import {Size} from '../utils/size.js'; +import {Workspace} from '../workspace.js'; export class WorkspaceComment { /** The unique identifier for this comment. */ @@ -63,13 +64,13 @@ export class WorkspaceComment { private fireCreateEvent() { if (eventUtils.isEnabled()) { - eventUtils.fire(new (eventUtils.get(eventUtils.COMMENT_CREATE))(this)); + eventUtils.fire(new (eventUtils.get(EventType.COMMENT_CREATE))(this)); } } private fireDeleteEvent() { if (eventUtils.isEnabled()) { - eventUtils.fire(new (eventUtils.get(eventUtils.COMMENT_DELETE))(this)); + eventUtils.fire(new (eventUtils.get(EventType.COMMENT_DELETE))(this)); } } @@ -77,7 +78,7 @@ export class WorkspaceComment { private fireChangeEvent(oldText: string, newText: string) { if (eventUtils.isEnabled()) { eventUtils.fire( - new (eventUtils.get(eventUtils.COMMENT_CHANGE))(this, oldText, newText), + new (eventUtils.get(EventType.COMMENT_CHANGE))(this, oldText, newText), ); } } @@ -86,7 +87,7 @@ export class WorkspaceComment { private fireCollapseEvent(newCollapsed: boolean) { if (eventUtils.isEnabled()) { eventUtils.fire( - new (eventUtils.get(eventUtils.COMMENT_COLLAPSE))(this, newCollapsed), + new (eventUtils.get(EventType.COMMENT_COLLAPSE))(this, newCollapsed), ); } } @@ -105,7 +106,7 @@ export class WorkspaceComment { /** Sets the comment's size in workspace units. */ setSize(size: Size) { - const event = new (eventUtils.get(eventUtils.COMMENT_RESIZE))( + const event = new (eventUtils.get(EventType.COMMENT_RESIZE))( this, ) as CommentResize; @@ -196,7 +197,7 @@ export class WorkspaceComment { /** Moves the comment to the given location in workspace coordinates. */ moveTo(location: Coordinate, reason?: string[] | undefined) { - const event = new (eventUtils.get(eventUtils.COMMENT_MOVE))( + const event = new (eventUtils.get(EventType.COMMENT_MOVE))( this, ) as CommentMove; if (reason) event.setReason(reason); diff --git a/core/common.ts b/core/common.ts index fba960a5b..bc31bf17e 100644 --- a/core/common.ts +++ b/core/common.ts @@ -6,14 +6,14 @@ // Former goog.module ID: Blockly.common -/* eslint-disable-next-line no-unused-vars */ import type {Block} from './block.js'; import {ISelectable} from './blockly.js'; import {BlockDefinition, Blocks} from './blocks.js'; import type {Connection} from './connection.js'; +import {EventType} from './events/type.js'; +import * as eventUtils from './events/utils.js'; import type {Workspace} from './workspace.js'; import type {WorkspaceSvg} from './workspace_svg.js'; -import * as eventUtils from './events/utils.js'; /** Database of all workspaces. */ const WorkspaceDB_ = Object.create(null); @@ -108,7 +108,7 @@ export function getSelected(): ISelectable | null { export function setSelected(newSelection: ISelectable | null) { if (selected === newSelection) return; - const event = new (eventUtils.get(eventUtils.SELECTED))( + const event = new (eventUtils.get(EventType.SELECTED))( selected?.id ?? null, newSelection?.id ?? null, newSelection?.workspace.id ?? selected?.workspace.id ?? '', diff --git a/core/component_manager.ts b/core/component_manager.ts index b9654c94e..fb89c38ae 100644 --- a/core/component_manager.ts +++ b/core/component_manager.ts @@ -224,6 +224,16 @@ export class ComponentManager { } export namespace ComponentManager { + export enum ComponentWeight { + // The toolbox weight is lower (higher precedence) than the flyout, so that + // if both are under the pointer, the toolbox takes precedence even though + // the flyout's drag target area is large enough to include the toolbox. + TOOLBOX_WEIGHT = 0, + FLYOUT_WEIGHT = 1, + TRASHCAN_WEIGHT = 2, + ZOOM_CONTROLS_WEIGHT = 3, + } + /** An object storing component information. */ export interface ComponentDatum { component: IComponent; @@ -232,4 +242,6 @@ export namespace ComponentManager { } } +export type ComponentWeight = ComponentManager.ComponentWeight; +export const ComponentWeight = ComponentManager.ComponentWeight; export type ComponentDatum = ComponentManager.ComponentDatum; diff --git a/core/connection.ts b/core/connection.ts index 1dd8dc1ea..93caf5bcf 100644 --- a/core/connection.ts +++ b/core/connection.ts @@ -14,6 +14,7 @@ import type {Block} from './block.js'; import {ConnectionType} from './connection_type.js'; import type {BlockMove} from './events/events_block_move.js'; +import {EventType} from './events/type.js'; import * as eventUtils from './events/utils.js'; import type {Input} from './inputs/input.js'; import type {IASTNodeLocationWithBlock} from './interfaces/i_ast_node_location_with_block.js'; @@ -114,7 +115,7 @@ export class Connection implements IASTNodeLocationWithBlock { // Connect the new connection to the parent. let event; if (eventUtils.isEnabled()) { - event = new (eventUtils.get(eventUtils.BLOCK_MOVE))( + event = new (eventUtils.get(EventType.BLOCK_MOVE))( childBlock, ) as BlockMove; event.setReason(['connect']); @@ -281,7 +282,7 @@ export class Connection implements IASTNodeLocationWithBlock { let event; if (eventUtils.isEnabled()) { - event = new (eventUtils.get(eventUtils.BLOCK_MOVE))( + event = new (eventUtils.get(EventType.BLOCK_MOVE))( childConnection.getSourceBlock(), ) as BlockMove; event.setReason(['disconnect']); diff --git a/core/contextmenu.ts b/core/contextmenu.ts index e469c4335..b49dcba51 100644 --- a/core/contextmenu.ts +++ b/core/contextmenu.ts @@ -9,23 +9,24 @@ import type {Block} from './block.js'; import type {BlockSvg} from './block_svg.js'; import * as browserEvents from './browser_events.js'; +import * as common from './common.js'; import {config} from './config.js'; -import * as dom from './utils/dom.js'; import type { ContextMenuOption, LegacyContextMenuOption, } from './contextmenu_registry.js'; +import {EventType} from './events/type.js'; import * as eventUtils from './events/utils.js'; import {Menu} from './menu.js'; import {MenuItem} from './menuitem.js'; -import * as aria from './utils/aria.js'; -import {Rect} from './utils/rect.js'; import * as serializationBlocks from './serialization/blocks.js'; +import * as aria from './utils/aria.js'; +import * as dom from './utils/dom.js'; +import {Rect} from './utils/rect.js'; import * as svgMath from './utils/svg_math.js'; import * as WidgetDiv from './widgetdiv.js'; import type {WorkspaceSvg} from './workspace_svg.js'; import * as Xml from './xml.js'; -import * as common from './common.js'; /** * Which block is the context menu attached to? @@ -260,7 +261,7 @@ export function callbackFactory( eventUtils.enable(); } if (eventUtils.isEnabled() && !newBlock.isShadow()) { - eventUtils.fire(new (eventUtils.get(eventUtils.BLOCK_CREATE))(newBlock)); + eventUtils.fire(new (eventUtils.get(EventType.BLOCK_CREATE))(newBlock)); } common.setSelected(newBlock); return newBlock; diff --git a/core/contextmenu_items.ts b/core/contextmenu_items.ts index ec98d7e83..04b94eed7 100644 --- a/core/contextmenu_items.ts +++ b/core/contextmenu_items.ts @@ -9,12 +9,13 @@ import type {BlockSvg} from './block_svg.js'; import * as clipboard from './clipboard.js'; import {RenderedWorkspaceComment} from './comments/rendered_workspace_comment.js'; +import * as common from './common.js'; +import {MANUALLY_DISABLED} from './constants.js'; import { ContextMenuRegistry, RegistryItem, Scope, } from './contextmenu_registry.js'; -import {MANUALLY_DISABLED} from './constants.js'; import * as dialog from './dialog.js'; import * as Events from './events/events.js'; import * as eventUtils from './events/utils.js'; @@ -23,7 +24,6 @@ import {Msg} from './msg.js'; import {StatementInput} from './renderers/zelos/zelos.js'; import {Coordinate} from './utils/coordinate.js'; import type {WorkspaceSvg} from './workspace_svg.js'; -import * as common from './common.js'; /** * Option to undo previous action. diff --git a/core/delete_area.ts b/core/delete_area.ts index 4967927c4..405084db9 100644 --- a/core/delete_area.ts +++ b/core/delete_area.ts @@ -14,9 +14,9 @@ import {BlockSvg} from './block_svg.js'; import {DragTarget} from './drag_target.js'; +import {isDeletable} from './interfaces/i_deletable.js'; import type {IDeleteArea} from './interfaces/i_delete_area.js'; import type {IDraggable} from './interfaces/i_draggable.js'; -import {isDeletable} from './interfaces/i_deletable.js'; /** * Abstract class for a component that can delete a block or bubble that is diff --git a/core/dragging.ts b/core/dragging.ts index a7e46fc27..4ba85c49f 100644 --- a/core/dragging.ts +++ b/core/dragging.ts @@ -4,9 +4,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {Dragger} from './dragging/dragger.js'; import {BlockDragStrategy} from './dragging/block_drag_strategy.js'; import {BubbleDragStrategy} from './dragging/bubble_drag_strategy.js'; import {CommentDragStrategy} from './dragging/comment_drag_strategy.js'; +import {Dragger} from './dragging/dragger.js'; -export {Dragger, BlockDragStrategy, BubbleDragStrategy, CommentDragStrategy}; +export {BlockDragStrategy, BubbleDragStrategy, CommentDragStrategy, Dragger}; diff --git a/core/dragging/block_drag_strategy.ts b/core/dragging/block_drag_strategy.ts index dc136d814..c3be97da6 100644 --- a/core/dragging/block_drag_strategy.ts +++ b/core/dragging/block_drag_strategy.ts @@ -4,24 +4,25 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {WorkspaceSvg} from '../workspace_svg.js'; -import {IDragStrategy} from '../interfaces/i_draggable.js'; -import {Coordinate} from '../utils.js'; -import * as eventUtils from '../events/utils.js'; -import {BlockSvg} from '../block_svg.js'; -import {RenderedConnection} from '../rendered_connection.js'; -import * as dom from '../utils/dom.js'; -import * as blockAnimation from '../block_animations.js'; -import {ConnectionType} from '../connection_type.js'; -import * as bumpObjects from '../bump_objects.js'; -import * as registry from '../registry.js'; -import {IConnectionPreviewer} from '../interfaces/i_connection_previewer.js'; -import {Connection} from '../connection.js'; import type {Block} from '../block.js'; +import * as blockAnimation from '../block_animations.js'; +import {BlockSvg} from '../block_svg.js'; +import * as bumpObjects from '../bump_objects.js'; import {config} from '../config.js'; +import {Connection} from '../connection.js'; +import {ConnectionType} from '../connection_type.js'; import type {BlockMove} from '../events/events_block_move.js'; -import {finishQueuedRenders} from '../render_management.js'; +import {EventType} from '../events/type.js'; +import * as eventUtils from '../events/utils.js'; +import {IConnectionPreviewer} from '../interfaces/i_connection_previewer.js'; +import {IDragStrategy} from '../interfaces/i_draggable.js'; import * as layers from '../layers.js'; +import * as registry from '../registry.js'; +import {finishQueuedRenders} from '../render_management.js'; +import {RenderedConnection} from '../rendered_connection.js'; +import {Coordinate} from '../utils.js'; +import * as dom from '../utils/dom.js'; +import {WorkspaceSvg} from '../workspace_svg.js'; /** Represents a nearby valid connection. */ interface ConnectionCandidate { @@ -61,6 +62,9 @@ export class BlockDragStrategy implements IDragStrategy { */ private dragOffset = new Coordinate(0, 0); + /** Was there already an event group in progress when the drag started? */ + private inGroup: boolean = false; + constructor(private block: BlockSvg) { this.workspace = block.workspace; } @@ -92,7 +96,8 @@ export class BlockDragStrategy implements IDragStrategy { } this.dragging = true; - if (!eventUtils.getGroup()) { + this.inGroup = !!eventUtils.getGroup(); + if (!this.inGroup) { eventUtils.setGroup(true); } this.fireDragStartEvent(); @@ -173,7 +178,7 @@ export class BlockDragStrategy implements IDragStrategy { /** Fire a UI event at the start of a block drag. */ private fireDragStartEvent() { - const event = new (eventUtils.get(eventUtils.BLOCK_DRAG))( + const event = new (eventUtils.get(EventType.BLOCK_DRAG))( this.block, true, this.block.getDescendants(false), @@ -183,7 +188,7 @@ export class BlockDragStrategy implements IDragStrategy { /** Fire a UI event at the end of a block drag. */ private fireDragEndEvent() { - const event = new (eventUtils.get(eventUtils.BLOCK_DRAG))( + const event = new (eventUtils.get(EventType.BLOCK_DRAG))( this.block, false, this.block.getDescendants(false), @@ -194,7 +199,7 @@ export class BlockDragStrategy implements IDragStrategy { /** Fire a move event at the end of a block drag. */ private fireMoveEvent() { if (this.block.isDeadOrDying()) return; - const event = new (eventUtils.get(eventUtils.BLOCK_MOVE))( + const event = new (eventUtils.get(EventType.BLOCK_MOVE))( this.block, ) as BlockMove; event.setReason(['drag']); @@ -389,7 +394,9 @@ export class BlockDragStrategy implements IDragStrategy { this.connectionPreviewer!.dispose(); this.workspace.setResizesEnabled(true); - eventUtils.setGroup(false); + if (!this.inGroup) { + eventUtils.setGroup(false); + } } /** Connects the given candidate connections. */ diff --git a/core/dragging/bubble_drag_strategy.ts b/core/dragging/bubble_drag_strategy.ts index 7ffccddc1..c2a5c58f4 100644 --- a/core/dragging/bubble_drag_strategy.ts +++ b/core/dragging/bubble_drag_strategy.ts @@ -4,15 +4,18 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {IDragStrategy} from '../interfaces/i_draggable.js'; -import {Coordinate} from '../utils.js'; -import * as eventUtils from '../events/utils.js'; import {IBubble, WorkspaceSvg} from '../blockly.js'; +import * as eventUtils from '../events/utils.js'; +import {IDragStrategy} from '../interfaces/i_draggable.js'; import * as layers from '../layers.js'; +import {Coordinate} from '../utils.js'; export class BubbleDragStrategy implements IDragStrategy { private startLoc: Coordinate | null = null; + /** Was there already an event group in progress when the drag started? */ + private inGroup: boolean = false; + constructor( private bubble: IBubble, private workspace: WorkspaceSvg, @@ -23,13 +26,16 @@ export class BubbleDragStrategy implements IDragStrategy { } startDrag(): void { - if (!eventUtils.getGroup()) { + this.inGroup = !!eventUtils.getGroup(); + if (!this.inGroup) { eventUtils.setGroup(true); } this.startLoc = this.bubble.getRelativeToSurfaceXY(); this.workspace.setResizesEnabled(false); this.workspace.getLayerManager()?.moveToDragLayer(this.bubble); - this.bubble.setDragging && this.bubble.setDragging(true); + if (this.bubble.setDragging) { + this.bubble.setDragging(true); + } } drag(newLoc: Coordinate): void { @@ -38,7 +44,9 @@ export class BubbleDragStrategy implements IDragStrategy { endDrag(): void { this.workspace.setResizesEnabled(true); - eventUtils.setGroup(false); + if (!this.inGroup) { + eventUtils.setGroup(false); + } this.workspace .getLayerManager() diff --git a/core/dragging/comment_drag_strategy.ts b/core/dragging/comment_drag_strategy.ts index 2ad5fa144..bc48c0e6c 100644 --- a/core/dragging/comment_drag_strategy.ts +++ b/core/dragging/comment_drag_strategy.ts @@ -4,19 +4,23 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {IDragStrategy} from '../interfaces/i_draggable.js'; -import {Coordinate} from '../utils.js'; -import * as eventUtils from '../events/utils.js'; -import * as layers from '../layers.js'; import {RenderedWorkspaceComment} from '../comments.js'; -import {WorkspaceSvg} from '../workspace_svg.js'; import {CommentMove} from '../events/events_comment_move.js'; +import {EventType} from '../events/type.js'; +import * as eventUtils from '../events/utils.js'; +import {IDragStrategy} from '../interfaces/i_draggable.js'; +import * as layers from '../layers.js'; +import {Coordinate} from '../utils.js'; +import {WorkspaceSvg} from '../workspace_svg.js'; export class CommentDragStrategy implements IDragStrategy { private startLoc: Coordinate | null = null; private workspace: WorkspaceSvg; + /** Was there already an event group in progress when the drag started? */ + private inGroup: boolean = false; + constructor(private comment: RenderedWorkspaceComment) { this.workspace = comment.workspace; } @@ -26,7 +30,8 @@ export class CommentDragStrategy implements IDragStrategy { } startDrag(): void { - if (!eventUtils.getGroup()) { + this.inGroup = !!eventUtils.getGroup(); + if (!this.inGroup) { eventUtils.setGroup(true); } this.fireDragStartEvent(); @@ -52,12 +57,14 @@ export class CommentDragStrategy implements IDragStrategy { this.comment.snapToGrid(); this.workspace.setResizesEnabled(true); - eventUtils.setGroup(false); + if (!this.inGroup) { + eventUtils.setGroup(false); + } } /** Fire a UI event at the start of a comment drag. */ private fireDragStartEvent() { - const event = new (eventUtils.get(eventUtils.COMMENT_DRAG))( + const event = new (eventUtils.get(EventType.COMMENT_DRAG))( this.comment, true, ); @@ -66,7 +73,7 @@ export class CommentDragStrategy implements IDragStrategy { /** Fire a UI event at the end of a comment drag. */ private fireDragEndEvent() { - const event = new (eventUtils.get(eventUtils.COMMENT_DRAG))( + const event = new (eventUtils.get(EventType.COMMENT_DRAG))( this.comment, false, ); @@ -76,7 +83,7 @@ export class CommentDragStrategy implements IDragStrategy { /** Fire a move event at the end of a comment drag. */ private fireMoveEvent() { if (this.comment.isDeadOrDying()) return; - const event = new (eventUtils.get(eventUtils.COMMENT_MOVE))( + const event = new (eventUtils.get(EventType.COMMENT_MOVE))( this.comment, ) as CommentMove; event.setReason(['drag']); diff --git a/core/dragging/dragger.ts b/core/dragging/dragger.ts index 66d447a6f..8a9ac87c6 100644 --- a/core/dragging/dragger.ts +++ b/core/dragging/dragger.ts @@ -4,18 +4,18 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {IDragTarget} from '../interfaces/i_drag_target.js'; -import {IDeletable, isDeletable} from '../interfaces/i_deletable.js'; -import {IDragger} from '../interfaces/i_dragger.js'; -import {IDraggable} from '../interfaces/i_draggable.js'; -import {Coordinate} from '../utils/coordinate.js'; -import {WorkspaceSvg} from '../workspace_svg.js'; -import {ComponentManager} from '../component_manager.js'; -import {IDeleteArea} from '../interfaces/i_delete_area.js'; -import * as registry from '../registry.js'; -import * as eventUtils from '../events/utils.js'; import * as blockAnimations from '../block_animations.js'; import {BlockSvg} from '../block_svg.js'; +import {ComponentManager} from '../component_manager.js'; +import * as eventUtils from '../events/utils.js'; +import {IDeletable, isDeletable} from '../interfaces/i_deletable.js'; +import {IDeleteArea} from '../interfaces/i_delete_area.js'; +import {IDragTarget} from '../interfaces/i_drag_target.js'; +import {IDraggable} from '../interfaces/i_draggable.js'; +import {IDragger} from '../interfaces/i_dragger.js'; +import * as registry from '../registry.js'; +import {Coordinate} from '../utils/coordinate.js'; +import {WorkspaceSvg} from '../workspace_svg.js'; export class Dragger implements IDragger { protected startLoc: Coordinate; diff --git a/core/dropdowndiv.ts b/core/dropdowndiv.ts index c90661c4e..f9af02ac9 100644 --- a/core/dropdowndiv.ts +++ b/core/dropdowndiv.ts @@ -14,8 +14,8 @@ import type {BlockSvg} from './block_svg.js'; import * as common from './common.js'; -import * as dom from './utils/dom.js'; import type {Field} from './field.js'; +import * as dom from './utils/dom.js'; import * as math from './utils/math.js'; import {Rect} from './utils/rect.js'; import type {Size} from './utils/size.js'; @@ -53,7 +53,7 @@ export const ANIMATION_TIME = 0.25; let animateOutTimer: ReturnType | null = null; /** Callback for when the drop-down is hidden. */ -let onHide: Function | null = null; +let onHide: (() => void) | null = null; /** A class name representing the current owner's workspace renderer. */ let renderedClassName = ''; @@ -202,7 +202,7 @@ export function setColour(backgroundColour: string, borderColour: string) { export function showPositionedByBlock( field: Field, block: BlockSvg, - opt_onHide?: Function, + opt_onHide?: () => void, opt_secondaryYOffset?: number, ): boolean { return showPositionedByRect( @@ -226,7 +226,7 @@ export function showPositionedByBlock( */ export function showPositionedByField( field: Field, - opt_onHide?: Function, + opt_onHide?: () => void, opt_secondaryYOffset?: number, ): boolean { positionToField = true; @@ -278,7 +278,7 @@ function getScaledBboxOfField(field: Field): Rect { function showPositionedByRect( bBox: Rect, field: Field, - opt_onHide?: Function, + opt_onHide?: () => void, opt_secondaryYOffset?: number, ): boolean { // If we can fit it, render below the block. @@ -334,7 +334,7 @@ export function show( primaryY: number, secondaryX: number, secondaryY: number, - opt_onHide?: Function, + opt_onHide?: () => void, ): boolean { owner = newOwner as Field; onHide = opt_onHide || null; diff --git a/core/events/events.ts b/core/events/events.ts index b31cf7dc7..868995653 100644 --- a/core/events/events.ts +++ b/core/events/events.ts @@ -6,154 +6,103 @@ // Former goog.module ID: Blockly.Events -import {Abstract, AbstractEventJson} from './events_abstract.js'; -import {BlockBase, BlockBaseJson} from './events_block_base.js'; -import {BlockChange, BlockChangeJson} from './events_block_change.js'; -import {BlockCreate, BlockCreateJson} from './events_block_create.js'; -import {BlockDelete, BlockDeleteJson} from './events_block_delete.js'; -import {BlockDrag, BlockDragJson} from './events_block_drag.js'; -import { +import {EventType} from './type.js'; + +// Events. +export {Abstract, AbstractEventJson} from './events_abstract.js'; +export {BlockBase, BlockBaseJson} from './events_block_base.js'; +export {BlockChange, BlockChangeJson} from './events_block_change.js'; +export {BlockCreate, BlockCreateJson} from './events_block_create.js'; +export {BlockDelete, BlockDeleteJson} from './events_block_delete.js'; +export {BlockDrag, BlockDragJson} from './events_block_drag.js'; +export { BlockFieldIntermediateChange, BlockFieldIntermediateChangeJson, } from './events_block_field_intermediate_change.js'; -import {BlockMove, BlockMoveJson} from './events_block_move.js'; -import {BubbleOpen, BubbleOpenJson, BubbleType} from './events_bubble_open.js'; -import {Click, ClickJson, ClickTarget} from './events_click.js'; -import {CommentBase, CommentBaseJson} from './events_comment_base.js'; -import {CommentChange, CommentChangeJson} from './events_comment_change.js'; -import {CommentCreate, CommentCreateJson} from './events_comment_create.js'; -import {CommentDelete} from './events_comment_delete.js'; -import {CommentMove, CommentMoveJson} from './events_comment_move.js'; -import {CommentResize, CommentResizeJson} from './events_comment_resize.js'; -import {CommentDrag, CommentDragJson} from './events_comment_drag.js'; -import { +export {BlockMove, BlockMoveJson} from './events_block_move.js'; +export {BubbleOpen, BubbleOpenJson, BubbleType} from './events_bubble_open.js'; +export {Click, ClickJson, ClickTarget} from './events_click.js'; +export {CommentBase, CommentBaseJson} from './events_comment_base.js'; +export {CommentChange, CommentChangeJson} from './events_comment_change.js'; +export { CommentCollapse, CommentCollapseJson, } from './events_comment_collapse.js'; -import {MarkerMove, MarkerMoveJson} from './events_marker_move.js'; -import {Selected, SelectedJson} from './events_selected.js'; -import {ThemeChange, ThemeChangeJson} from './events_theme_change.js'; -import { +export {CommentCreate, CommentCreateJson} from './events_comment_create.js'; +export {CommentDelete} from './events_comment_delete.js'; +export {CommentDrag, CommentDragJson} from './events_comment_drag.js'; +export {CommentMove, CommentMoveJson} from './events_comment_move.js'; +export {CommentResize, CommentResizeJson} from './events_comment_resize.js'; +export {MarkerMove, MarkerMoveJson} from './events_marker_move.js'; +export {Selected, SelectedJson} from './events_selected.js'; +export {ThemeChange, ThemeChangeJson} from './events_theme_change.js'; +export { ToolboxItemSelect, ToolboxItemSelectJson, } from './events_toolbox_item_select.js'; -import {TrashcanOpen, TrashcanOpenJson} from './events_trashcan_open.js'; -import {UiBase} from './events_ui_base.js'; -import {VarBase, VarBaseJson} from './events_var_base.js'; -import {VarCreate, VarCreateJson} from './events_var_create.js'; -import {VarDelete, VarDeleteJson} from './events_var_delete.js'; -import {VarRename, VarRenameJson} from './events_var_rename.js'; -import {ViewportChange, ViewportChangeJson} from './events_viewport.js'; -import * as eventUtils from './utils.js'; -import {FinishedLoading} from './workspace_events.js'; +export {TrashcanOpen, TrashcanOpenJson} from './events_trashcan_open.js'; +export {UiBase} from './events_ui_base.js'; +export {VarBase, VarBaseJson} from './events_var_base.js'; +export {VarCreate, VarCreateJson} from './events_var_create.js'; +export {VarDelete, VarDeleteJson} from './events_var_delete.js'; +export {VarRename, VarRenameJson} from './events_var_rename.js'; +export {ViewportChange, ViewportChangeJson} from './events_viewport.js'; +export {FinishedLoading} from './workspace_events.js'; -// Events. -export {Abstract}; -export {AbstractEventJson}; -export {BubbleOpen}; -export {BubbleOpenJson}; -export {BubbleType}; -export {BlockBase}; -export {BlockBaseJson}; -export {BlockChange}; -export {BlockChangeJson}; -export {BlockCreate}; -export {BlockCreateJson}; -export {BlockDelete}; -export {BlockDeleteJson}; -export {BlockDrag}; -export {BlockDragJson}; -export {BlockFieldIntermediateChange}; -export {BlockFieldIntermediateChangeJson}; -export {BlockMove}; -export {BlockMoveJson}; -export {Click}; -export {ClickJson}; -export {ClickTarget}; -export {CommentBase}; -export {CommentBaseJson}; -export {CommentChange}; -export {CommentChangeJson}; -export {CommentCreate}; -export {CommentCreateJson}; -export {CommentDelete}; -export {CommentMove}; -export {CommentMoveJson}; -export {CommentResize}; -export {CommentResizeJson}; -export {CommentDrag}; -export {CommentDragJson}; -export {CommentCollapse}; -export {CommentCollapseJson}; -export {FinishedLoading}; -export {MarkerMove}; -export {MarkerMoveJson}; -export {Selected}; -export {SelectedJson}; -export {ThemeChange}; -export {ThemeChangeJson}; -export {ToolboxItemSelect}; -export {ToolboxItemSelectJson}; -export {TrashcanOpen}; -export {TrashcanOpenJson}; -export {UiBase}; -export {VarBase}; -export {VarBaseJson}; -export {VarCreate}; -export {VarCreateJson}; -export {VarDelete}; -export {VarDeleteJson}; -export {VarRename}; -export {VarRenameJson}; -export {ViewportChange}; -export {ViewportChangeJson}; +export type {BumpEvent} from './utils.js'; // Event types. -export const BLOCK_CHANGE = eventUtils.BLOCK_CHANGE; -export const BLOCK_CREATE = eventUtils.BLOCK_CREATE; -export const BLOCK_DELETE = eventUtils.BLOCK_DELETE; -export const BLOCK_DRAG = eventUtils.BLOCK_DRAG; -export const BLOCK_MOVE = eventUtils.BLOCK_MOVE; +export const BLOCK_CHANGE = EventType.BLOCK_CHANGE; +export const BLOCK_CREATE = EventType.BLOCK_CREATE; +export const BLOCK_DELETE = EventType.BLOCK_DELETE; +export const BLOCK_DRAG = EventType.BLOCK_DRAG; +export const BLOCK_MOVE = EventType.BLOCK_MOVE; export const BLOCK_FIELD_INTERMEDIATE_CHANGE = - eventUtils.BLOCK_FIELD_INTERMEDIATE_CHANGE; -export const BUBBLE_OPEN = eventUtils.BUBBLE_OPEN; -export type BumpEvent = eventUtils.BumpEvent; -export const BUMP_EVENTS = eventUtils.BUMP_EVENTS; -export const CHANGE = eventUtils.CHANGE; -export const CLICK = eventUtils.CLICK; -export const COMMENT_CHANGE = eventUtils.COMMENT_CHANGE; -export const COMMENT_CREATE = eventUtils.COMMENT_CREATE; -export const COMMENT_DELETE = eventUtils.COMMENT_DELETE; -export const COMMENT_MOVE = eventUtils.COMMENT_MOVE; -export const COMMENT_RESIZE = eventUtils.COMMENT_RESIZE; -export const COMMENT_DRAG = eventUtils.COMMENT_DRAG; -export const CREATE = eventUtils.CREATE; -export const DELETE = eventUtils.DELETE; -export const FINISHED_LOADING = eventUtils.FINISHED_LOADING; -export const MARKER_MOVE = eventUtils.MARKER_MOVE; -export const MOVE = eventUtils.MOVE; -export const SELECTED = eventUtils.SELECTED; -export const THEME_CHANGE = eventUtils.THEME_CHANGE; -export const TOOLBOX_ITEM_SELECT = eventUtils.TOOLBOX_ITEM_SELECT; -export const TRASHCAN_OPEN = eventUtils.TRASHCAN_OPEN; -export const UI = eventUtils.UI; -export const VAR_CREATE = eventUtils.VAR_CREATE; -export const VAR_DELETE = eventUtils.VAR_DELETE; -export const VAR_RENAME = eventUtils.VAR_RENAME; -export const VIEWPORT_CHANGE = eventUtils.VIEWPORT_CHANGE; + EventType.BLOCK_FIELD_INTERMEDIATE_CHANGE; +export const BUBBLE_OPEN = EventType.BUBBLE_OPEN; +/** @deprecated Use BLOCK_CHANGE instead */ +export const CHANGE = EventType.BLOCK_CHANGE; +export const CLICK = EventType.CLICK; +export const COMMENT_CHANGE = EventType.COMMENT_CHANGE; +export const COMMENT_CREATE = EventType.COMMENT_CREATE; +export const COMMENT_DELETE = EventType.COMMENT_DELETE; +export const COMMENT_MOVE = EventType.COMMENT_MOVE; +export const COMMENT_RESIZE = EventType.COMMENT_RESIZE; +export const COMMENT_DRAG = EventType.COMMENT_DRAG; +/** @deprecated Use BLOCK_CREATE instead */ +export const CREATE = EventType.BLOCK_CREATE; +/** @deprecated Use BLOCK_DELETE instead */ +export const DELETE = EventType.BLOCK_DELETE; +export const FINISHED_LOADING = EventType.FINISHED_LOADING; +export const MARKER_MOVE = EventType.MARKER_MOVE; +/** @deprecated Use BLOCK_MOVE instead */ +export const MOVE = EventType.BLOCK_MOVE; +export const SELECTED = EventType.SELECTED; +export const THEME_CHANGE = EventType.THEME_CHANGE; +export const TOOLBOX_ITEM_SELECT = EventType.TOOLBOX_ITEM_SELECT; +export const TRASHCAN_OPEN = EventType.TRASHCAN_OPEN; +export const UI = EventType.UI; +export const VAR_CREATE = EventType.VAR_CREATE; +export const VAR_DELETE = EventType.VAR_DELETE; +export const VAR_RENAME = EventType.VAR_RENAME; +export const VIEWPORT_CHANGE = EventType.VIEWPORT_CHANGE; + +export {BUMP_EVENTS} from './type.js'; // Event utils. -export const clearPendingUndo = eventUtils.clearPendingUndo; -export const disable = eventUtils.disable; -export const enable = eventUtils.enable; -export const filter = eventUtils.filter; -export const fire = eventUtils.fire; -export const fromJson = eventUtils.fromJson; -export const getDescendantIds = eventUtils.getDescendantIds; -export const get = eventUtils.get; -export const getGroup = eventUtils.getGroup; -export const getRecordUndo = eventUtils.getRecordUndo; -export const isEnabled = eventUtils.isEnabled; -export const setGroup = eventUtils.setGroup; -export const setRecordUndo = eventUtils.setRecordUndo; -export const disableOrphans = eventUtils.disableOrphans; +export { + clearPendingUndo, + disable, + disableOrphans, + enable, + filter, + fire, + fromJson, + get, + getDescendantIds, + getGroup, + getRecordUndo, + isEnabled, + setGroup, + setRecordUndo, +} from './utils.js'; diff --git a/core/events/events_abstract.ts b/core/events/events_abstract.ts index 7f06d48e9..e5a77dc7d 100644 --- a/core/events/events_abstract.ts +++ b/core/events/events_abstract.ts @@ -14,8 +14,7 @@ import * as common from '../common.js'; import type {Workspace} from '../workspace.js'; - -import * as eventUtils from './utils.js'; +import {getGroup, getRecordUndo} from './utils.js'; /** * Abstract class for an event. @@ -48,8 +47,8 @@ export abstract class Abstract { type = ''; constructor() { - this.group = eventUtils.getGroup(); - this.recordUndo = eventUtils.getRecordUndo(); + this.group = getGroup(); + this.recordUndo = getRecordUndo(); } /** diff --git a/core/events/events_block_base.ts b/core/events/events_block_base.ts index 350985428..d15b8e439 100644 --- a/core/events/events_block_base.ts +++ b/core/events/events_block_base.ts @@ -13,7 +13,6 @@ import type {Block} from '../block.js'; import type {Workspace} from '../workspace.js'; - import { Abstract as AbstractEvent, AbstractEventJson, diff --git a/core/events/events_block_change.ts b/core/events/events_block_change.ts index 570b7f58e..e71eabb17 100644 --- a/core/events/events_block_change.ts +++ b/core/events/events_block_change.ts @@ -13,15 +13,15 @@ import type {Block} from '../block.js'; import type {BlockSvg} from '../block_svg.js'; +import {MANUALLY_DISABLED} from '../constants.js'; import {IconType} from '../icons/icon_types.js'; import {hasBubble} from '../interfaces/i_has_bubble.js'; -import {MANUALLY_DISABLED} from '../constants.js'; import * as registry from '../registry.js'; import * as utilsXml from '../utils/xml.js'; import {Workspace} from '../workspace.js'; import * as Xml from '../xml.js'; - import {BlockBase, BlockBaseJson} from './events_block_base.js'; +import {EventType} from './type.js'; import * as eventUtils from './utils.js'; /** @@ -29,7 +29,7 @@ import * as eventUtils from './utils.js'; * field values, comments, etc). */ export class BlockChange extends BlockBase { - override type = eventUtils.BLOCK_CHANGE; + override type = EventType.BLOCK_CHANGE; /** * The element that changed; one of 'field', 'comment', 'collapsed', * 'disabled', 'inline', or 'mutation' @@ -256,4 +256,4 @@ export interface BlockChangeJson extends BlockBaseJson { disabledReason?: string; } -registry.register(registry.Type.EVENT, eventUtils.CHANGE, BlockChange); +registry.register(registry.Type.EVENT, EventType.BLOCK_CHANGE, BlockChange); diff --git a/core/events/events_block_create.ts b/core/events/events_block_create.ts index cbabc9332..ca6979454 100644 --- a/core/events/events_block_create.ts +++ b/core/events/events_block_create.ts @@ -15,18 +15,18 @@ import type {Block} from '../block.js'; import * as registry from '../registry.js'; import * as blocks from '../serialization/blocks.js'; import * as utilsXml from '../utils/xml.js'; -import * as Xml from '../xml.js'; - -import {BlockBase, BlockBaseJson} from './events_block_base.js'; -import * as eventUtils from './utils.js'; import {Workspace} from '../workspace.js'; +import * as Xml from '../xml.js'; +import {BlockBase, BlockBaseJson} from './events_block_base.js'; +import {EventType} from './type.js'; +import * as eventUtils from './utils.js'; /** * Notifies listeners when a block (or connected stack of blocks) is * created. */ export class BlockCreate extends BlockBase { - override type = eventUtils.BLOCK_CREATE; + override type = EventType.BLOCK_CREATE; /** The XML representation of the created block(s). */ xml?: Element | DocumentFragment; @@ -182,4 +182,4 @@ export interface BlockCreateJson extends BlockBaseJson { recordUndo?: boolean; } -registry.register(registry.Type.EVENT, eventUtils.CREATE, BlockCreate); +registry.register(registry.Type.EVENT, EventType.BLOCK_CREATE, BlockCreate); diff --git a/core/events/events_block_delete.ts b/core/events/events_block_delete.ts index 3375a78dd..5dd231606 100644 --- a/core/events/events_block_delete.ts +++ b/core/events/events_block_delete.ts @@ -15,11 +15,11 @@ import type {Block} from '../block.js'; import * as registry from '../registry.js'; import * as blocks from '../serialization/blocks.js'; import * as utilsXml from '../utils/xml.js'; -import * as Xml from '../xml.js'; - -import {BlockBase, BlockBaseJson} from './events_block_base.js'; -import * as eventUtils from './utils.js'; import {Workspace} from '../workspace.js'; +import * as Xml from '../xml.js'; +import {BlockBase, BlockBaseJson} from './events_block_base.js'; +import {EventType} from './type.js'; +import * as eventUtils from './utils.js'; /** * Notifies listeners when a block (or connected stack of blocks) is @@ -38,7 +38,7 @@ export class BlockDelete extends BlockBase { /** True if the deleted block was a shadow block, false otherwise. */ wasShadow?: boolean; - override type = eventUtils.BLOCK_DELETE; + override type = EventType.BLOCK_DELETE; /** @param opt_block The deleted block. Undefined for a blank event. */ constructor(opt_block?: Block) { @@ -179,4 +179,4 @@ export interface BlockDeleteJson extends BlockBaseJson { recordUndo?: boolean; } -registry.register(registry.Type.EVENT, eventUtils.DELETE, BlockDelete); +registry.register(registry.Type.EVENT, EventType.BLOCK_DELETE, BlockDelete); diff --git a/core/events/events_block_drag.ts b/core/events/events_block_drag.ts index 3729ab777..4a91c4d11 100644 --- a/core/events/events_block_drag.ts +++ b/core/events/events_block_drag.ts @@ -13,10 +13,10 @@ import type {Block} from '../block.js'; import * as registry from '../registry.js'; +import {Workspace} from '../workspace.js'; import {AbstractEventJson} from './events_abstract.js'; import {UiBase} from './events_ui_base.js'; -import * as eventUtils from './utils.js'; -import {Workspace} from '../workspace.js'; +import {EventType} from './type.js'; /** * Notifies listeners when a block is being manually dragged/dropped. @@ -34,7 +34,7 @@ export class BlockDrag extends UiBase { */ blocks?: Block[]; - override type = eventUtils.BLOCK_DRAG; + override type = EventType.BLOCK_DRAG; /** * @param opt_block The top block in the stack that is being dragged. @@ -113,4 +113,4 @@ export interface BlockDragJson extends AbstractEventJson { blocks?: Block[]; } -registry.register(registry.Type.EVENT, eventUtils.BLOCK_DRAG, BlockDrag); +registry.register(registry.Type.EVENT, EventType.BLOCK_DRAG, BlockDrag); diff --git a/core/events/events_block_field_intermediate_change.ts b/core/events/events_block_field_intermediate_change.ts index 264f910a8..49280cf2b 100644 --- a/core/events/events_block_field_intermediate_change.ts +++ b/core/events/events_block_field_intermediate_change.ts @@ -15,9 +15,8 @@ import type {Block} from '../block.js'; import * as registry from '../registry.js'; import {Workspace} from '../workspace.js'; - import {BlockBase, BlockBaseJson} from './events_block_base.js'; -import * as eventUtils from './utils.js'; +import {EventType} from './type.js'; /** * Notifies listeners when the value of a block's field has changed but the @@ -25,7 +24,7 @@ import * as eventUtils from './utils.js'; * event. */ export class BlockFieldIntermediateChange extends BlockBase { - override type = eventUtils.BLOCK_FIELD_INTERMEDIATE_CHANGE; + override type = EventType.BLOCK_FIELD_INTERMEDIATE_CHANGE; // Intermediate events do not undo or redo. They may be fired frequently while // the field editor widget is open. A separate BLOCK_CHANGE event is fired @@ -162,6 +161,6 @@ export interface BlockFieldIntermediateChangeJson extends BlockBaseJson { registry.register( registry.Type.EVENT, - eventUtils.BLOCK_FIELD_INTERMEDIATE_CHANGE, + EventType.BLOCK_FIELD_INTERMEDIATE_CHANGE, BlockFieldIntermediateChange, ); diff --git a/core/events/events_block_move.ts b/core/events/events_block_move.ts index 6c05ab2af..cd683a777 100644 --- a/core/events/events_block_move.ts +++ b/core/events/events_block_move.ts @@ -15,10 +15,9 @@ import type {Block} from '../block.js'; import {ConnectionType} from '../connection_type.js'; import * as registry from '../registry.js'; import {Coordinate} from '../utils/coordinate.js'; - -import {BlockBase, BlockBaseJson} from './events_block_base.js'; -import * as eventUtils from './utils.js'; import type {Workspace} from '../workspace.js'; +import {BlockBase, BlockBaseJson} from './events_block_base.js'; +import {EventType} from './type.js'; interface BlockLocation { parentId?: string; @@ -31,7 +30,7 @@ interface BlockLocation { * connection to another, or from one location on the workspace to another. */ export class BlockMove extends BlockBase { - override type = eventUtils.BLOCK_MOVE; + override type = EventType.BLOCK_MOVE; /** The ID of the old parent block. Undefined if it was a top-level block. */ oldParentId?: string; @@ -304,4 +303,4 @@ export interface BlockMoveJson extends BlockBaseJson { recordUndo?: boolean; } -registry.register(registry.Type.EVENT, eventUtils.MOVE, BlockMove); +registry.register(registry.Type.EVENT, EventType.BLOCK_MOVE, BlockMove); diff --git a/core/events/events_bubble_open.ts b/core/events/events_bubble_open.ts index 023e16a17..a36bbcd6a 100644 --- a/core/events/events_bubble_open.ts +++ b/core/events/events_bubble_open.ts @@ -9,14 +9,15 @@ * * @class */ + // Former goog.module ID: Blockly.Events.BubbleOpen -import type {AbstractEventJson} from './events_abstract.js'; import type {BlockSvg} from '../block_svg.js'; import * as registry from '../registry.js'; -import {UiBase} from './events_ui_base.js'; -import * as eventUtils from './utils.js'; import type {Workspace} from '../workspace.js'; +import type {AbstractEventJson} from './events_abstract.js'; +import {UiBase} from './events_ui_base.js'; +import {EventType} from './type.js'; /** * Class for a bubble open event. @@ -31,7 +32,7 @@ export class BubbleOpen extends UiBase { /** The type of bubble; one of 'mutator', 'comment', or 'warning'. */ bubbleType?: BubbleType; - override type = eventUtils.BUBBLE_OPEN; + override type = EventType.BUBBLE_OPEN; /** * @param opt_block The associated block. Undefined for a blank event. @@ -117,4 +118,4 @@ export interface BubbleOpenJson extends AbstractEventJson { blockId: string; } -registry.register(registry.Type.EVENT, eventUtils.BUBBLE_OPEN, BubbleOpen); +registry.register(registry.Type.EVENT, EventType.BUBBLE_OPEN, BubbleOpen); diff --git a/core/events/events_click.ts b/core/events/events_click.ts index 1b1556069..c023f20f1 100644 --- a/core/events/events_click.ts +++ b/core/events/events_click.ts @@ -9,15 +9,15 @@ * * @class */ + // Former goog.module ID: Blockly.Events.Click import type {Block} from '../block.js'; import * as registry from '../registry.js'; -import {AbstractEventJson} from './events_abstract.js'; - -import {UiBase} from './events_ui_base.js'; -import * as eventUtils from './utils.js'; import {Workspace} from '../workspace.js'; +import {AbstractEventJson} from './events_abstract.js'; +import {UiBase} from './events_ui_base.js'; +import {EventType} from './type.js'; /** * Notifies listeners that some blockly element was clicked. @@ -31,7 +31,7 @@ export class Click extends UiBase { * or 'zoom_controls'. */ targetType?: ClickTarget; - override type = eventUtils.CLICK; + override type = EventType.CLICK; /** * @param opt_block The affected block. Null for click events that do not have @@ -107,4 +107,4 @@ export interface ClickJson extends AbstractEventJson { blockId?: string; } -registry.register(registry.Type.EVENT, eventUtils.CLICK, Click); +registry.register(registry.Type.EVENT, EventType.CLICK, Click); diff --git a/core/events/events_comment_base.ts b/core/events/events_comment_base.ts index 6fbc95c4d..e4b76c8e5 100644 --- a/core/events/events_comment_base.ts +++ b/core/events/events_comment_base.ts @@ -13,14 +13,14 @@ import type {WorkspaceComment} from '../comments/workspace_comment.js'; import * as comments from '../serialization/workspace_comments.js'; +import type {Workspace} from '../workspace.js'; import { Abstract as AbstractEvent, AbstractEventJson, } from './events_abstract.js'; import type {CommentCreate} from './events_comment_create.js'; import type {CommentDelete} from './events_comment_delete.js'; -import * as eventUtils from './utils.js'; -import type {Workspace} from '../workspace.js'; +import {getGroup, getRecordUndo} from './utils.js'; /** * Abstract class for a comment event. @@ -44,8 +44,8 @@ export class CommentBase extends AbstractEvent { this.commentId = opt_comment.id; this.workspaceId = opt_comment.workspace.id; - this.group = eventUtils.getGroup(); - this.recordUndo = eventUtils.getRecordUndo(); + this.group = getGroup(); + this.recordUndo = getRecordUndo(); } /** diff --git a/core/events/events_comment_change.ts b/core/events/events_comment_change.ts index eb39d929d..4d944ea39 100644 --- a/core/events/events_comment_change.ts +++ b/core/events/events_comment_change.ts @@ -11,18 +11,17 @@ */ // Former goog.module ID: Blockly.Events.CommentChange -import * as registry from '../registry.js'; import type {WorkspaceComment} from '../comments/workspace_comment.js'; - -import {CommentBase, CommentBaseJson} from './events_comment_base.js'; -import * as eventUtils from './utils.js'; +import * as registry from '../registry.js'; import type {Workspace} from '../workspace.js'; +import {CommentBase, CommentBaseJson} from './events_comment_base.js'; +import {EventType} from './type.js'; /** * Notifies listeners that the contents of a workspace comment has changed. */ export class CommentChange extends CommentBase { - override type = eventUtils.COMMENT_CHANGE; + override type = EventType.COMMENT_CHANGE; // TODO(#6774): We should remove underscores. /** The previous contents of the comment. */ @@ -154,8 +153,4 @@ export interface CommentChangeJson extends CommentBaseJson { newContents: string; } -registry.register( - registry.Type.EVENT, - eventUtils.COMMENT_CHANGE, - CommentChange, -); +registry.register(registry.Type.EVENT, EventType.COMMENT_CHANGE, CommentChange); diff --git a/core/events/events_comment_collapse.ts b/core/events/events_comment_collapse.ts index 6646b1df2..0f718a040 100644 --- a/core/events/events_comment_collapse.ts +++ b/core/events/events_comment_collapse.ts @@ -4,14 +4,14 @@ * SPDX-License-Identifier: Apache-2.0 */ -import * as registry from '../registry.js'; import {WorkspaceComment} from '../comments/workspace_comment.js'; -import {CommentBase, CommentBaseJson} from './events_comment_base.js'; -import * as eventUtils from './utils.js'; +import * as registry from '../registry.js'; import type {Workspace} from '../workspace.js'; +import {CommentBase, CommentBaseJson} from './events_comment_base.js'; +import {EventType} from './type.js'; export class CommentCollapse extends CommentBase { - override type = eventUtils.COMMENT_COLLAPSE; + override type = EventType.COMMENT_COLLAPSE; constructor( comment?: WorkspaceComment, @@ -98,6 +98,6 @@ export interface CommentCollapseJson extends CommentBaseJson { registry.register( registry.Type.EVENT, - eventUtils.COMMENT_COLLAPSE, + EventType.COMMENT_COLLAPSE, CommentCollapse, ); diff --git a/core/events/events_comment_create.ts b/core/events/events_comment_create.ts index 692397df6..637107e3f 100644 --- a/core/events/events_comment_create.ts +++ b/core/events/events_comment_create.ts @@ -11,20 +11,20 @@ */ // Former goog.module ID: Blockly.Events.CommentCreate -import * as registry from '../registry.js'; import type {WorkspaceComment} from '../comments/workspace_comment.js'; +import * as registry from '../registry.js'; import * as comments from '../serialization/workspace_comments.js'; import * as utilsXml from '../utils/xml.js'; +import type {Workspace} from '../workspace.js'; import * as Xml from '../xml.js'; import {CommentBase, CommentBaseJson} from './events_comment_base.js'; -import * as eventUtils from './utils.js'; -import type {Workspace} from '../workspace.js'; +import {EventType} from './type.js'; /** * Notifies listeners that a workspace comment was created. */ export class CommentCreate extends CommentBase { - override type = eventUtils.COMMENT_CREATE; + override type = EventType.COMMENT_CREATE; /** The XML representation of the created workspace comment. */ xml?: Element | DocumentFragment; @@ -111,8 +111,4 @@ export interface CommentCreateJson extends CommentBaseJson { json: object; } -registry.register( - registry.Type.EVENT, - eventUtils.COMMENT_CREATE, - CommentCreate, -); +registry.register(registry.Type.EVENT, EventType.COMMENT_CREATE, CommentCreate); diff --git a/core/events/events_comment_delete.ts b/core/events/events_comment_delete.ts index 62f8916fb..579131e50 100644 --- a/core/events/events_comment_delete.ts +++ b/core/events/events_comment_delete.ts @@ -11,20 +11,20 @@ */ // Former goog.module ID: Blockly.Events.CommentDelete -import * as registry from '../registry.js'; import type {WorkspaceComment} from '../comments/workspace_comment.js'; +import * as registry from '../registry.js'; import * as comments from '../serialization/workspace_comments.js'; -import {CommentBase, CommentBaseJson} from './events_comment_base.js'; -import * as eventUtils from './utils.js'; import * as utilsXml from '../utils/xml.js'; -import * as Xml from '../xml.js'; import type {Workspace} from '../workspace.js'; +import * as Xml from '../xml.js'; +import {CommentBase, CommentBaseJson} from './events_comment_base.js'; +import {EventType} from './type.js'; /** * Notifies listeners that a workspace comment has been deleted. */ export class CommentDelete extends CommentBase { - override type = eventUtils.COMMENT_DELETE; + override type = EventType.COMMENT_DELETE; /** The XML representation of the deleted workspace comment. */ xml?: Element; @@ -110,8 +110,4 @@ export interface CommentDeleteJson extends CommentBaseJson { json: object; } -registry.register( - registry.Type.EVENT, - eventUtils.COMMENT_DELETE, - CommentDelete, -); +registry.register(registry.Type.EVENT, EventType.COMMENT_DELETE, CommentDelete); diff --git a/core/events/events_comment_drag.ts b/core/events/events_comment_drag.ts index 80caeea52..b25ca5b73 100644 --- a/core/events/events_comment_drag.ts +++ b/core/events/events_comment_drag.ts @@ -10,10 +10,10 @@ import type {WorkspaceComment} from '../comments/workspace_comment.js'; import * as registry from '../registry.js'; +import {Workspace} from '../workspace.js'; import {AbstractEventJson} from './events_abstract.js'; import {UiBase} from './events_ui_base.js'; -import * as eventUtils from './utils.js'; -import {Workspace} from '../workspace.js'; +import {EventType} from './type.js'; /** * Notifies listeners when a comment is being manually dragged/dropped. @@ -25,7 +25,7 @@ export class CommentDrag extends UiBase { /** True if this is the start of a drag, false if this is the end of one. */ isStart?: boolean; - override type = eventUtils.COMMENT_DRAG; + override type = EventType.COMMENT_DRAG; /** * @param opt_comment The comment that is being dragged. @@ -96,4 +96,4 @@ export interface CommentDragJson extends AbstractEventJson { commentId: string; } -registry.register(registry.Type.EVENT, eventUtils.COMMENT_DRAG, CommentDrag); +registry.register(registry.Type.EVENT, EventType.COMMENT_DRAG, CommentDrag); diff --git a/core/events/events_comment_move.ts b/core/events/events_comment_move.ts index 502ca032f..af5e33616 100644 --- a/core/events/events_comment_move.ts +++ b/core/events/events_comment_move.ts @@ -11,19 +11,18 @@ */ // Former goog.module ID: Blockly.Events.CommentMove +import type {WorkspaceComment} from '../comments/workspace_comment.js'; import * as registry from '../registry.js'; import {Coordinate} from '../utils/coordinate.js'; -import type {WorkspaceComment} from '../comments/workspace_comment.js'; - -import {CommentBase, CommentBaseJson} from './events_comment_base.js'; -import * as eventUtils from './utils.js'; import type {Workspace} from '../workspace.js'; +import {CommentBase, CommentBaseJson} from './events_comment_base.js'; +import {EventType} from './type.js'; /** * Notifies listeners that a workspace comment has moved. */ export class CommentMove extends CommentBase { - override type = eventUtils.COMMENT_MOVE; + override type = EventType.COMMENT_MOVE; /** The comment that is being moved. */ comment_?: WorkspaceComment; @@ -204,4 +203,4 @@ export interface CommentMoveJson extends CommentBaseJson { newCoordinate: string; } -registry.register(registry.Type.EVENT, eventUtils.COMMENT_MOVE, CommentMove); +registry.register(registry.Type.EVENT, EventType.COMMENT_MOVE, CommentMove); diff --git a/core/events/events_comment_resize.ts b/core/events/events_comment_resize.ts index dfc785832..0c59177d9 100644 --- a/core/events/events_comment_resize.ts +++ b/core/events/events_comment_resize.ts @@ -8,19 +8,18 @@ * Class for comment resize event. */ +import type {WorkspaceComment} from '../comments/workspace_comment.js'; import * as registry from '../registry.js'; import {Size} from '../utils/size.js'; -import type {WorkspaceComment} from '../comments/workspace_comment.js'; - -import {CommentBase, CommentBaseJson} from './events_comment_base.js'; -import * as eventUtils from './utils.js'; import type {Workspace} from '../workspace.js'; +import {CommentBase, CommentBaseJson} from './events_comment_base.js'; +import {EventType} from './type.js'; /** * Notifies listeners that a workspace comment has resized. */ export class CommentResize extends CommentBase { - override type = eventUtils.COMMENT_RESIZE; + override type = EventType.COMMENT_RESIZE; /** The size of the comment before the resize. */ oldSize?: Size; @@ -167,8 +166,4 @@ export interface CommentResizeJson extends CommentBaseJson { newHeight: number; } -registry.register( - registry.Type.EVENT, - eventUtils.COMMENT_RESIZE, - CommentResize, -); +registry.register(registry.Type.EVENT, EventType.COMMENT_RESIZE, CommentResize); diff --git a/core/events/events_marker_move.ts b/core/events/events_marker_move.ts index f162eeca9..58309df58 100644 --- a/core/events/events_marker_move.ts +++ b/core/events/events_marker_move.ts @@ -16,9 +16,8 @@ import {ASTNode} from '../keyboard_nav/ast_node.js'; import * as registry from '../registry.js'; import type {Workspace} from '../workspace.js'; import {AbstractEventJson} from './events_abstract.js'; - import {UiBase} from './events_ui_base.js'; -import * as eventUtils from './utils.js'; +import {EventType} from './type.js'; /** * Notifies listeners that a marker (used for keyboard navigation) has @@ -41,7 +40,7 @@ export class MarkerMove extends UiBase { */ isCursor?: boolean; - override type = eventUtils.MARKER_MOVE; + override type = EventType.MARKER_MOVE; /** * @param opt_block The affected block. Null if current node is of type @@ -131,4 +130,4 @@ export interface MarkerMoveJson extends AbstractEventJson { newNode: ASTNode; } -registry.register(registry.Type.EVENT, eventUtils.MARKER_MOVE, MarkerMove); +registry.register(registry.Type.EVENT, EventType.MARKER_MOVE, MarkerMove); diff --git a/core/events/events_selected.ts b/core/events/events_selected.ts index c320c6746..e4a777496 100644 --- a/core/events/events_selected.ts +++ b/core/events/events_selected.ts @@ -12,11 +12,10 @@ // Former goog.module ID: Blockly.Events.Selected import * as registry from '../registry.js'; -import {AbstractEventJson} from './events_abstract.js'; - -import {UiBase} from './events_ui_base.js'; -import * as eventUtils from './utils.js'; import type {Workspace} from '../workspace.js'; +import {AbstractEventJson} from './events_abstract.js'; +import {UiBase} from './events_ui_base.js'; +import {EventType} from './type.js'; /** * Class for a selected event. @@ -32,7 +31,7 @@ export class Selected extends UiBase { */ newElementId?: string; - override type = eventUtils.SELECTED; + override type = EventType.SELECTED; /** * @param opt_oldElementId The ID of the previously selected element. Null if @@ -95,4 +94,4 @@ export interface SelectedJson extends AbstractEventJson { newElementId?: string; } -registry.register(registry.Type.EVENT, eventUtils.SELECTED, Selected); +registry.register(registry.Type.EVENT, EventType.SELECTED, Selected); diff --git a/core/events/events_theme_change.ts b/core/events/events_theme_change.ts index c0267ac6c..b142b9f14 100644 --- a/core/events/events_theme_change.ts +++ b/core/events/events_theme_change.ts @@ -12,10 +12,10 @@ // Former goog.module ID: Blockly.Events.ThemeChange import * as registry from '../registry.js'; +import type {Workspace} from '../workspace.js'; import {AbstractEventJson} from './events_abstract.js'; import {UiBase} from './events_ui_base.js'; -import * as eventUtils from './utils.js'; -import type {Workspace} from '../workspace.js'; +import {EventType} from './type.js'; /** * Notifies listeners that the workspace theme has changed. @@ -24,7 +24,7 @@ export class ThemeChange extends UiBase { /** The name of the new theme that has been set. */ themeName?: string; - override type = eventUtils.THEME_CHANGE; + override type = EventType.THEME_CHANGE; /** * @param opt_themeName The theme name. Undefined for a blank event. @@ -81,4 +81,4 @@ export interface ThemeChangeJson extends AbstractEventJson { themeName: string; } -registry.register(registry.Type.EVENT, eventUtils.THEME_CHANGE, ThemeChange); +registry.register(registry.Type.EVENT, EventType.THEME_CHANGE, ThemeChange); diff --git a/core/events/events_toolbox_item_select.ts b/core/events/events_toolbox_item_select.ts index f1810dead..6a93dbfde 100644 --- a/core/events/events_toolbox_item_select.ts +++ b/core/events/events_toolbox_item_select.ts @@ -12,10 +12,10 @@ // Former goog.module ID: Blockly.Events.ToolboxItemSelect import * as registry from '../registry.js'; +import type {Workspace} from '../workspace.js'; import {AbstractEventJson} from './events_abstract.js'; import {UiBase} from './events_ui_base.js'; -import * as eventUtils from './utils.js'; -import type {Workspace} from '../workspace.js'; +import {EventType} from './type.js'; /** * Notifies listeners that a toolbox item has been selected. @@ -27,7 +27,7 @@ export class ToolboxItemSelect extends UiBase { /** The newly selected toolbox item. */ newItem?: string; - override type = eventUtils.TOOLBOX_ITEM_SELECT; + override type = EventType.TOOLBOX_ITEM_SELECT; /** * @param opt_oldItem The previously selected toolbox item. @@ -91,6 +91,6 @@ export interface ToolboxItemSelectJson extends AbstractEventJson { registry.register( registry.Type.EVENT, - eventUtils.TOOLBOX_ITEM_SELECT, + EventType.TOOLBOX_ITEM_SELECT, ToolboxItemSelect, ); diff --git a/core/events/events_trashcan_open.ts b/core/events/events_trashcan_open.ts index 745e7459c..af06d9f8f 100644 --- a/core/events/events_trashcan_open.ts +++ b/core/events/events_trashcan_open.ts @@ -12,11 +12,10 @@ // Former goog.module ID: Blockly.Events.TrashcanOpen import * as registry from '../registry.js'; -import {AbstractEventJson} from './events_abstract.js'; - -import {UiBase} from './events_ui_base.js'; -import * as eventUtils from './utils.js'; import type {Workspace} from '../workspace.js'; +import {AbstractEventJson} from './events_abstract.js'; +import {UiBase} from './events_ui_base.js'; +import {EventType} from './type.js'; /** * Notifies listeners when the trashcan is opening or closing. @@ -27,7 +26,7 @@ export class TrashcanOpen extends UiBase { * False if it is currently closing (previously open). */ isOpen?: boolean; - override type = eventUtils.TRASHCAN_OPEN; + override type = EventType.TRASHCAN_OPEN; /** * @param opt_isOpen Whether the trashcan flyout is opening (false if @@ -85,4 +84,4 @@ export interface TrashcanOpenJson extends AbstractEventJson { isOpen: boolean; } -registry.register(registry.Type.EVENT, eventUtils.TRASHCAN_OPEN, TrashcanOpen); +registry.register(registry.Type.EVENT, EventType.TRASHCAN_OPEN, TrashcanOpen); diff --git a/core/events/events_var_base.ts b/core/events/events_var_base.ts index 74537f144..8e359de51 100644 --- a/core/events/events_var_base.ts +++ b/core/events/events_var_base.ts @@ -12,12 +12,11 @@ // Former goog.module ID: Blockly.Events.VarBase import type {VariableModel} from '../variable_model.js'; - +import type {Workspace} from '../workspace.js'; import { Abstract as AbstractEvent, AbstractEventJson, } from './events_abstract.js'; -import type {Workspace} from '../workspace.js'; /** * Abstract class for a variable event. diff --git a/core/events/events_var_create.ts b/core/events/events_var_create.ts index a719cad98..b3ae548aa 100644 --- a/core/events/events_var_create.ts +++ b/core/events/events_var_create.ts @@ -13,16 +13,15 @@ import * as registry from '../registry.js'; import type {VariableModel} from '../variable_model.js'; - -import {VarBase, VarBaseJson} from './events_var_base.js'; -import * as eventUtils from './utils.js'; import type {Workspace} from '../workspace.js'; +import {VarBase, VarBaseJson} from './events_var_base.js'; +import {EventType} from './type.js'; /** * Notifies listeners that a variable model has been created. */ export class VarCreate extends VarBase { - override type = eventUtils.VAR_CREATE; + override type = EventType.VAR_CREATE; /** The type of the variable that was created. */ varType?: string; @@ -123,4 +122,4 @@ export interface VarCreateJson extends VarBaseJson { varName: string; } -registry.register(registry.Type.EVENT, eventUtils.VAR_CREATE, VarCreate); +registry.register(registry.Type.EVENT, EventType.VAR_CREATE, VarCreate); diff --git a/core/events/events_var_delete.ts b/core/events/events_var_delete.ts index fc19461d4..caaa1f487 100644 --- a/core/events/events_var_delete.ts +++ b/core/events/events_var_delete.ts @@ -8,10 +8,9 @@ import * as registry from '../registry.js'; import type {VariableModel} from '../variable_model.js'; - -import {VarBase, VarBaseJson} from './events_var_base.js'; -import * as eventUtils from './utils.js'; import type {Workspace} from '../workspace.js'; +import {VarBase, VarBaseJson} from './events_var_base.js'; +import {EventType} from './type.js'; /** * Notifies listeners that a variable model has been deleted. @@ -19,7 +18,7 @@ import type {Workspace} from '../workspace.js'; * @class */ export class VarDelete extends VarBase { - override type = eventUtils.VAR_DELETE; + override type = EventType.VAR_DELETE; /** The type of the variable that was deleted. */ varType?: string; /** The name of the variable that was deleted. */ @@ -118,4 +117,4 @@ export interface VarDeleteJson extends VarBaseJson { varName: string; } -registry.register(registry.Type.EVENT, eventUtils.VAR_DELETE, VarDelete); +registry.register(registry.Type.EVENT, EventType.VAR_DELETE, VarDelete); diff --git a/core/events/events_var_rename.ts b/core/events/events_var_rename.ts index 3bb1e90eb..b461184ca 100644 --- a/core/events/events_var_rename.ts +++ b/core/events/events_var_rename.ts @@ -8,10 +8,9 @@ import * as registry from '../registry.js'; import type {VariableModel} from '../variable_model.js'; - -import {VarBase, VarBaseJson} from './events_var_base.js'; -import * as eventUtils from './utils.js'; import type {Workspace} from '../workspace.js'; +import {VarBase, VarBaseJson} from './events_var_base.js'; +import {EventType} from './type.js'; /** * Notifies listeners that a variable model was renamed. @@ -19,7 +18,7 @@ import type {Workspace} from '../workspace.js'; * @class */ export class VarRename extends VarBase { - override type = eventUtils.VAR_RENAME; + override type = EventType.VAR_RENAME; /** The previous name of the variable. */ oldName?: string; @@ -127,4 +126,4 @@ export interface VarRenameJson extends VarBaseJson { newName: string; } -registry.register(registry.Type.EVENT, eventUtils.VAR_RENAME, VarRename); +registry.register(registry.Type.EVENT, EventType.VAR_RENAME, VarRename); diff --git a/core/events/events_viewport.ts b/core/events/events_viewport.ts index aff236e48..b7a05b8d6 100644 --- a/core/events/events_viewport.ts +++ b/core/events/events_viewport.ts @@ -12,10 +12,10 @@ // Former goog.module ID: Blockly.Events.ViewportChange import * as registry from '../registry.js'; +import type {Workspace} from '../workspace.js'; import {AbstractEventJson} from './events_abstract.js'; import {UiBase} from './events_ui_base.js'; -import * as eventUtils from './utils.js'; -import type {Workspace} from '../workspace.js'; +import {EventType} from './type.js'; /** * Notifies listeners that the workspace surface's position or scale has @@ -42,7 +42,7 @@ export class ViewportChange extends UiBase { /** The previous scale of the workspace. */ oldScale?: number; - override type = eventUtils.VIEWPORT_CHANGE; + override type = EventType.VIEWPORT_CHANGE; /** * @param opt_top Top-edge of the visible portion of the workspace, relative @@ -144,6 +144,6 @@ export interface ViewportChangeJson extends AbstractEventJson { registry.register( registry.Type.EVENT, - eventUtils.VIEWPORT_CHANGE, + EventType.VIEWPORT_CHANGE, ViewportChange, ); diff --git a/core/events/predicates.ts b/core/events/predicates.ts new file mode 100644 index 000000000..79d8ca284 --- /dev/null +++ b/core/events/predicates.ts @@ -0,0 +1,172 @@ +/** + * @license + * Copyright 2024 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @file Predicates for testing Abstract event subclasses based on + * their .type properties. These are useful because there are places + * where it is not possible to use instanceof tests + * for type narrowing due to load ordering issues that would be caused + * by the need to import (rather than just import type) the class + * constructors in question. + */ + +import type {Abstract} from './events_abstract.js'; +import type {BlockChange} from './events_block_change.js'; +import type {BlockCreate} from './events_block_create.js'; +import type {BlockDelete} from './events_block_delete.js'; +import type {BlockDrag} from './events_block_drag.js'; +import type {BlockFieldIntermediateChange} from './events_block_field_intermediate_change.js'; +import type {BlockMove} from './events_block_move.js'; +import type {BubbleOpen} from './events_bubble_open.js'; +import type {Click} from './events_click.js'; +import type {CommentChange} from './events_comment_change.js'; +import type {CommentCollapse} from './events_comment_collapse.js'; +import type {CommentCreate} from './events_comment_create.js'; +import type {CommentDelete} from './events_comment_delete.js'; +import type {CommentDrag} from './events_comment_drag.js'; +import type {CommentMove} from './events_comment_move.js'; +import type {CommentResize} from './events_comment_resize.js'; +import type {MarkerMove} from './events_marker_move.js'; +import type {Selected} from './events_selected.js'; +import type {ThemeChange} from './events_theme_change.js'; +import type {ToolboxItemSelect} from './events_toolbox_item_select.js'; +import type {TrashcanOpen} from './events_trashcan_open.js'; +import type {VarCreate} from './events_var_create.js'; +import type {VarDelete} from './events_var_delete.js'; +import type {VarRename} from './events_var_rename.js'; +import type {ViewportChange} from './events_viewport.js'; +import type {FinishedLoading} from './workspace_events.js'; + +import {EventType} from './type.js'; + +/** @returns true iff event.type is EventType.BLOCK_CREATE */ +export function isBlockCreate(event: Abstract): event is BlockCreate { + return event.type === EventType.BLOCK_CREATE; +} + +/** @returns true iff event.type is EventType.BLOCK_DELETE */ +export function isBlockDelete(event: Abstract): event is BlockDelete { + return event.type === EventType.BLOCK_DELETE; +} + +/** @returns true iff event.type is EventType.BLOCK_CHANGE */ +export function isBlockChange(event: Abstract): event is BlockChange { + return event.type === EventType.BLOCK_CHANGE; +} + +/** @returns true iff event.type is EventType.BLOCK_FIELD_INTERMEDIATE_CHANGE */ +export function isBlockFieldIntermediateChange( + event: Abstract, +): event is BlockFieldIntermediateChange { + return event.type === EventType.BLOCK_FIELD_INTERMEDIATE_CHANGE; +} + +/** @returns true iff event.type is EventType.BLOCK_MOVE */ +export function isBlockMove(event: Abstract): event is BlockMove { + return event.type === EventType.BLOCK_MOVE; +} + +/** @returns true iff event.type is EventType.VAR_CREATE */ +export function isVarCreate(event: Abstract): event is VarCreate { + return event.type === EventType.VAR_CREATE; +} + +/** @returns true iff event.type is EventType.VAR_DELETE */ +export function isVarDelete(event: Abstract): event is VarDelete { + return event.type === EventType.VAR_DELETE; +} + +/** @returns true iff event.type is EventType.VAR_RENAME */ +export function isVarRename(event: Abstract): event is VarRename { + return event.type === EventType.VAR_RENAME; +} + +/** @returns true iff event.type is EventType.BLOCK_DRAG */ +export function isBlockDrag(event: Abstract): event is BlockDrag { + return event.type === EventType.BLOCK_DRAG; +} + +/** @returns true iff event.type is EventType.SELECTED */ +export function isSelected(event: Abstract): event is Selected { + return event.type === EventType.SELECTED; +} + +/** @returns true iff event.type is EventType.CLICK */ +export function isClick(event: Abstract): event is Click { + return event.type === EventType.CLICK; +} + +/** @returns true iff event.type is EventType.MARKER_MOVE */ +export function isMarkerMove(event: Abstract): event is MarkerMove { + return event.type === EventType.MARKER_MOVE; +} + +/** @returns true iff event.type is EventType.BUBBLE_OPEN */ +export function isBubbleOpen(event: Abstract): event is BubbleOpen { + return event.type === EventType.BUBBLE_OPEN; +} + +/** @returns true iff event.type is EventType.TRASHCAN_OPEN */ +export function isTrashcanOpen(event: Abstract): event is TrashcanOpen { + return event.type === EventType.TRASHCAN_OPEN; +} + +/** @returns true iff event.type is EventType.TOOLBOX_ITEM_SELECT */ +export function isToolboxItemSelect( + event: Abstract, +): event is ToolboxItemSelect { + return event.type === EventType.TOOLBOX_ITEM_SELECT; +} + +/** @returns true iff event.type is EventType.THEME_CHANGE */ +export function isThemeChange(event: Abstract): event is ThemeChange { + return event.type === EventType.THEME_CHANGE; +} + +/** @returns true iff event.type is EventType.VIEWPORT_CHANGE */ +export function isViewportChange(event: Abstract): event is ViewportChange { + return event.type === EventType.VIEWPORT_CHANGE; +} + +/** @returns true iff event.type is EventType.COMMENT_CREATE */ +export function isCommentCreate(event: Abstract): event is CommentCreate { + return event.type === EventType.COMMENT_CREATE; +} + +/** @returns true iff event.type is EventType.COMMENT_DELETE */ +export function isCommentDelete(event: Abstract): event is CommentDelete { + return event.type === EventType.COMMENT_DELETE; +} + +/** @returns true iff event.type is EventType.COMMENT_CHANGE */ +export function isCommentChange(event: Abstract): event is CommentChange { + return event.type === EventType.COMMENT_CHANGE; +} + +/** @returns true iff event.type is EventType.COMMENT_MOVE */ +export function isCommentMove(event: Abstract): event is CommentMove { + return event.type === EventType.COMMENT_MOVE; +} + +/** @returns true iff event.type is EventType.COMMENT_RESIZE */ +export function isCommentResize(event: Abstract): event is CommentResize { + return event.type === EventType.COMMENT_RESIZE; +} + +/** @returns true iff event.type is EventType.COMMENT_DRAG */ +export function isCommentDrag(event: Abstract): event is CommentDrag { + return event.type === EventType.COMMENT_DRAG; +} + +/** @returns true iff event.type is EventType.COMMENT_COLLAPSE */ +export function isCommentCollapse(event: Abstract): event is CommentCollapse { + return event.type === EventType.COMMENT_COLLAPSE; +} + +/** @returns true iff event.type is EventType.FINISHED_LOADING */ +export function isFinishedLoading(event: Abstract): event is FinishedLoading { + return event.type === EventType.FINISHED_LOADING; +} diff --git a/core/events/type.ts b/core/events/type.ts new file mode 100644 index 000000000..db9ad6c96 --- /dev/null +++ b/core/events/type.ts @@ -0,0 +1,85 @@ +/** + * @license + * Copyright 2024 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * Enum of values for the .type property for event classes (concrete subclasses + * of Abstract). + */ +export enum EventType { + /** Type of event that creates a block. */ + BLOCK_CREATE = 'create', + /** Type of event that deletes a block. */ + BLOCK_DELETE = 'delete', + /** Type of event that changes a block. */ + BLOCK_CHANGE = 'change', + /** + * Type of event representing an in-progress change to a field of a + * block, which is expected to be followed by a block change event. + */ + BLOCK_FIELD_INTERMEDIATE_CHANGE = 'block_field_intermediate_change', + /** Type of event that moves a block. */ + BLOCK_MOVE = 'move', + /** Type of event that creates a variable. */ + VAR_CREATE = 'var_create', + /** Type of event that deletes a variable. */ + VAR_DELETE = 'var_delete', + /** Type of event that renames a variable. */ + VAR_RENAME = 'var_rename', + /** + * Type of generic event that records a UI change. + * + * @deprecated Was only ever intended for internal use. + */ + UI = 'ui', + /** Type of event that drags a block. */ + BLOCK_DRAG = 'drag', + /** Type of event that records a change in selected element. */ + SELECTED = 'selected', + /** Type of event that records a click. */ + CLICK = 'click', + /** Type of event that records a marker move. */ + MARKER_MOVE = 'marker_move', + /** Type of event that records a bubble open. */ + BUBBLE_OPEN = 'bubble_open', + /** Type of event that records a trashcan open. */ + TRASHCAN_OPEN = 'trashcan_open', + /** Type of event that records a toolbox item select. */ + TOOLBOX_ITEM_SELECT = 'toolbox_item_select', + /** Type of event that records a theme change. */ + THEME_CHANGE = 'theme_change', + /** Type of event that records a viewport change. */ + VIEWPORT_CHANGE = 'viewport_change', + /** Type of event that creates a comment. */ + COMMENT_CREATE = 'comment_create', + /** Type of event that deletes a comment. */ + COMMENT_DELETE = 'comment_delete', + /** Type of event that changes a comment. */ + COMMENT_CHANGE = 'comment_change', + /** Type of event that moves a comment. */ + COMMENT_MOVE = 'comment_move', + /** Type of event that resizes a comment. */ + COMMENT_RESIZE = 'comment_resize', + /** Type of event that drags a comment. */ + COMMENT_DRAG = 'comment_drag', + /** Type of event that collapses a comment. */ + COMMENT_COLLAPSE = 'comment_collapse', + /** Type of event that records a workspace load. */ + FINISHED_LOADING = 'finished_loading', +} + +/** + * List of events that cause objects to be bumped back into the visible + * portion of the workspace. + * + * Not to be confused with bumping so that disconnected connections do not + * appear connected. + */ +export const BUMP_EVENTS: string[] = [ + EventType.BLOCK_CREATE, + EventType.BLOCK_MOVE, + EventType.COMMENT_CREATE, + EventType.COMMENT_MOVE, +]; diff --git a/core/events/utils.ts b/core/events/utils.ts index 2d434594b..63217168f 100644 --- a/core/events/utils.ts +++ b/core/events/utils.ts @@ -12,15 +12,21 @@ import * as registry from '../registry.js'; import * as idGenerator from '../utils/idgenerator.js'; import type {Workspace} from '../workspace.js'; import type {WorkspaceSvg} from '../workspace_svg.js'; - import type {Abstract} from './events_abstract.js'; -import type {BlockChange} from './events_block_change.js'; import type {BlockCreate} from './events_block_create.js'; import type {BlockMove} from './events_block_move.js'; import type {CommentCreate} from './events_comment_create.js'; import type {CommentMove} from './events_comment_move.js'; import type {CommentResize} from './events_comment_resize.js'; -import type {ViewportChange} from './events_viewport.js'; +import { + isBlockChange, + isBlockCreate, + isBlockMove, + isBubbleOpen, + isClick, + isViewportChange, +} from './predicates.js'; +import {EventType} from './type.js'; /** Group ID for new events. Grouped events are indivisible. */ let group = ''; @@ -49,152 +55,6 @@ export function getRecordUndo(): boolean { /** Allow change events to be created and fired. */ let disabled = 0; -/** - * Name of event that creates a block. Will be deprecated for BLOCK_CREATE. - */ -export const CREATE = 'create'; - -/** - * Name of event that creates a block. - */ -export const BLOCK_CREATE = CREATE; - -/** - * Name of event that deletes a block. Will be deprecated for BLOCK_DELETE. - */ -export const DELETE = 'delete'; - -/** - * Name of event that deletes a block. - */ -export const BLOCK_DELETE = DELETE; - -/** - * Name of event that changes a block. Will be deprecated for BLOCK_CHANGE. - */ -export const CHANGE = 'change'; - -/** - * Name of event that changes a block. - */ -export const BLOCK_CHANGE = CHANGE; - -/** - * Name of event representing an in-progress change to a field of a block, which - * is expected to be followed by a block change event. - */ -export const BLOCK_FIELD_INTERMEDIATE_CHANGE = - 'block_field_intermediate_change'; - -/** - * Name of event that moves a block. Will be deprecated for BLOCK_MOVE. - */ -export const MOVE = 'move'; - -/** - * Name of event that moves a block. - */ -export const BLOCK_MOVE = MOVE; - -/** - * Name of event that creates a variable. - */ -export const VAR_CREATE = 'var_create'; - -/** - * Name of event that deletes a variable. - */ -export const VAR_DELETE = 'var_delete'; - -/** - * Name of event that renames a variable. - */ -export const VAR_RENAME = 'var_rename'; - -/** - * Name of generic event that records a UI change. - */ -export const UI = 'ui'; - -/** - * Name of event that drags a block. - */ -export const BLOCK_DRAG = 'drag'; - -/** - * Name of event that records a change in selected element. - */ -export const SELECTED = 'selected'; - -/** - * Name of event that records a click. - */ -export const CLICK = 'click'; - -/** - * Name of event that records a marker move. - */ -export const MARKER_MOVE = 'marker_move'; - -/** - * Name of event that records a bubble open. - */ -export const BUBBLE_OPEN = 'bubble_open'; - -/** - * Name of event that records a trashcan open. - */ -export const TRASHCAN_OPEN = 'trashcan_open'; - -/** - * Name of event that records a toolbox item select. - */ -export const TOOLBOX_ITEM_SELECT = 'toolbox_item_select'; - -/** - * Name of event that records a theme change. - */ -export const THEME_CHANGE = 'theme_change'; - -/** - * Name of event that records a viewport change. - */ -export const VIEWPORT_CHANGE = 'viewport_change'; - -/** - * Name of event that creates a comment. - */ -export const COMMENT_CREATE = 'comment_create'; - -/** - * Name of event that deletes a comment. - */ -export const COMMENT_DELETE = 'comment_delete'; - -/** - * Name of event that changes a comment. - */ -export const COMMENT_CHANGE = 'comment_change'; - -/** - * Name of event that moves a comment. - */ -export const COMMENT_MOVE = 'comment_move'; - -/** Name of event that resizes a comment. */ -export const COMMENT_RESIZE = 'comment_resize'; - -/** Name of event that drags a comment. */ -export const COMMENT_DRAG = 'comment_drag'; - -/** Type of event that collapses a comment. */ -export const COMMENT_COLLAPSE = 'comment_collapse'; - -/** - * Name of event that records a workspace load. - */ -export const FINISHED_LOADING = 'finished_loading'; - /** * The language-neutral ID for when the reason why a block is disabled is * because the block is not descended from a root block. @@ -215,20 +75,6 @@ export type BumpEvent = | CommentMove | CommentResize; -/** - * List of events that cause objects to be bumped back into the visible - * portion of the workspace. - * - * Not to be confused with bumping so that disconnected connections do not - * appear connected. - */ -export const BUMP_EVENTS: string[] = [ - BLOCK_CREATE, - BLOCK_MOVE, - COMMENT_CREATE, - COMMENT_MOVE, -]; - /** List of events queued for firing. */ const FIRE_QUEUE: Abstract[] = []; @@ -256,7 +102,7 @@ function fireInternal(event: Abstract) { requestAnimationFrame(() => { setTimeout(fireNow, 0); }); - } catch (e) { + } catch { // Otherwise we just want to delay so events can be coallesced. // requestAnimationFrame will error triggering this. setTimeout(fireNow, 0); @@ -265,7 +111,7 @@ function fireInternal(event: Abstract) { FIRE_QUEUE.push(event); } -/** Fire all queued events. */ +/** Dispatch all queued events. */ function fireNow() { const queue = filter(FIRE_QUEUE, true); FIRE_QUEUE.length = 0; @@ -278,50 +124,45 @@ function fireNow() { eventWorkspace.fireChangeListener(event); } } - - // Post-filter the undo stack to squash and remove any events that result in - // a null event - - // 1. Determine which workspaces will need to have their undo stacks validated - const workspaceIds = new Set(queue.map((e) => e.workspaceId)); - for (const workspaceId of workspaceIds) { - // Only process valid workspaces - if (!workspaceId) { - continue; - } - const eventWorkspace = common.getWorkspaceById(workspaceId); - if (!eventWorkspace) { - continue; - } - - // Find the last contiguous group of events on the stack - const undoStack = eventWorkspace.getUndoStack(); - let i; - let group: string | undefined = undefined; - for (i = undoStack.length; i > 0; i--) { - const event = undoStack[i - 1]; - if (event.group === '') { - break; - } else if (group === undefined) { - group = event.group; - } else if (event.group !== group) { - break; - } - } - if (!group || i == undoStack.length - 1) { - // Need a group of two or more events on the stack. Nothing to do here. - continue; - } - - // Extract the event group, filter, and add back to the undo stack - let events = undoStack.splice(i, undoStack.length - i); - events = filter(events, true); - undoStack.push(...events); - } } /** - * Filter the queued events and merge duplicates. + * Filter the queued events by merging duplicates, removing null + * events and reording BlockChange events. + * + * History of this function: + * + * This function was originally added in commit cf257ea5 with the + * intention of dramatically reduing the total number of dispatched + * events. Initialy it affected only BlockMove events but others were + * added over time. + * + * Code was added to reorder BlockChange events added in commit + * 5578458, for uncertain reasons but most probably as part of an + * only-partially-successful attemp to fix problems with event + * ordering during block mutations. This code should probably have + * been added to the top of the function, before merging and + * null-removal, but was added at the bottom for now-forgotten + * reasons. See these bug investigations for a fuller discussion of + * the underlying issue and some of the failures that arose because of + * this incomplete/incorrect fix: + * + * https://github.com/google/blockly/issues/8225#issuecomment-2195751783 + * https://github.com/google/blockly/issues/2037#issuecomment-2209696351 + * + * Later, in PR #1205 the original O(n^2) implementation was replaced + * by a linear-time implementation, though addiitonal fixes were made + * subsequently. + * + * This function was previously called from Workspace.prototype.undo, + * but this was the cause of issue #7026, the originally-chosen fix + * for which was the addition (in PR #7069) of code to fireNow to + * post-filter the .undoStack_ and .redoStack_ of any workspace that + * had just been involved in dispatching events. This apparently + * resolved the issue but added considerable additional complexity and + * made it difficlut to reason about how events are processed for + * undo/redo, so both the call from undo and the post-processing code + * was later removed. * * @param queueIn Array of events. * @param forward True if forward (redo), false if backward (undo). @@ -340,7 +181,7 @@ export function filter(queueIn: Abstract[], forward: boolean): Abstract[] { for (let i = 0, event; (event = queue[i]); i++) { if (!event.isNull()) { // Treat all UI events as the same type in hash table. - const eventType = event.isUiEvent ? UI : event.type; + const eventType = event.isUiEvent ? EventType.UI : event.type; // TODO(#5927): Check whether `blockId` exists before accessing it. const blockId = (event as AnyDuringMigration).blockId; const key = [eventType, blockId, event.workspaceId].join(' '); @@ -353,40 +194,35 @@ export function filter(queueIn: Abstract[], forward: boolean): Abstract[] { // move events. hash[key] = {event, index: i}; mergedQueue.push(event); - } else if (event.type === MOVE && lastEntry.index === i - 1) { - const moveEvent = event as BlockMove; + } else if (isBlockMove(event) && lastEntry.index === i - 1) { // Merge move events. - lastEvent.newParentId = moveEvent.newParentId; - lastEvent.newInputName = moveEvent.newInputName; - lastEvent.newCoordinate = moveEvent.newCoordinate; - if (moveEvent.reason) { + lastEvent.newParentId = event.newParentId; + lastEvent.newInputName = event.newInputName; + lastEvent.newCoordinate = event.newCoordinate; + if (event.reason) { if (lastEvent.reason) { // Concatenate reasons without duplicates. - const reasonSet = new Set( - moveEvent.reason.concat(lastEvent.reason), - ); + const reasonSet = new Set(event.reason.concat(lastEvent.reason)); lastEvent.reason = Array.from(reasonSet); } else { - lastEvent.reason = moveEvent.reason; + lastEvent.reason = event.reason; } } lastEntry.index = i; } else if ( - event.type === CHANGE && - (event as BlockChange).element === lastEvent.element && - (event as BlockChange).name === lastEvent.name + isBlockChange(event) && + event.element === lastEvent.element && + event.name === lastEvent.name ) { - const changeEvent = event as BlockChange; // Merge change events. - lastEvent.newValue = changeEvent.newValue; - } else if (event.type === VIEWPORT_CHANGE) { - const viewportEvent = event as ViewportChange; + lastEvent.newValue = event.newValue; + } else if (isViewportChange(event)) { // Merge viewport change events. - lastEvent.viewTop = viewportEvent.viewTop; - lastEvent.viewLeft = viewportEvent.viewLeft; - lastEvent.scale = viewportEvent.scale; - lastEvent.oldScale = viewportEvent.oldScale; - } else if (event.type === CLICK && lastEvent.type === BUBBLE_OPEN) { + lastEvent.viewTop = event.viewTop; + lastEvent.viewLeft = event.viewLeft; + lastEvent.scale = event.scale; + lastEvent.oldScale = event.oldScale; + } else if (isClick(event) && isBubbleOpen(lastEvent)) { // Drop click events caused by opening/closing bubbles. } else { // Collision: newer events should merge into this event to maintain @@ -410,7 +246,7 @@ export function filter(queueIn: Abstract[], forward: boolean): Abstract[] { // AnyDuringMigration because: Property 'element' does not exist on type // 'Abstract'. if ( - event.type === CHANGE && + event.type === EventType.BLOCK_CHANGE && (event as AnyDuringMigration).element === 'mutation' ) { queue.unshift(queue.splice(i, 1)[0]); @@ -540,7 +376,7 @@ export function get( * @param event Custom data for event. */ export function disableOrphans(event: Abstract) { - if (event.type === MOVE || event.type === CREATE) { + if (isBlockMove(event) || isBlockCreate(event)) { const blockEvent = event as BlockMove | BlockCreate; if (!blockEvent.workspaceId) { return; diff --git a/core/events/workspace_events.ts b/core/events/workspace_events.ts index 225e342b4..1a2ff5473 100644 --- a/core/events/workspace_events.ts +++ b/core/events/workspace_events.ts @@ -14,7 +14,7 @@ import * as registry from '../registry.js'; import type {Workspace} from '../workspace.js'; import {Abstract as AbstractEvent} from './events_abstract.js'; -import * as eventUtils from './utils.js'; +import {EventType} from './type.js'; /** * Notifies listeners when the workspace has finished deserializing from @@ -23,7 +23,7 @@ import * as eventUtils from './utils.js'; export class FinishedLoading extends AbstractEvent { override isBlank = true; override recordUndo = false; - override type = eventUtils.FINISHED_LOADING; + override type = EventType.FINISHED_LOADING; /** * @param opt_workspace The workspace that has finished loading. Undefined @@ -41,6 +41,6 @@ export class FinishedLoading extends AbstractEvent { registry.register( registry.Type.EVENT, - eventUtils.FINISHED_LOADING, + EventType.FINISHED_LOADING, FinishedLoading, ); diff --git a/core/extensions.ts b/core/extensions.ts index aa9a6a186..0957b7f86 100644 --- a/core/extensions.ts +++ b/core/extensions.ts @@ -27,7 +27,10 @@ export const TEST_ONLY = {allExtensions}; * @throws {Error} if the extension name is empty, the extension is already * registered, or extensionFn is not a function. */ -export function register(name: string, initFn: Function) { +export function register( + name: string, + initFn: (this: T) => void, +) { if (typeof name !== 'string' || name.trim() === '') { throw Error('Error: Invalid extension name "' + name + '"'); } diff --git a/core/field.ts b/core/field.ts index 51e006823..c9d3781a2 100644 --- a/core/field.ts +++ b/core/field.ts @@ -20,12 +20,14 @@ import type {Block} from './block.js'; import type {BlockSvg} from './block_svg.js'; import * as browserEvents from './browser_events.js'; import * as dropDownDiv from './dropdowndiv.js'; +import {EventType} from './events/type.js'; import * as eventUtils from './events/utils.js'; import type {Input} from './inputs/input.js'; import type {IASTNodeLocationSvg} from './interfaces/i_ast_node_location_svg.js'; import type {IASTNodeLocationWithBlock} from './interfaces/i_ast_node_location_with_block.js'; import type {IKeyboardAccessible} from './interfaces/i_keyboard_accessible.js'; import type {IRegistrable} from './interfaces/i_registrable.js'; +import {ISerializable} from './interfaces/i_serializable.js'; import {MarkerManager} from './marker_manager.js'; import type {ConstantProvider} from './renderers/common/constants.js'; import type {KeyboardShortcut} from './shortcut_registry.js'; @@ -41,7 +43,6 @@ import * as userAgent from './utils/useragent.js'; import * as utilsXml from './utils/xml.js'; import * as WidgetDiv from './widgetdiv.js'; import type {WorkspaceSvg} from './workspace_svg.js'; -import {ISerializable} from './interfaces/i_serializable.js'; /** * A function that is called to validate changes to the field's value before @@ -1080,7 +1081,7 @@ export abstract class Field setValue(newValue: AnyDuringMigration, fireChangeEvent = true) { const doLogging = false; if (newValue === null) { - doLogging && console.log('null, return'); + if (doLogging) console.log('null, return'); // Not a valid value to check. return; } @@ -1092,7 +1093,7 @@ export abstract class Field fireChangeEvent, ); if (classValue instanceof Error) { - doLogging && console.log('invalid class validation, return'); + if (doLogging) console.log('invalid class validation, return'); return; } @@ -1103,19 +1104,19 @@ export abstract class Field fireChangeEvent, ); if (localValue instanceof Error) { - doLogging && console.log('invalid local validation, return'); + if (doLogging) console.log('invalid local validation, return'); return; } const source = this.sourceBlock_; if (source && source.disposed) { - doLogging && console.log('source disposed, return'); + if (doLogging) console.log('source disposed, return'); return; } const oldValue = this.getValue(); if (oldValue === localValue) { - doLogging && console.log('same, doValueUpdate_, return'); + if (doLogging) console.log('same, doValueUpdate_, return'); this.doValueUpdate_(localValue); return; } @@ -1123,7 +1124,7 @@ export abstract class Field this.doValueUpdate_(localValue); if (fireChangeEvent && source && eventUtils.isEnabled()) { eventUtils.fire( - new (eventUtils.get(eventUtils.BLOCK_CHANGE))( + new (eventUtils.get(EventType.BLOCK_CHANGE))( source, 'field', this.name || null, @@ -1135,7 +1136,7 @@ export abstract class Field if (this.isDirty_) { this.forceRerender(); } - doLogging && console.log(this.value_); + if (doLogging) console.log(this.value_); } /** diff --git a/core/field_checkbox.ts b/core/field_checkbox.ts index 83f460bb9..01d1851aa 100644 --- a/core/field_checkbox.ts +++ b/core/field_checkbox.ts @@ -14,9 +14,9 @@ // Unused import preserved for side-effects. Remove if unneeded. import './events/events_block_change.js'; -import * as dom from './utils/dom.js'; import {Field, FieldConfig, FieldValidator} from './field.js'; import * as fieldRegistry from './field_registry.js'; +import * as dom from './utils/dom.js'; type BoolString = 'TRUE' | 'FALSE'; type CheckboxBool = BoolString | boolean; diff --git a/core/field_dropdown.ts b/core/field_dropdown.ts index 58a4b0732..71b17326d 100644 --- a/core/field_dropdown.ts +++ b/core/field_dropdown.ts @@ -24,12 +24,12 @@ import { import * as fieldRegistry from './field_registry.js'; import {Menu} from './menu.js'; import {MenuItem} from './menuitem.js'; -import * as style from './utils/style.js'; import * as aria from './utils/aria.js'; import {Coordinate} from './utils/coordinate.js'; import * as dom from './utils/dom.js'; import * as parsing from './utils/parsing.js'; import * as utilsString from './utils/string.js'; +import * as style from './utils/style.js'; import {Svg} from './utils/svg.js'; /** diff --git a/core/field_input.ts b/core/field_input.ts index 85431cc5b..7ef5a01bc 100644 --- a/core/field_input.ts +++ b/core/field_input.ts @@ -15,11 +15,11 @@ import './events/events_block_change.js'; import {BlockSvg} from './block_svg.js'; -import * as bumpObjects from './bump_objects.js'; import * as browserEvents from './browser_events.js'; +import * as bumpObjects from './bump_objects.js'; import * as dialog from './dialog.js'; -import * as dom from './utils/dom.js'; import * as dropDownDiv from './dropdowndiv.js'; +import {EventType} from './events/type.js'; import * as eventUtils from './events/utils.js'; import { Field, @@ -30,10 +30,11 @@ import { import {Msg} from './msg.js'; import * as aria from './utils/aria.js'; import {Coordinate} from './utils/coordinate.js'; +import * as dom from './utils/dom.js'; +import {Size} from './utils/size.js'; import * as userAgent from './utils/useragent.js'; import * as WidgetDiv from './widgetdiv.js'; import type {WorkspaceSvg} from './workspace_svg.js'; -import {Size} from './utils/size.js'; /** * Supported types for FieldInput subclasses. @@ -187,7 +188,7 @@ export abstract class FieldInput extends Field< fireChangeEvent ) { eventUtils.fire( - new (eventUtils.get(eventUtils.BLOCK_CHANGE))( + new (eventUtils.get(EventType.BLOCK_CHANGE))( this.sourceBlock_, 'field', this.name || null, @@ -475,7 +476,7 @@ export abstract class FieldInput extends Field< // multiple times while the editor was open, but this will fire an event // containing the value when the editor was opened as well as the new one. eventUtils.fire( - new (eventUtils.get(eventUtils.BLOCK_CHANGE))( + new (eventUtils.get(EventType.BLOCK_CHANGE))( this.sourceBlock_, 'field', this.name || null, @@ -592,7 +593,7 @@ export abstract class FieldInput extends Field< // Fire a special event indicating that the value changed but the change // isn't complete yet and normal field change listeners can wait. eventUtils.fire( - new (eventUtils.get(eventUtils.BLOCK_FIELD_INTERMEDIATE_CHANGE))( + new (eventUtils.get(EventType.BLOCK_FIELD_INTERMEDIATE_CHANGE))( this.sourceBlock_, this.name || null, oldValue, diff --git a/core/field_label.ts b/core/field_label.ts index 2b77b0d25..2b0ae1eba 100644 --- a/core/field_label.ts +++ b/core/field_label.ts @@ -12,9 +12,9 @@ */ // Former goog.module ID: Blockly.FieldLabel -import * as dom from './utils/dom.js'; import {Field, FieldConfig} from './field.js'; import * as fieldRegistry from './field_registry.js'; +import * as dom from './utils/dom.js'; import * as parsing from './utils/parsing.js'; /** diff --git a/core/field_number.ts b/core/field_number.ts index e8e51d060..0641b9ae3 100644 --- a/core/field_number.ts +++ b/core/field_number.ts @@ -12,12 +12,12 @@ // Former goog.module ID: Blockly.FieldNumber import {Field} from './field.js'; -import * as fieldRegistry from './field_registry.js'; import { FieldInput, FieldInputConfig, FieldInputValidator, } from './field_input.js'; +import * as fieldRegistry from './field_registry.js'; import * as aria from './utils/aria.js'; /** diff --git a/core/flyout_base.ts b/core/flyout_base.ts index 18f84480c..ccfb91ed0 100644 --- a/core/flyout_base.ts +++ b/core/flyout_base.ts @@ -11,19 +11,22 @@ */ // Former goog.module ID: Blockly.Flyout -import type {Abstract as AbstractEvent} from './events/events_abstract.js'; import type {Block} from './block.js'; import {BlockSvg} from './block_svg.js'; import * as browserEvents from './browser_events.js'; import * as common from './common.js'; import {ComponentManager} from './component_manager.js'; +import {MANUALLY_DISABLED} from './constants.js'; import {DeleteArea} from './delete_area.js'; +import type {Abstract as AbstractEvent} from './events/events_abstract.js'; +import {EventType} from './events/type.js'; import * as eventUtils from './events/utils.js'; import {FlyoutButton} from './flyout_button.js'; import {FlyoutMetricsManager} from './flyout_metrics_manager.js'; +import {IAutoHideable} from './interfaces/i_autohideable.js'; import type {IFlyout} from './interfaces/i_flyout.js'; -import {MANUALLY_DISABLED} from './constants.js'; import type {Options} from './options.js'; +import * as renderManagement from './render_management.js'; import {ScrollbarPair} from './scrollbar_pair.js'; import * as blocks from './serialization/blocks.js'; import * as Tooltip from './tooltip.js'; @@ -32,12 +35,10 @@ import * as dom from './utils/dom.js'; import * as idGenerator from './utils/idgenerator.js'; import {Svg} from './utils/svg.js'; import * as toolbox from './utils/toolbox.js'; +import * as utilsXml from './utils/xml.js'; import * as Variables from './variables.js'; import {WorkspaceSvg} from './workspace_svg.js'; -import * as utilsXml from './utils/xml.js'; import * as Xml from './xml.js'; -import * as renderManagement from './render_management.js'; -import {IAutoHideable} from './interfaces/i_autohideable.js'; enum FlyoutItemType { BLOCK = 'block', @@ -427,7 +428,7 @@ export abstract class Flyout targetWorkspace.getComponentManager().addComponent({ component: this, - weight: 1, + weight: ComponentManager.ComponentWeight.FLYOUT_WEIGHT, capabilities: [ ComponentManager.Capability.AUTOHIDEABLE, ComponentManager.Capability.DELETE_AREA, @@ -1070,7 +1071,7 @@ export abstract class Flyout * @param block The flyout block to copy. * @returns Function to call when block is clicked. */ - private blockMouseDown(block: BlockSvg): Function { + private blockMouseDown(block: BlockSvg) { return (e: PointerEvent) => { const gesture = this.targetWorkspace.getGesture(e); if (gesture) { @@ -1138,13 +1139,13 @@ export abstract class Flyout for (let i = 0; i < newVariables.length; i++) { const thisVariable = newVariables[i]; eventUtils.fire( - new (eventUtils.get(eventUtils.VAR_CREATE))(thisVariable), + new (eventUtils.get(EventType.VAR_CREATE))(thisVariable), ); } // Block events come after var events, in case they refer to newly created // variables. - eventUtils.fire(new (eventUtils.get(eventUtils.BLOCK_CREATE))(newBlock)); + eventUtils.fire(new (eventUtils.get(EventType.BLOCK_CREATE))(newBlock)); } if (this.autoClose) { this.hide(); diff --git a/core/flyout_button.ts b/core/flyout_button.ts index e73403d77..b03a8d961 100644 --- a/core/flyout_button.ts +++ b/core/flyout_button.ts @@ -11,6 +11,7 @@ */ // Former goog.module ID: Blockly.FlyoutButton +import type {IASTNodeLocationSvg} from './blockly.js'; import * as browserEvents from './browser_events.js'; import * as Css from './css.js'; import {Coordinate} from './utils/coordinate.js'; @@ -20,7 +21,6 @@ import * as style from './utils/style.js'; import {Svg} from './utils/svg.js'; import type * as toolbox from './utils/toolbox.js'; import type {WorkspaceSvg} from './workspace_svg.js'; -import type {IASTNodeLocationSvg} from './blockly.js'; /** * Class for a button or label in the flyout. diff --git a/core/flyout_metrics_manager.ts b/core/flyout_metrics_manager.ts index fadc5deb5..a291f4c3b 100644 --- a/core/flyout_metrics_manager.ts +++ b/core/flyout_metrics_manager.ts @@ -44,7 +44,7 @@ export class FlyoutMetricsManager extends MetricsManager { let blockBoundingBox; try { blockBoundingBox = this.workspace_.getCanvas().getBBox(); - } catch (e) { + } catch { // Firefox has trouble with hidden elements (Bug 528969). // 2021 Update: It looks like this was fixed around Firefox 77 released in // 2020. diff --git a/core/gesture.ts b/core/gesture.ts index 7970ed006..a71eb861e 100644 --- a/core/gesture.ts +++ b/core/gesture.ts @@ -18,23 +18,24 @@ import './events/events_click.js'; import * as blockAnimations from './block_animations.js'; import type {BlockSvg} from './block_svg.js'; import * as browserEvents from './browser_events.js'; +import {RenderedWorkspaceComment} from './comments.js'; import * as common from './common.js'; import {config} from './config.js'; import * as dropDownDiv from './dropdowndiv.js'; +import {EventType} from './events/type.js'; import * as eventUtils from './events/utils.js'; import type {Field} from './field.js'; import type {IBubble} from './interfaces/i_bubble.js'; +import {IDraggable, isDraggable} from './interfaces/i_draggable.js'; +import {IDragger} from './interfaces/i_dragger.js'; import type {IFlyout} from './interfaces/i_flyout.js'; +import type {IIcon} from './interfaces/i_icon.js'; +import * as registry from './registry.js'; import * as Tooltip from './tooltip.js'; import * as Touch from './touch.js'; import {Coordinate} from './utils/coordinate.js'; import {WorkspaceDragger} from './workspace_dragger.js'; import type {WorkspaceSvg} from './workspace_svg.js'; -import type {IIcon} from './interfaces/i_icon.js'; -import {IDragger} from './interfaces/i_dragger.js'; -import * as registry from './registry.js'; -import {IDraggable, isDraggable} from './interfaces/i_draggable.js'; -import {RenderedWorkspaceComment} from './comments.js'; /** * Note: In this file "start" refers to pointerdown @@ -599,13 +600,20 @@ export class Gesture { */ handleTouchMove(e: PointerEvent) { const pointerId = Touch.getTouchIdentifierFromEvent(e); - // Update the cache this.cachedPoints.set(pointerId, this.getTouchPoint(e)); if (this.isPinchZoomEnabled && this.cachedPoints.size === 2) { this.handlePinch(e); } else { - this.handleMove(e); + // Handle the move directly instead of calling handleMove + this.updateFromEvent(e); + if (this.workspaceDragger) { + this.workspaceDragger.drag(this.currentDragDeltaXY); + } else if (this.dragger) { + this.dragger.onDrag(this.mostRecentEvent, this.currentDragDeltaXY); + } + e.preventDefault(); + e.stopPropagation(); } } @@ -769,7 +777,7 @@ export class Gesture { */ private fireWorkspaceClick(ws: WorkspaceSvg) { eventUtils.fire( - new (eventUtils.get(eventUtils.CLICK))(null, ws.id, 'workspace'), + new (eventUtils.get(EventType.CLICK))(null, ws.id, 'workspace'), ); } @@ -902,7 +910,7 @@ export class Gesture { ); } // Clicks events are on the start block, even if it was a shadow. - const event = new (eventUtils.get(eventUtils.CLICK))( + const event = new (eventUtils.get(EventType.CLICK))( this.startBlock, this.startWorkspace_.id, 'block', diff --git a/core/grid.ts b/core/grid.ts index 1a5de250e..e2fc054a2 100644 --- a/core/grid.ts +++ b/core/grid.ts @@ -12,10 +12,10 @@ */ // Former goog.module ID: Blockly.Grid -import * as dom from './utils/dom.js'; -import {Coordinate} from './utils/coordinate.js'; -import {Svg} from './utils/svg.js'; import {GridOptions} from './options.js'; +import {Coordinate} from './utils/coordinate.js'; +import * as dom from './utils/dom.js'; +import {Svg} from './utils/svg.js'; /** * Class for a workspace's grid. diff --git a/core/icons.ts b/core/icons.ts index 61d1594b8..fcc7c98c6 100644 --- a/core/icons.ts +++ b/core/icons.ts @@ -4,21 +4,21 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {Icon} from './icons/icon.js'; import {CommentIcon, CommentState} from './icons/comment_icon.js'; -import {MutatorIcon} from './icons/mutator_icon.js'; -import {WarningIcon} from './icons/warning_icon.js'; -import {IconType} from './icons/icon_types.js'; import * as exceptions from './icons/exceptions.js'; +import {Icon} from './icons/icon.js'; +import {IconType} from './icons/icon_types.js'; +import {MutatorIcon} from './icons/mutator_icon.js'; import * as registry from './icons/registry.js'; +import {WarningIcon} from './icons/warning_icon.js'; export { - Icon, CommentIcon, CommentState, - MutatorIcon, - WarningIcon, - IconType, exceptions, + Icon, + IconType, + MutatorIcon, registry, + WarningIcon, }; diff --git a/core/icons/comment_icon.ts b/core/icons/comment_icon.ts index df54560c5..7cf5431d7 100644 --- a/core/icons/comment_icon.ts +++ b/core/icons/comment_icon.ts @@ -8,21 +8,22 @@ import type {Block} from '../block.js'; import type {BlockSvg} from '../block_svg.js'; -import {IconType} from './icon_types.js'; -import {Coordinate} from '../utils.js'; -import * as dom from '../utils/dom.js'; -import * as eventUtils from '../events/utils.js'; -import {Icon} from './icon.js'; -import type {IHasBubble} from '../interfaces/i_has_bubble.js'; -import type {ISerializable} from '../interfaces/i_serializable.js'; -import {Rect} from '../utils/rect.js'; -import * as registry from './registry.js'; -import {Size} from '../utils/size.js'; -import {Svg} from '../utils/svg.js'; import {TextBubble} from '../bubbles/text_bubble.js'; import {TextInputBubble} from '../bubbles/textinput_bubble.js'; -import type {WorkspaceSvg} from '../workspace_svg.js'; +import {EventType} from '../events/type.js'; +import * as eventUtils from '../events/utils.js'; +import type {IHasBubble} from '../interfaces/i_has_bubble.js'; +import type {ISerializable} from '../interfaces/i_serializable.js'; import * as renderManagement from '../render_management.js'; +import {Coordinate} from '../utils.js'; +import * as dom from '../utils/dom.js'; +import {Rect} from '../utils/rect.js'; +import {Size} from '../utils/size.js'; +import {Svg} from '../utils/svg.js'; +import type {WorkspaceSvg} from '../workspace_svg.js'; +import {Icon} from './icon.js'; +import {IconType} from './icon_types.js'; +import * as registry from './registry.js'; /** The size of the comment icon in workspace-scale units. */ const SIZE = 17; @@ -159,7 +160,7 @@ export class CommentIcon extends Icon implements IHasBubble, ISerializable { setText(text: string) { const oldText = this.text; eventUtils.fire( - new (eventUtils.get(eventUtils.BLOCK_CHANGE))( + new (eventUtils.get(EventType.BLOCK_CHANGE))( this.sourceBlock, 'comment', null, @@ -238,7 +239,7 @@ export class CommentIcon extends Icon implements IHasBubble, ISerializable { if (this.text === newText) return; eventUtils.fire( - new (eventUtils.get(eventUtils.BLOCK_CHANGE))( + new (eventUtils.get(EventType.BLOCK_CHANGE))( this.sourceBlock, 'comment', null, @@ -288,7 +289,7 @@ export class CommentIcon extends Icon implements IHasBubble, ISerializable { } eventUtils.fire( - new (eventUtils.get(eventUtils.BUBBLE_OPEN))( + new (eventUtils.get(EventType.BUBBLE_OPEN))( this.sourceBlock, visible, 'comment', diff --git a/core/icons/icon.ts b/core/icons/icon.ts index 6ad953236..30a6b538f 100644 --- a/core/icons/icon.ts +++ b/core/icons/icon.ts @@ -9,12 +9,12 @@ import type {BlockSvg} from '../block_svg.js'; import * as browserEvents from '../browser_events.js'; import {hasBubble} from '../interfaces/i_has_bubble.js'; import type {IIcon} from '../interfaces/i_icon.js'; +import * as tooltip from '../tooltip.js'; import {Coordinate} from '../utils/coordinate.js'; import * as dom from '../utils/dom.js'; import {Size} from '../utils/size.js'; import {Svg} from '../utils/svg.js'; import type {IconType} from './icon_types.js'; -import * as tooltip from '../tooltip.js'; /** * The abstract icon class. Icons are visual elements that live in the top-start diff --git a/core/icons/mutator_icon.ts b/core/icons/mutator_icon.ts index 7fb3fcf3b..d02c7e187 100644 --- a/core/icons/mutator_icon.ts +++ b/core/icons/mutator_icon.ts @@ -6,22 +6,24 @@ // Former goog.module ID: Blockly.Mutator +import type {BlockSvg} from '../block_svg.js'; +import type {BlocklyOptions} from '../blockly_options.js'; +import {MiniWorkspaceBubble} from '../bubbles/mini_workspace_bubble.js'; import type {Abstract} from '../events/events_abstract.js'; import {BlockChange} from '../events/events_block_change.js'; -import type {BlocklyOptions} from '../blockly_options.js'; -import type {BlockSvg} from '../block_svg.js'; -import {Coordinate} from '../utils/coordinate.js'; -import * as dom from '../utils/dom.js'; +import {isBlockChange, isBlockCreate} from '../events/predicates.js'; +import {EventType} from '../events/type.js'; import * as eventUtils from '../events/utils.js'; import type {IHasBubble} from '../interfaces/i_has_bubble.js'; -import {Icon} from './icon.js'; -import {MiniWorkspaceBubble} from '../bubbles/mini_workspace_bubble.js'; +import * as renderManagement from '../render_management.js'; +import {Coordinate} from '../utils/coordinate.js'; +import * as dom from '../utils/dom.js'; import {Rect} from '../utils/rect.js'; import {Size} from '../utils/size.js'; import {Svg} from '../utils/svg.js'; import type {WorkspaceSvg} from '../workspace_svg.js'; +import {Icon} from './icon.js'; import {IconType} from './icon_types.js'; -import * as renderManagement from '../render_management.js'; /** The size of the mutator icon in workspace-scale units. */ const SIZE = 17; @@ -193,7 +195,7 @@ export class MutatorIcon extends Icon implements IHasBubble { } eventUtils.fire( - new (eventUtils.get(eventUtils.BUBBLE_OPEN))( + new (eventUtils.get(EventType.BUBBLE_OPEN))( this.sourceBlock, visible, 'mutator', @@ -307,9 +309,8 @@ export class MutatorIcon extends Icon implements IHasBubble { static isIgnorableMutatorEvent(e: Abstract) { return ( e.isUiEvent || - e.type === eventUtils.CREATE || - (e.type === eventUtils.CHANGE && - (e as BlockChange).element === 'disabled') + isBlockCreate(e) || + (isBlockChange(e) && e.element === 'disabled') ); } @@ -331,7 +332,7 @@ export class MutatorIcon extends Icon implements IHasBubble { if (oldExtraState !== newExtraState) { eventUtils.fire( - new (eventUtils.get(eventUtils.BLOCK_CHANGE))( + new (eventUtils.get(EventType.BLOCK_CHANGE))( this.sourceBlock, 'mutation', null, diff --git a/core/icons/warning_icon.ts b/core/icons/warning_icon.ts index 08f511a60..2744195f9 100644 --- a/core/icons/warning_icon.ts +++ b/core/icons/warning_icon.ts @@ -7,17 +7,18 @@ // Former goog.module ID: Blockly.Warning import type {BlockSvg} from '../block_svg.js'; +import {TextBubble} from '../bubbles/text_bubble.js'; +import {EventType} from '../events/type.js'; +import * as eventUtils from '../events/utils.js'; +import type {IHasBubble} from '../interfaces/i_has_bubble.js'; +import * as renderManagement from '../render_management.js'; +import {Size} from '../utils.js'; import {Coordinate} from '../utils/coordinate.js'; import * as dom from '../utils/dom.js'; -import * as eventUtils from '../events/utils.js'; -import {Icon} from './icon.js'; -import type {IHasBubble} from '../interfaces/i_has_bubble.js'; import {Rect} from '../utils/rect.js'; -import {Size} from '../utils.js'; import {Svg} from '../utils/svg.js'; -import {TextBubble} from '../bubbles/text_bubble.js'; +import {Icon} from './icon.js'; import {IconType} from './icon_types.js'; -import * as renderManagement from '../render_management.js'; /** The size of the warning icon in workspace-scale units. */ const SIZE = 17; @@ -188,7 +189,7 @@ export class WarningIcon extends Icon implements IHasBubble { } eventUtils.fire( - new (eventUtils.get(eventUtils.BUBBLE_OPEN))( + new (eventUtils.get(EventType.BUBBLE_OPEN))( this.sourceBlock, visible, 'warning', diff --git a/core/inputs.ts b/core/inputs.ts index 4b7bfa897..064d37530 100644 --- a/core/inputs.ts +++ b/core/inputs.ts @@ -5,19 +5,19 @@ */ import {Align} from './inputs/align.js'; -import {Input} from './inputs/input.js'; import {DummyInput} from './inputs/dummy_input.js'; import {EndRowInput} from './inputs/end_row_input.js'; +import {Input} from './inputs/input.js'; +import {inputTypes} from './inputs/input_types.js'; import {StatementInput} from './inputs/statement_input.js'; import {ValueInput} from './inputs/value_input.js'; -import {inputTypes} from './inputs/input_types.js'; export { Align, - Input, DummyInput, EndRowInput, + Input, + inputTypes, StatementInput, ValueInput, - inputTypes, }; diff --git a/core/inputs/input.ts b/core/inputs/input.ts index da7cccad5..0907bf449 100644 --- a/core/inputs/input.ts +++ b/core/inputs/input.ts @@ -21,8 +21,8 @@ import type {ConnectionType} from '../connection_type.js'; import type {Field} from '../field.js'; import * as fieldRegistry from '../field_registry.js'; import type {RenderedConnection} from '../rendered_connection.js'; -import {inputTypes} from './input_types.js'; import {Align} from './align.js'; +import {inputTypes} from './input_types.js'; /** Class for an input with optional fields. */ export class Input { diff --git a/core/insertion_marker_manager.ts b/core/insertion_marker_manager.ts index 376297f10..13d630420 100644 --- a/core/insertion_marker_manager.ts +++ b/core/insertion_marker_manager.ts @@ -11,20 +11,20 @@ */ // Former goog.module ID: Blockly.InsertionMarkerManager -import {finishQueuedRenders} from './render_management.js'; import * as blockAnimations from './block_animations.js'; import type {BlockSvg} from './block_svg.js'; import * as common from './common.js'; import {ComponentManager} from './component_manager.js'; import {config} from './config.js'; -import * as blocks from './serialization/blocks.js'; import * as eventUtils from './events/utils.js'; import type {IDeleteArea} from './interfaces/i_delete_area.js'; import type {IDragTarget} from './interfaces/i_drag_target.js'; +import * as renderManagement from './render_management.js'; +import {finishQueuedRenders} from './render_management.js'; import type {RenderedConnection} from './rendered_connection.js'; +import * as blocks from './serialization/blocks.js'; import type {Coordinate} from './utils/coordinate.js'; import type {WorkspaceSvg} from './workspace_svg.js'; -import * as renderManagement from './render_management.js'; /** Represents a nearby valid connection. */ interface CandidateConnection { @@ -529,7 +529,7 @@ export class InsertionMarkerManager { local.getSourceBlock(), local, ); - } catch (e) { + } catch { // It's possible that the number of connections on the local block has // changed since the insertion marker was originally created. Let's // recreate the insertion marker and try again. In theory we could diff --git a/core/insertion_marker_previewer.ts b/core/insertion_marker_previewer.ts index 3cc9f1a04..2343b9adc 100644 --- a/core/insertion_marker_previewer.ts +++ b/core/insertion_marker_previewer.ts @@ -5,15 +5,15 @@ */ import {BlockSvg} from './block_svg.js'; -import {IConnectionPreviewer} from './interfaces/i_connection_previewer.js'; -import {RenderedConnection} from './rendered_connection.js'; -import {WorkspaceSvg} from './workspace_svg.js'; -import * as blocks from './serialization/blocks.js'; -import * as eventUtils from './events/utils.js'; -import * as renderManagement from './render_management.js'; -import * as registry from './registry.js'; -import {Renderer as ZelosRenderer} from './renderers/zelos/renderer.js'; import {ConnectionType} from './connection_type.js'; +import * as eventUtils from './events/utils.js'; +import {IConnectionPreviewer} from './interfaces/i_connection_previewer.js'; +import * as registry from './registry.js'; +import * as renderManagement from './render_management.js'; +import {RenderedConnection} from './rendered_connection.js'; +import {Renderer as ZelosRenderer} from './renderers/zelos/renderer.js'; +import * as blocks from './serialization/blocks.js'; +import {WorkspaceSvg} from './workspace_svg.js'; export class InsertionMarkerPreviewer implements IConnectionPreviewer { private readonly workspace: WorkspaceSvg; diff --git a/core/interfaces/i_ast_node_location_with_block.ts b/core/interfaces/i_ast_node_location_with_block.ts index a00603864..b04234fd4 100644 --- a/core/interfaces/i_ast_node_location_with_block.ts +++ b/core/interfaces/i_ast_node_location_with_block.ts @@ -6,8 +6,8 @@ // Former goog.module ID: Blockly.IASTNodeLocationWithBlock -import type {IASTNodeLocation} from './i_ast_node_location.js'; import type {Block} from '../block.js'; +import type {IASTNodeLocation} from './i_ast_node_location.js'; /** * An AST node location that has an associated block. diff --git a/core/interfaces/i_bounded_element.ts b/core/interfaces/i_bounded_element.ts index a32df5985..aac26855b 100644 --- a/core/interfaces/i_bounded_element.ts +++ b/core/interfaces/i_bounded_element.ts @@ -4,9 +4,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -import type {Rect} from '../utils/rect.js'; // Former goog.module ID: Blockly.IBoundedElement +import type {Rect} from '../utils/rect.js'; + /** * A bounded element interface. */ diff --git a/core/interfaces/i_bubble.ts b/core/interfaces/i_bubble.ts index e27fccafd..d31ce9c9d 100644 --- a/core/interfaces/i_bubble.ts +++ b/core/interfaces/i_bubble.ts @@ -4,9 +4,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -import type {Coordinate} from '../utils/coordinate.js'; // Former goog.module ID: Blockly.IBubble +import type {Coordinate} from '../utils/coordinate.js'; import type {IContextMenu} from './i_contextmenu.js'; import type {IDraggable} from './i_draggable.js'; diff --git a/core/interfaces/i_comment_icon.ts b/core/interfaces/i_comment_icon.ts index 09b071110..9801a8d6e 100644 --- a/core/interfaces/i_comment_icon.ts +++ b/core/interfaces/i_comment_icon.ts @@ -4,11 +4,11 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {IconType} from '../icons/icon_types.js'; import {CommentState} from '../icons/comment_icon.js'; -import {IIcon, isIcon} from './i_icon.js'; +import {IconType} from '../icons/icon_types.js'; import {Size} from '../utils/size.js'; import {IHasBubble, hasBubble} from './i_has_bubble.js'; +import {IIcon, isIcon} from './i_icon.js'; import {ISerializable, isSerializable} from './i_serializable.js'; export interface ICommentIcon extends IIcon, IHasBubble, ISerializable { @@ -26,7 +26,7 @@ export interface ICommentIcon extends IIcon, IHasBubble, ISerializable { } /** Checks whether the given object is an ICommentIcon. */ -export function isCommentIcon(obj: Object): obj is ICommentIcon { +export function isCommentIcon(obj: object): obj is ICommentIcon { return ( isIcon(obj) && hasBubble(obj) && diff --git a/core/interfaces/i_connection_checker.ts b/core/interfaces/i_connection_checker.ts index 8bb0fcc73..352b719d6 100644 --- a/core/interfaces/i_connection_checker.ts +++ b/core/interfaces/i_connection_checker.ts @@ -4,9 +4,10 @@ * SPDX-License-Identifier: Apache-2.0 */ +// Former goog.module ID: Blockly.IConnectionChecker + import type {Connection} from '../connection.js'; import type {RenderedConnection} from '../rendered_connection.js'; -// Former goog.module ID: Blockly.IConnectionChecker /** * Class for connection type checking logic. diff --git a/core/interfaces/i_drag_target.ts b/core/interfaces/i_drag_target.ts index 3fa060232..395b23451 100644 --- a/core/interfaces/i_drag_target.ts +++ b/core/interfaces/i_drag_target.ts @@ -4,13 +4,11 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {Rect} from '../utils/rect.js'; - -import {IDraggable} from './i_draggable.js'; - // Former goog.module ID: Blockly.IDragTarget +import {Rect} from '../utils/rect.js'; import type {IComponent} from './i_component.js'; +import {IDraggable} from './i_draggable.js'; /** * Interface for a component with custom behaviour when a block or bubble is diff --git a/core/interfaces/i_flyout.ts b/core/interfaces/i_flyout.ts index 84067f755..c79be344c 100644 --- a/core/interfaces/i_flyout.ts +++ b/core/interfaces/i_flyout.ts @@ -6,13 +6,13 @@ // Former goog.module ID: Blockly.IFlyout -import type {WorkspaceSvg} from '../workspace_svg.js'; import type {BlockSvg} from '../block_svg.js'; -import type {Coordinate} from '../utils/coordinate.js'; -import type {FlyoutDefinition} from '../utils/toolbox.js'; -import type {Svg} from '../utils/svg.js'; -import type {IRegistrable} from './i_registrable.js'; import {FlyoutItem} from '../flyout_base.js'; +import type {Coordinate} from '../utils/coordinate.js'; +import type {Svg} from '../utils/svg.js'; +import type {FlyoutDefinition} from '../utils/toolbox.js'; +import type {WorkspaceSvg} from '../workspace_svg.js'; +import type {IRegistrable} from './i_registrable.js'; /** * Interface for a flyout. diff --git a/core/interfaces/i_keyboard_accessible.ts b/core/interfaces/i_keyboard_accessible.ts index 50e85b08e..4d04e9d4f 100644 --- a/core/interfaces/i_keyboard_accessible.ts +++ b/core/interfaces/i_keyboard_accessible.ts @@ -4,9 +4,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {KeyboardShortcut} from '../shortcut_registry.js'; // Former goog.module ID: Blockly.IKeyboardAccessible +import {KeyboardShortcut} from '../shortcut_registry.js'; + /** * An interface for an object that handles keyboard shortcuts. */ diff --git a/core/interfaces/i_legacy_procedure_blocks.ts b/core/interfaces/i_legacy_procedure_blocks.ts index 3bd7e19bf..d74eaec22 100644 --- a/core/interfaces/i_legacy_procedure_blocks.ts +++ b/core/interfaces/i_legacy_procedure_blocks.ts @@ -28,7 +28,7 @@ export interface LegacyProcedureDefBlock { /** @internal */ export function isLegacyProcedureDefBlock( - block: Object, + block: object, ): block is LegacyProcedureDefBlock { return (block as any).getProcedureDef !== undefined; } @@ -41,7 +41,7 @@ export interface LegacyProcedureCallBlock { /** @internal */ export function isLegacyProcedureCallBlock( - block: Object, + block: object, ): block is LegacyProcedureCallBlock { return ( (block as any).getProcedureCall !== undefined && diff --git a/core/interfaces/i_metrics_manager.ts b/core/interfaces/i_metrics_manager.ts index 52b9644df..bb4d54da4 100644 --- a/core/interfaces/i_metrics_manager.ts +++ b/core/interfaces/i_metrics_manager.ts @@ -4,15 +4,16 @@ * SPDX-License-Identifier: Apache-2.0 */ +// Former goog.module ID: Blockly.IMetricsManager + import type { + AbsoluteMetrics, ContainerRegion, ToolboxMetrics, - AbsoluteMetrics, UiMetrics, } from '../metrics_manager.js'; -import type {Size} from '../utils/size.js'; import type {Metrics} from '../utils/metrics.js'; -// Former goog.module ID: Blockly.IMetricsManager +import type {Size} from '../utils/size.js'; /** * Interface for a metrics manager. diff --git a/core/interfaces/i_positionable.ts b/core/interfaces/i_positionable.ts index 19843d153..4ea7dafa0 100644 --- a/core/interfaces/i_positionable.ts +++ b/core/interfaces/i_positionable.ts @@ -4,10 +4,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -import type {Rect} from '../utils/rect.js'; -import type {UiMetrics} from '../metrics_manager.js'; // Former goog.module ID: Blockly.IPositionable +import type {UiMetrics} from '../metrics_manager.js'; +import type {Rect} from '../utils/rect.js'; import type {IComponent} from './i_component.js'; /** diff --git a/core/interfaces/i_procedure_block.ts b/core/interfaces/i_procedure_block.ts index 3744eb183..f85380527 100644 --- a/core/interfaces/i_procedure_block.ts +++ b/core/interfaces/i_procedure_block.ts @@ -4,9 +4,10 @@ * SPDX-License-Identifier: Apache-2.0 */ +// Former goog.module ID: Blockly.procedures.IProcedureBlock + import type {Block} from '../block.js'; import {IProcedureModel} from './i_procedure_model.js'; -// Former goog.module ID: Blockly.procedures.IProcedureBlock /** The interface for a block which models a procedure. */ export interface IProcedureBlock { diff --git a/core/interfaces/i_selectable.ts b/core/interfaces/i_selectable.ts index 7cf9ad98c..972b0adb1 100644 --- a/core/interfaces/i_selectable.ts +++ b/core/interfaces/i_selectable.ts @@ -24,7 +24,7 @@ export interface ISelectable { } /** Checks whether the given object is an ISelectable. */ -export function isSelectable(obj: Object): obj is ISelectable { +export function isSelectable(obj: object): obj is ISelectable { return ( typeof (obj as any).id === 'string' && (obj as any).workspace !== undefined && diff --git a/core/interfaces/i_selectable_toolbox_item.ts b/core/interfaces/i_selectable_toolbox_item.ts index b3267efd0..890d4e370 100644 --- a/core/interfaces/i_selectable_toolbox_item.ts +++ b/core/interfaces/i_selectable_toolbox_item.ts @@ -4,9 +4,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -import type {FlyoutItemInfoArray} from '../utils/toolbox'; // Former goog.module ID: Blockly.ISelectableToolboxItem +import type {FlyoutItemInfoArray} from '../utils/toolbox'; import type {IToolboxItem} from './i_toolbox_item.js'; /** diff --git a/core/interfaces/i_serializer.ts b/core/interfaces/i_serializer.ts index 29c257915..0e8302f39 100644 --- a/core/interfaces/i_serializer.ts +++ b/core/interfaces/i_serializer.ts @@ -22,8 +22,6 @@ export interface ISerializer { */ priority: number; - /* eslint-disable no-unused-vars, valid-jsdoc */ - /** * Saves the state of the plugin or system. * @@ -31,7 +29,7 @@ export interface ISerializer { * @returns A JS object containing the system's state, or null if there is no * state to record. */ - save(workspace: Workspace): Object | null; + save(workspace: Workspace): object | null; /* eslint-enable valid-jsdoc */ /** @@ -42,7 +40,7 @@ export interface ISerializer { * @param workspace The workspace the system to deserialize is associated * with. */ - load(state: Object, workspace: Workspace): void; + load(state: object, workspace: Workspace): void; /** * Clears the state of the plugin or system. @@ -52,4 +50,3 @@ export interface ISerializer { */ clear(workspace: Workspace): void; } -/* eslint-enable no-unused-vars */ diff --git a/core/interfaces/i_toolbox.ts b/core/interfaces/i_toolbox.ts index a236d4442..2756099ec 100644 --- a/core/interfaces/i_toolbox.ts +++ b/core/interfaces/i_toolbox.ts @@ -6,11 +6,11 @@ // Former goog.module ID: Blockly.IToolbox +import type {ToolboxInfo} from '../utils/toolbox.js'; +import type {WorkspaceSvg} from '../workspace_svg.js'; +import type {IFlyout} from './i_flyout.js'; import type {IRegistrable} from './i_registrable.js'; import type {IToolboxItem} from './i_toolbox_item.js'; -import type {ToolboxInfo} from '../utils/toolbox.js'; -import type {IFlyout} from './i_flyout.js'; -import type {WorkspaceSvg} from '../workspace_svg.js'; /** * Interface for a toolbox. diff --git a/core/keyboard_nav/ast_node.ts b/core/keyboard_nav/ast_node.ts index 7985ac6dc..3b0efae3f 100644 --- a/core/keyboard_nav/ast_node.ts +++ b/core/keyboard_nav/ast_node.ts @@ -16,14 +16,14 @@ import {Block} from '../block.js'; import type {Connection} from '../connection.js'; import {ConnectionType} from '../connection_type.js'; import type {Field} from '../field.js'; +import {FlyoutItem} from '../flyout_base.js'; +import {FlyoutButton} from '../flyout_button.js'; import type {Input} from '../inputs/input.js'; import type {IASTNodeLocation} from '../interfaces/i_ast_node_location.js'; import type {IASTNodeLocationWithBlock} from '../interfaces/i_ast_node_location_with_block.js'; import {Coordinate} from '../utils/coordinate.js'; import type {Workspace} from '../workspace.js'; -import {FlyoutButton} from '../flyout_button.js'; import {WorkspaceSvg} from '../workspace_svg.js'; -import {FlyoutItem} from '../flyout_base.js'; /** * Class for an AST node. diff --git a/core/keyboard_nav/basic_cursor.ts b/core/keyboard_nav/basic_cursor.ts index 95b5e2f4d..752614152 100644 --- a/core/keyboard_nav/basic_cursor.ts +++ b/core/keyboard_nav/basic_cursor.ts @@ -13,7 +13,6 @@ // Former goog.module ID: Blockly.BasicCursor import * as registry from '../registry.js'; - import {ASTNode} from './ast_node.js'; import {Cursor} from './cursor.js'; diff --git a/core/keyboard_nav/cursor.ts b/core/keyboard_nav/cursor.ts index da0a50f1c..92279da56 100644 --- a/core/keyboard_nav/cursor.ts +++ b/core/keyboard_nav/cursor.ts @@ -13,7 +13,6 @@ // Former goog.module ID: Blockly.Cursor import * as registry from '../registry.js'; - import {ASTNode} from './ast_node.js'; import {Marker} from './marker.js'; diff --git a/core/keyboard_nav/marker.ts b/core/keyboard_nav/marker.ts index 9653e6b85..e3b438e6e 100644 --- a/core/keyboard_nav/marker.ts +++ b/core/keyboard_nav/marker.ts @@ -12,9 +12,7 @@ */ // Former goog.module ID: Blockly.Marker -/* eslint-disable-next-line no-unused-vars */ import type {MarkerSvg} from '../renderers/common/marker_svg.js'; - import type {ASTNode} from './ast_node.js'; /** diff --git a/core/keyboard_nav/tab_navigate_cursor.ts b/core/keyboard_nav/tab_navigate_cursor.ts index 20fd3dabb..0392887a1 100644 --- a/core/keyboard_nav/tab_navigate_cursor.ts +++ b/core/keyboard_nav/tab_navigate_cursor.ts @@ -13,7 +13,6 @@ // Former goog.module ID: Blockly.TabNavigateCursor import type {Field} from '../field.js'; - import {ASTNode} from './ast_node.js'; import {BasicCursor} from './basic_cursor.js'; diff --git a/core/layer_manager.ts b/core/layer_manager.ts index e181e6801..e7663b1b7 100644 --- a/core/layer_manager.ts +++ b/core/layer_manager.ts @@ -4,12 +4,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {WorkspaceSvg} from './workspace_svg.js'; -import * as dom from './utils/dom.js'; -import {Svg} from './utils/svg.js'; import {IRenderedElement} from './interfaces/i_rendered_element.js'; import * as layerNums from './layers.js'; import {Coordinate} from './utils/coordinate.js'; +import * as dom from './utils/dom.js'; +import {Svg} from './utils/svg.js'; +import {WorkspaceSvg} from './workspace_svg.js'; /** @internal */ export class LayerManager { diff --git a/core/menuitem.ts b/core/menuitem.ts index aad914b68..e9e7dc0db 100644 --- a/core/menuitem.ts +++ b/core/menuitem.ts @@ -41,7 +41,7 @@ export class MenuItem { private highlight = false; /** Bound function to call when this menu item is clicked. */ - private actionHandler: Function | null = null; + private actionHandler: ((obj: this) => void) | null = null; /** * @param content Text caption to display as the content of the item, or a diff --git a/core/observable_procedure_map.ts b/core/observable_procedure_map.ts index e8722bcbf..2f1010755 100644 --- a/core/observable_procedure_map.ts +++ b/core/observable_procedure_map.ts @@ -4,9 +4,9 @@ * SPDX-License-Identifier: Apache-2.0 */ +import {isObservable} from './interfaces/i_observable.js'; import {IProcedureMap} from './interfaces/i_procedure_map.js'; import type {IProcedureModel} from './interfaces/i_procedure_model.js'; -import {isObservable} from './interfaces/i_observable.js'; export class ObservableProcedureMap extends Map diff --git a/core/procedures.ts b/core/procedures.ts index 680abb8af..a16b0fce4 100644 --- a/core/procedures.ts +++ b/core/procedures.ts @@ -15,29 +15,37 @@ import {Blocks} from './blocks.js'; import * as common from './common.js'; import type {Abstract} from './events/events_abstract.js'; import type {BubbleOpen} from './events/events_bubble_open.js'; +import { + isBlockChange, + isBlockCreate, + isBlockDelete, + isBlockFieldIntermediateChange, + isBubbleOpen, +} from './events/predicates.js'; +import {EventType} from './events/type.js'; import * as eventUtils from './events/utils.js'; import {Field, UnattachedFieldError} from './field.js'; -import {Msg} from './msg.js'; -import {Names} from './names.js'; -import {IParameterModel} from './interfaces/i_parameter_model.js'; -import {IProcedureMap} from './interfaces/i_procedure_map.js'; -import {IProcedureModel} from './interfaces/i_procedure_model.js'; -import { - IProcedureBlock, - isProcedureBlock, -} from './interfaces/i_procedure_block.js'; +import {MutatorIcon} from './icons.js'; import { isLegacyProcedureCallBlock, isLegacyProcedureDefBlock, ProcedureBlock, ProcedureTuple, } from './interfaces/i_legacy_procedure_blocks.js'; +import {IParameterModel} from './interfaces/i_parameter_model.js'; +import { + IProcedureBlock, + isProcedureBlock, +} from './interfaces/i_procedure_block.js'; +import {IProcedureMap} from './interfaces/i_procedure_map.js'; +import {IProcedureModel} from './interfaces/i_procedure_model.js'; +import {Msg} from './msg.js'; +import {Names} from './names.js'; import {ObservableProcedureMap} from './observable_procedure_map.js'; import * as utilsXml from './utils/xml.js'; import * as Variables from './variables.js'; import type {Workspace} from './workspace.js'; import type {WorkspaceSvg} from './workspace_svg.js'; -import {MutatorIcon} from './icons.js'; /** * String for use in the "custom" attribute of a category in toolbox XML. @@ -354,9 +362,8 @@ function updateMutatorFlyout(workspace: WorkspaceSvg) { * @internal */ export function mutatorOpenListener(e: Abstract) { - if (e.type !== eventUtils.BUBBLE_OPEN) { - return; - } + if (!isBubbleOpen(e)) return; + const bubbleEvent = e as BubbleOpen; if ( !(bubbleEvent.bubbleType === 'mutator' && bubbleEvent.isOpen) || @@ -386,10 +393,10 @@ export function mutatorOpenListener(e: Abstract) { */ function mutatorChangeListener(e: Abstract) { if ( - e.type !== eventUtils.BLOCK_CREATE && - e.type !== eventUtils.BLOCK_DELETE && - e.type !== eventUtils.BLOCK_CHANGE && - e.type !== eventUtils.BLOCK_FIELD_INTERMEDIATE_CHANGE + !isBlockCreate(e) && + !isBlockDelete(e) && + !isBlockChange(e) && + !isBlockFieldIntermediateChange(e) ) { return; } @@ -454,7 +461,7 @@ export function mutateCallers(defBlock: Block) { // definition mutation. eventUtils.setRecordUndo(false); eventUtils.fire( - new (eventUtils.get(eventUtils.BLOCK_CHANGE))( + new (eventUtils.get(EventType.BLOCK_CHANGE))( caller, 'mutation', null, @@ -500,11 +507,11 @@ export function getDefinition( } export { - ObservableProcedureMap, IParameterModel, IProcedureBlock, - isProcedureBlock, IProcedureMap, IProcedureModel, + isProcedureBlock, + ObservableProcedureMap, ProcedureTuple, }; diff --git a/core/registry.ts b/core/registry.ts index d46c36f48..60e804979 100644 --- a/core/registry.ts +++ b/core/registry.ts @@ -8,11 +8,15 @@ import type {Abstract} from './events/events_abstract.js'; import type {Field} from './field.js'; -import type {IConnectionChecker} from './interfaces/i_connection_checker.js'; -import type {IFlyout} from './interfaces/i_flyout.js'; -import type {IMetricsManager} from './interfaces/i_metrics_manager.js'; -import type {IIcon} from './interfaces/i_icon.js'; import type {Input} from './inputs/input.js'; +import type {IConnectionChecker} from './interfaces/i_connection_checker.js'; +import type {IConnectionPreviewer} from './interfaces/i_connection_previewer.js'; +import type {ICopyData, ICopyable} from './interfaces/i_copyable.js'; +import type {IDragger} from './interfaces/i_dragger.js'; +import type {IFlyout} from './interfaces/i_flyout.js'; +import type {IIcon} from './interfaces/i_icon.js'; +import type {IMetricsManager} from './interfaces/i_metrics_manager.js'; +import type {IPaster} from './interfaces/i_paster.js'; import type {ISerializer} from './interfaces/i_serializer.js'; import type {IToolbox} from './interfaces/i_toolbox.js'; import type {Cursor} from './keyboard_nav/cursor.js'; @@ -20,10 +24,6 @@ import type {Options} from './options.js'; import type {Renderer} from './renderers/common/renderer.js'; import type {Theme} from './theme.js'; import type {ToolboxItem} from './toolbox/toolbox_item.js'; -import type {IPaster} from './interfaces/i_paster.js'; -import type {ICopyData, ICopyable} from './interfaces/i_copyable.js'; -import type {IConnectionPreviewer} from './interfaces/i_connection_previewer.js'; -import type {IDragger} from './interfaces/i_dragger.js'; /** * A map of maps. With the keys being the type and name of the class we are @@ -193,7 +193,7 @@ export function register( * @param registryItem A class or object that we are checking for the required * properties. */ -function validate(type: string, registryItem: Function | AnyDuringMigration) { +function validate(type: string, registryItem: AnyDuringMigration) { switch (type) { case String(Type.FIELD): if (typeof registryItem.fromJson !== 'function') { diff --git a/core/render_management.ts b/core/render_management.ts index 3e84efead..c3fe2e342 100644 --- a/core/render_management.ts +++ b/core/render_management.ts @@ -5,8 +5,8 @@ */ import {BlockSvg} from './block_svg.js'; -import * as userAgent from './utils/useragent.js'; import * as eventUtils from './events/utils.js'; +import * as userAgent from './utils/useragent.js'; import type {WorkspaceSvg} from './workspace_svg.js'; /** The set of all blocks in need of rendering which don't have parents. */ diff --git a/core/rendered_connection.ts b/core/rendered_connection.ts index 5aa6f7f75..27c532839 100644 --- a/core/rendered_connection.ts +++ b/core/rendered_connection.ts @@ -146,7 +146,7 @@ export class RenderedConnection extends Connection { } // Raise it to the top for extra visibility. const selected = common.getSelected() == rootBlock; - selected || rootBlock.addSelect(); + if (!selected) rootBlock.addSelect(); let dx = staticConnection.x + config.snapRadius + @@ -169,7 +169,7 @@ export class RenderedConnection extends Connection { this.x; } rootBlock.moveBy(dx, dy, ['bump']); - selected || rootBlock.removeSelect(); + if (!selected) rootBlock.removeSelect(); } /** @@ -389,9 +389,10 @@ export class RenderedConnection extends Connection { if (block.isCollapsed()) { // This block should only be partially revealed since it is collapsed. connections = []; - block.outputConnection && connections.push(block.outputConnection); - block.nextConnection && connections.push(block.nextConnection); - block.previousConnection && connections.push(block.previousConnection); + if (block.outputConnection) connections.push(block.outputConnection); + if (block.nextConnection) connections.push(block.nextConnection); + if (block.previousConnection) + connections.push(block.previousConnection); } else { // Show all connections of this block. connections = block.getConnections_(true); diff --git a/core/renderers/common/block_rendering.ts b/core/renderers/common/block_rendering.ts index 7c87a8928..27fbbd538 100644 --- a/core/renderers/common/block_rendering.ts +++ b/core/renderers/common/block_rendering.ts @@ -30,7 +30,6 @@ import {SquareCorner} from '../measurables/square_corner.js'; import {StatementInput} from '../measurables/statement_input.js'; import {TopRow} from '../measurables/top_row.js'; import {Types} from '../measurables/types.js'; - import {Drawer} from './drawer.js'; import type {IPathObject} from './i_path_object.js'; import {RenderInfo} from './info.js'; @@ -45,7 +44,10 @@ import {Renderer} from './renderer.js'; * @param rendererClass The new renderer class to register. * @throws {Error} if a renderer with the same name has already been registered. */ -export function register(name: string, rendererClass: Function) { +export function register( + name: string, + rendererClass: new (name: string) => Renderer, +) { registry.register(registry.Type.RENDERER, name, rendererClass); } @@ -78,43 +80,45 @@ export function init( renderer.init(theme, opt_rendererOverrides); return renderer; } -export {BottomRow}; -export {Connection}; -export {Drawer}; -export {ExternalValueInput}; -export {Field}; -export {Hat}; -export {Icon}; -export {InRowSpacer}; -export {InlineInput}; -export {InputConnection}; -export {InputRow}; -export {IPathObject}; -export {JaggedEdge}; -export {MarkerSvg}; -export {Measurable}; -export {NextConnection}; -export {OutputConnection}; -export {PathObject}; -export {PreviousConnection}; -export {Renderer}; -export {RenderInfo}; -export {RoundCorner}; -export {Row}; -export {SpacerRow}; -export {SquareCorner}; -export {StatementInput}; -export {TopRow}; -export {Types}; +export { + BottomRow, + Connection, + Drawer, + ExternalValueInput, + Field, + Hat, + Icon, + InlineInput, + InputConnection, + InputRow, + InRowSpacer, + IPathObject, + JaggedEdge, + MarkerSvg, + Measurable, + NextConnection, + OutputConnection, + PathObject, + PreviousConnection, + Renderer, + RenderInfo, + RoundCorner, + Row, + SpacerRow, + SquareCorner, + StatementInput, + TopRow, + Types, +}; export { - OutsideCorners, - InsideCorners, - StartHat, - Notch, - PuzzleTab, - JaggedTeeth, BaseShape, - DynamicShape, ConstantProvider, + DynamicShape, + InsideCorners, + JaggedTeeth, + Notch, + OutsideCorners, + PuzzleTab, + StartHat, } from './constants.js'; diff --git a/core/renderers/common/drawer.ts b/core/renderers/common/drawer.ts index 17d54eea5..59a856011 100644 --- a/core/renderers/common/drawer.ts +++ b/core/renderers/common/drawer.ts @@ -7,6 +7,7 @@ // Former goog.module ID: Blockly.blockRendering.Drawer import type {BlockSvg} from '../../block_svg.js'; +import {ConnectionType} from '../../connection_type.js'; import {Coordinate} from '../../utils.js'; import * as svgPaths from '../../utils/svg_paths.js'; import {Connection} from '../measurables/connection.js'; @@ -17,11 +18,9 @@ import type {InlineInput} from '../measurables/inline_input.js'; import type {PreviousConnection} from '../measurables/previous_connection.js'; import type {Row} from '../measurables/row.js'; import {Types} from '../measurables/types.js'; - -import {isDynamicShape, isNotch, isPuzzleTab} from './constants.js'; import type {ConstantProvider, Notch, PuzzleTab} from './constants.js'; +import {isDynamicShape, isNotch, isPuzzleTab} from './constants.js'; import type {RenderInfo} from './info.js'; -import {ConnectionType} from '../../connection_type.js'; /** * An object that draws a block based on the given rendering information. diff --git a/core/renderers/common/i_path_object.ts b/core/renderers/common/i_path_object.ts index 30033f18e..3a78035e1 100644 --- a/core/renderers/common/i_path_object.ts +++ b/core/renderers/common/i_path_object.ts @@ -6,11 +6,11 @@ // Former goog.module ID: Blockly.blockRendering.IPathObject -import type {BlockStyle} from '../../theme.js'; import type {BlockSvg} from '../../block_svg.js'; -import type {ConstantProvider} from './constants.js'; import type {RenderedConnection} from '../../rendered_connection.js'; +import type {BlockStyle} from '../../theme.js'; import type {Coordinate} from '../../utils/coordinate.js'; +import type {ConstantProvider} from './constants.js'; /** * An interface for a block's path object. diff --git a/core/renderers/common/info.ts b/core/renderers/common/info.ts index 995124c1b..ff073ace4 100644 --- a/core/renderers/common/info.ts +++ b/core/renderers/common/info.ts @@ -7,13 +7,16 @@ // Former goog.module ID: Blockly.blockRendering.RenderInfo import type {BlockSvg} from '../../block_svg.js'; -import {Input} from '../../inputs/input.js'; import {Align} from '../../inputs/align.js'; +import {DummyInput} from '../../inputs/dummy_input.js'; +import {EndRowInput} from '../../inputs/end_row_input.js'; +import {Input} from '../../inputs/input.js'; +import {StatementInput} from '../../inputs/statement_input.js'; +import {ValueInput} from '../../inputs/value_input.js'; import type {RenderedConnection} from '../../rendered_connection.js'; import type {Measurable} from '../measurables/base.js'; import {BottomRow} from '../measurables/bottom_row.js'; -import {DummyInput} from '../../inputs/dummy_input.js'; -import {EndRowInput} from '../../inputs/end_row_input.js'; +import {Connection} from '../measurables/connection.js'; import {ExternalValueInput} from '../measurables/external_value_input.js'; import {Field} from '../measurables/field.js'; import {Hat} from '../measurables/hat.js'; @@ -30,14 +33,10 @@ import type {Row} from '../measurables/row.js'; import {SpacerRow} from '../measurables/spacer_row.js'; import {SquareCorner} from '../measurables/square_corner.js'; import {StatementInput as StatementInputMeasurable} from '../measurables/statement_input.js'; -import {StatementInput} from '../../inputs/statement_input.js'; import {TopRow} from '../measurables/top_row.js'; import {Types} from '../measurables/types.js'; -import {ValueInput} from '../../inputs/value_input.js'; - import type {ConstantProvider} from './constants.js'; import type {Renderer} from './renderer.js'; -import {Connection} from '../measurables/connection.js'; /** * An object containing all sizing information needed to draw this block. diff --git a/core/renderers/common/marker_svg.ts b/core/renderers/common/marker_svg.ts index 995783576..927c377f4 100644 --- a/core/renderers/common/marker_svg.ts +++ b/core/renderers/common/marker_svg.ts @@ -12,8 +12,10 @@ import '../../events/events_marker_move.js'; import type {BlockSvg} from '../../block_svg.js'; import type {Connection} from '../../connection.js'; import {ConnectionType} from '../../connection_type.js'; +import {EventType} from '../../events/type.js'; import * as eventUtils from '../../events/utils.js'; import type {Field} from '../../field.js'; +import {FlyoutButton} from '../../flyout_button.js'; import type {IASTNodeLocationSvg} from '../../interfaces/i_ast_node_location_svg.js'; import {ASTNode} from '../../keyboard_nav/ast_node.js'; import type {Marker} from '../../keyboard_nav/marker.js'; @@ -22,9 +24,7 @@ import * as dom from '../../utils/dom.js'; import {Svg} from '../../utils/svg.js'; import * as svgPaths from '../../utils/svg_paths.js'; import type {WorkspaceSvg} from '../../workspace_svg.js'; - import type {ConstantProvider, Notch, PuzzleTab} from './constants.js'; -import {FlyoutButton} from '../../flyout_button.js'; /** The name of the CSS class for a cursor. */ const CURSOR_CLASS = 'blocklyCursor'; @@ -176,9 +176,11 @@ export class MarkerSvg { // Ensures the marker will be visible immediately after the move. const animate = this.currentMarkerSvg!.childNodes[0]; - if (animate !== undefined) { - (animate as SVGAnimationElement).beginElement && - (animate as SVGAnimationElement).beginElement(); + if ( + animate !== undefined && + (animate as SVGAnimationElement).beginElement + ) { + (animate as SVGAnimationElement).beginElement(); } } @@ -620,7 +622,7 @@ export class MarkerSvg { */ private fireMarkerEvent(oldNode: ASTNode, curNode: ASTNode) { const curBlock = curNode.getSourceBlock(); - const event = new (eventUtils.get(eventUtils.MARKER_MOVE))( + const event = new (eventUtils.get(EventType.MARKER_MOVE))( curBlock, this.isCursor(), oldNode, diff --git a/core/renderers/common/path_object.ts b/core/renderers/common/path_object.ts index d5c0850a1..0f46cf3a4 100644 --- a/core/renderers/common/path_object.ts +++ b/core/renderers/common/path_object.ts @@ -13,7 +13,6 @@ import type {BlockStyle} from '../../theme.js'; import {Coordinate} from '../../utils/coordinate.js'; import * as dom from '../../utils/dom.js'; import {Svg} from '../../utils/svg.js'; - import type {ConstantProvider} from './constants.js'; import type {IPathObject} from './i_path_object.js'; diff --git a/core/renderers/common/renderer.ts b/core/renderers/common/renderer.ts index 15a958db4..d3bff56a7 100644 --- a/core/renderers/common/renderer.ts +++ b/core/renderers/common/renderer.ts @@ -18,15 +18,14 @@ import type {IRegistrable} from '../../interfaces/i_registrable.js'; import type {Marker} from '../../keyboard_nav/marker.js'; import type {RenderedConnection} from '../../rendered_connection.js'; import type {BlockStyle, Theme} from '../../theme.js'; +import * as deprecation from '../../utils/deprecation.js'; import type {WorkspaceSvg} from '../../workspace_svg.js'; - import {ConstantProvider} from './constants.js'; import {Drawer} from './drawer.js'; import type {IPathObject} from './i_path_object.js'; import {RenderInfo} from './info.js'; import {MarkerSvg} from './marker_svg.js'; import {PathObject} from './path_object.js'; -import * as deprecation from '../../utils/deprecation.js'; /** * The base class for a block renderer. diff --git a/core/renderers/geras/drawer.ts b/core/renderers/geras/drawer.ts index 29bcbfab4..542b21ff9 100644 --- a/core/renderers/geras/drawer.ts +++ b/core/renderers/geras/drawer.ts @@ -10,7 +10,6 @@ import type {BlockSvg} from '../../block_svg.js'; import * as svgPaths from '../../utils/svg_paths.js'; import {Drawer as BaseDrawer} from '../common/drawer.js'; import type {Row} from '../measurables/row.js'; - import type {ConstantProvider} from './constants.js'; import {Highlighter} from './highlighter.js'; import type {RenderInfo} from './info.js'; diff --git a/core/renderers/geras/highlighter.ts b/core/renderers/geras/highlighter.ts index 664e74fb8..efcb4e2df 100644 --- a/core/renderers/geras/highlighter.ts +++ b/core/renderers/geras/highlighter.ts @@ -13,7 +13,6 @@ import type {Row} from '../measurables/row.js'; import {SpacerRow} from '../measurables/spacer_row.js'; import type {TopRow} from '../measurables/top_row.js'; import {Types} from '../measurables/types.js'; - import type { HighlightConstantProvider, InsideCorner, diff --git a/core/renderers/geras/info.ts b/core/renderers/geras/info.ts index 6565f226b..b9cc1c59c 100644 --- a/core/renderers/geras/info.ts +++ b/core/renderers/geras/info.ts @@ -7,22 +7,21 @@ // Former goog.module ID: Blockly.geras.RenderInfo import type {BlockSvg} from '../../block_svg.js'; +import {DummyInput} from '../../inputs/dummy_input.js'; +import {EndRowInput} from '../../inputs/end_row_input.js'; import type {Input} from '../../inputs/input.js'; +import {StatementInput} from '../../inputs/statement_input.js'; +import {ValueInput} from '../../inputs/value_input.js'; import {RenderInfo as BaseRenderInfo} from '../common/info.js'; import type {Measurable} from '../measurables/base.js'; import type {BottomRow} from '../measurables/bottom_row.js'; -import {DummyInput} from '../../inputs/dummy_input.js'; -import {EndRowInput} from '../../inputs/end_row_input.js'; import {ExternalValueInput} from '../measurables/external_value_input.js'; import type {Field} from '../measurables/field.js'; import {InRowSpacer} from '../measurables/in_row_spacer.js'; import type {InputRow} from '../measurables/input_row.js'; import type {Row} from '../measurables/row.js'; -import {StatementInput} from '../../inputs/statement_input.js'; import type {TopRow} from '../measurables/top_row.js'; import {Types} from '../measurables/types.js'; -import {ValueInput} from '../../inputs/value_input.js'; - import type {ConstantProvider} from './constants.js'; import {InlineInput} from './measurables/inline_input.js'; import {StatementInput as StatementInputMeasurable} from './measurables/statement_input.js'; diff --git a/core/renderers/geras/measurables/inline_input.ts b/core/renderers/geras/measurables/inline_input.ts index 9ed85ad52..931b9e762 100644 --- a/core/renderers/geras/measurables/inline_input.ts +++ b/core/renderers/geras/measurables/inline_input.ts @@ -6,7 +6,6 @@ // Former goog.module ID: Blockly.geras.InlineInput -/* eslint-disable-next-line no-unused-vars */ import type {Input} from '../../../inputs/input.js'; import type {ConstantProvider as BaseConstantProvider} from '../../../renderers/common/constants.js'; import {InlineInput as BaseInlineInput} from '../../../renderers/measurables/inline_input.js'; diff --git a/core/renderers/geras/measurables/statement_input.ts b/core/renderers/geras/measurables/statement_input.ts index 5ce3f854a..c6eba8dc0 100644 --- a/core/renderers/geras/measurables/statement_input.ts +++ b/core/renderers/geras/measurables/statement_input.ts @@ -6,7 +6,6 @@ // Former goog.module ID: Blockly.geras.StatementInput -/* eslint-disable-next-line no-unused-vars */ import type {Input} from '../../../inputs/input.js'; import type {ConstantProvider as BaseConstantProvider} from '../../../renderers/common/constants.js'; import {StatementInput as BaseStatementInput} from '../../../renderers/measurables/statement_input.js'; diff --git a/core/renderers/geras/path_object.ts b/core/renderers/geras/path_object.ts index 6b058e5a7..c1d689535 100644 --- a/core/renderers/geras/path_object.ts +++ b/core/renderers/geras/path_object.ts @@ -12,7 +12,6 @@ import * as colour from '../../utils/colour.js'; import * as dom from '../../utils/dom.js'; import {Svg} from '../../utils/svg.js'; import {PathObject as BasePathObject} from '../common/path_object.js'; - import type {ConstantProvider} from './constants.js'; /** diff --git a/core/renderers/geras/renderer.ts b/core/renderers/geras/renderer.ts index 06062e9bc..aba8fc3ea 100644 --- a/core/renderers/geras/renderer.ts +++ b/core/renderers/geras/renderer.ts @@ -11,7 +11,6 @@ import type {BlockStyle, Theme} from '../../theme.js'; import * as blockRendering from '../common/block_rendering.js'; import type {RenderInfo as BaseRenderInfo} from '../common/info.js'; import {Renderer as BaseRenderer} from '../common/renderer.js'; - import {ConstantProvider} from './constants.js'; import {Drawer} from './drawer.js'; import {HighlightConstantProvider} from './highlight_constants.js'; diff --git a/core/renderers/measurables/base.ts b/core/renderers/measurables/base.ts index e429a3a3e..15f4f3683 100644 --- a/core/renderers/measurables/base.ts +++ b/core/renderers/measurables/base.ts @@ -7,7 +7,6 @@ // Former goog.module ID: Blockly.blockRendering.Measurable import type {ConstantProvider} from '../common/constants.js'; - import {Types} from './types.js'; /** diff --git a/core/renderers/measurables/bottom_row.ts b/core/renderers/measurables/bottom_row.ts index 66cbbd34e..2506610e7 100644 --- a/core/renderers/measurables/bottom_row.ts +++ b/core/renderers/measurables/bottom_row.ts @@ -8,7 +8,6 @@ import type {BlockSvg} from '../../block_svg.js'; import type {ConstantProvider} from '../common/constants.js'; - import type {NextConnection} from './next_connection.js'; import {Row} from './row.js'; import {Types} from './types.js'; diff --git a/core/renderers/measurables/connection.ts b/core/renderers/measurables/connection.ts index 5744eaab4..c5a3e4ce0 100644 --- a/core/renderers/measurables/connection.ts +++ b/core/renderers/measurables/connection.ts @@ -6,10 +6,8 @@ // Former goog.module ID: Blockly.blockRendering.Connection -/* eslint-disable-next-line no-unused-vars */ import type {RenderedConnection} from '../../rendered_connection.js'; import type {ConstantProvider, Shape} from '../common/constants.js'; - import {Measurable} from './base.js'; import {Types} from './types.js'; diff --git a/core/renderers/measurables/external_value_input.ts b/core/renderers/measurables/external_value_input.ts index 9b9dac15f..4dea75413 100644 --- a/core/renderers/measurables/external_value_input.ts +++ b/core/renderers/measurables/external_value_input.ts @@ -6,10 +6,8 @@ // Former goog.module ID: Blockly.blockRendering.ExternalValueInput -/* eslint-disable-next-line no-unused-vars */ import type {Input} from '../../inputs/input.js'; import type {ConstantProvider} from '../common/constants.js'; - import {InputConnection} from './input_connection.js'; import {Types} from './types.js'; diff --git a/core/renderers/measurables/field.ts b/core/renderers/measurables/field.ts index 8d6c4d60b..2c080d2e3 100644 --- a/core/renderers/measurables/field.ts +++ b/core/renderers/measurables/field.ts @@ -6,11 +6,9 @@ // Former goog.module ID: Blockly.blockRendering.Field -/* eslint-disable-next-line no-unused-vars */ import type {Field as BlocklyField} from '../../field.js'; import type {Input} from '../../inputs/input.js'; import type {ConstantProvider} from '../common/constants.js'; - import {Measurable} from './base.js'; import {Types} from './types.js'; diff --git a/core/renderers/measurables/hat.ts b/core/renderers/measurables/hat.ts index 2a0a50586..477a2095b 100644 --- a/core/renderers/measurables/hat.ts +++ b/core/renderers/measurables/hat.ts @@ -7,7 +7,6 @@ // Former goog.module ID: Blockly.blockRendering.Hat import type {ConstantProvider} from '../common/constants.js'; - import {Measurable} from './base.js'; import {Types} from './types.js'; diff --git a/core/renderers/measurables/icon.ts b/core/renderers/measurables/icon.ts index 98e3f722d..424cc67be 100644 --- a/core/renderers/measurables/icon.ts +++ b/core/renderers/measurables/icon.ts @@ -6,10 +6,8 @@ // Former goog.module ID: Blockly.blockRendering.Icon -/* eslint-disable-next-line no-unused-vars */ import type {IIcon as BlocklyIcon} from '../../interfaces/i_icon.js'; import type {ConstantProvider} from '../common/constants.js'; - import {Measurable} from './base.js'; import {Types} from './types.js'; diff --git a/core/renderers/measurables/in_row_spacer.ts b/core/renderers/measurables/in_row_spacer.ts index 19b9efa67..ec64e71a2 100644 --- a/core/renderers/measurables/in_row_spacer.ts +++ b/core/renderers/measurables/in_row_spacer.ts @@ -7,7 +7,6 @@ // Former goog.module ID: Blockly.blockRendering.InRowSpacer import type {ConstantProvider} from '../common/constants.js'; - import {Measurable} from './base.js'; import {Types} from './types.js'; diff --git a/core/renderers/measurables/inline_input.ts b/core/renderers/measurables/inline_input.ts index 9738ddfc2..307daef8d 100644 --- a/core/renderers/measurables/inline_input.ts +++ b/core/renderers/measurables/inline_input.ts @@ -6,10 +6,8 @@ // Former goog.module ID: Blockly.blockRendering.InlineInput -/* eslint-disable-next-line no-unused-vars */ import type {Input} from '../../inputs/input.js'; import type {ConstantProvider} from '../common/constants.js'; - import {InputConnection} from './input_connection.js'; import {Types} from './types.js'; diff --git a/core/renderers/measurables/input_connection.ts b/core/renderers/measurables/input_connection.ts index 69ac82d21..e4e265b4e 100644 --- a/core/renderers/measurables/input_connection.ts +++ b/core/renderers/measurables/input_connection.ts @@ -10,7 +10,6 @@ import type {BlockSvg} from '../../block_svg.js'; import type {Input} from '../../inputs/input.js'; import type {RenderedConnection} from '../../rendered_connection.js'; import type {ConstantProvider} from '../common/constants.js'; - import {Connection} from './connection.js'; import {Types} from './types.js'; diff --git a/core/renderers/measurables/input_row.ts b/core/renderers/measurables/input_row.ts index 229975cfe..a9924246f 100644 --- a/core/renderers/measurables/input_row.ts +++ b/core/renderers/measurables/input_row.ts @@ -7,7 +7,6 @@ // Former goog.module ID: Blockly.blockRendering.InputRow import type {ConstantProvider} from '../common/constants.js'; - import {ExternalValueInput} from './external_value_input.js'; import {InputConnection} from './input_connection.js'; import {Row} from './row.js'; diff --git a/core/renderers/measurables/jagged_edge.ts b/core/renderers/measurables/jagged_edge.ts index a7711dc28..daca25121 100644 --- a/core/renderers/measurables/jagged_edge.ts +++ b/core/renderers/measurables/jagged_edge.ts @@ -7,7 +7,6 @@ // Former goog.module ID: Blockly.blockRendering.JaggedEdge import type {ConstantProvider} from '../common/constants.js'; - import {Measurable} from './base.js'; import {Types} from './types.js'; diff --git a/core/renderers/measurables/next_connection.ts b/core/renderers/measurables/next_connection.ts index 50ac75ad2..ea22001ed 100644 --- a/core/renderers/measurables/next_connection.ts +++ b/core/renderers/measurables/next_connection.ts @@ -8,7 +8,6 @@ import type {RenderedConnection} from '../../rendered_connection.js'; import type {ConstantProvider} from '../common/constants.js'; - import {Connection} from './connection.js'; import {Types} from './types.js'; diff --git a/core/renderers/measurables/output_connection.ts b/core/renderers/measurables/output_connection.ts index 4a3f995f4..1fa074949 100644 --- a/core/renderers/measurables/output_connection.ts +++ b/core/renderers/measurables/output_connection.ts @@ -8,7 +8,6 @@ import type {RenderedConnection} from '../../rendered_connection.js'; import type {ConstantProvider} from '../common/constants.js'; - import {Connection} from './connection.js'; import {Types} from './types.js'; diff --git a/core/renderers/measurables/previous_connection.ts b/core/renderers/measurables/previous_connection.ts index 44ebeebfa..1314eb6a4 100644 --- a/core/renderers/measurables/previous_connection.ts +++ b/core/renderers/measurables/previous_connection.ts @@ -8,7 +8,6 @@ import type {RenderedConnection} from '../../rendered_connection.js'; import type {ConstantProvider} from '../common/constants.js'; - import {Connection} from './connection.js'; import {Types} from './types.js'; diff --git a/core/renderers/measurables/round_corner.ts b/core/renderers/measurables/round_corner.ts index 37fc0fb98..60bbed707 100644 --- a/core/renderers/measurables/round_corner.ts +++ b/core/renderers/measurables/round_corner.ts @@ -7,7 +7,6 @@ // Former goog.module ID: Blockly.blockRendering.RoundCorner import type {ConstantProvider} from '../common/constants.js'; - import {Measurable} from './base.js'; import {Types} from './types.js'; diff --git a/core/renderers/measurables/row.ts b/core/renderers/measurables/row.ts index 4208c84b7..613ec6ace 100644 --- a/core/renderers/measurables/row.ts +++ b/core/renderers/measurables/row.ts @@ -7,7 +7,6 @@ // Former goog.module ID: Blockly.blockRendering.Row import type {ConstantProvider} from '../common/constants.js'; - import type {Measurable} from './base.js'; import type {InRowSpacer} from './in_row_spacer.js'; import type {InputConnection} from './input_connection.js'; diff --git a/core/renderers/measurables/spacer_row.ts b/core/renderers/measurables/spacer_row.ts index 6fae98d87..0e49d3088 100644 --- a/core/renderers/measurables/spacer_row.ts +++ b/core/renderers/measurables/spacer_row.ts @@ -7,7 +7,6 @@ // Former goog.module ID: Blockly.blockRendering.SpacerRow import type {ConstantProvider} from '../common/constants.js'; - import {InRowSpacer} from './in_row_spacer.js'; import {Row} from './row.js'; import {Types} from './types.js'; diff --git a/core/renderers/measurables/square_corner.ts b/core/renderers/measurables/square_corner.ts index 560f37b65..29749ac05 100644 --- a/core/renderers/measurables/square_corner.ts +++ b/core/renderers/measurables/square_corner.ts @@ -7,7 +7,6 @@ // Former goog.module ID: Blockly.blockRendering.SquareCorner import type {ConstantProvider} from '../common/constants.js'; - import {Measurable} from './base.js'; import {Types} from './types.js'; diff --git a/core/renderers/measurables/statement_input.ts b/core/renderers/measurables/statement_input.ts index cdc7c6680..91fe5b64a 100644 --- a/core/renderers/measurables/statement_input.ts +++ b/core/renderers/measurables/statement_input.ts @@ -6,10 +6,8 @@ // Former goog.module ID: Blockly.blockRendering.StatementInput -/* eslint-disable-next-line no-unused-vars */ import type {Input} from '../../inputs/input.js'; import type {ConstantProvider} from '../common/constants.js'; - import {InputConnection} from './input_connection.js'; import {Types} from './types.js'; diff --git a/core/renderers/measurables/top_row.ts b/core/renderers/measurables/top_row.ts index b14908606..b87ce4ad7 100644 --- a/core/renderers/measurables/top_row.ts +++ b/core/renderers/measurables/top_row.ts @@ -8,7 +8,6 @@ import type {BlockSvg} from '../../block_svg.js'; import type {ConstantProvider} from '../common/constants.js'; - import {Hat} from './hat.js'; import type {PreviousConnection} from './previous_connection.js'; import {Row} from './row.js'; diff --git a/core/renderers/measurables/types.ts b/core/renderers/measurables/types.ts index a378fc18e..a145b1563 100644 --- a/core/renderers/measurables/types.ts +++ b/core/renderers/measurables/types.ts @@ -13,6 +13,9 @@ import type {Row} from './row.js'; * Types of rendering elements. */ class TypesContainer { + // This class is very non-idiomatic for typescript, so we have to use + // the Function type to make it happy. + // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type [index: string]: number | Function; NONE = 0; // None diff --git a/core/renderers/thrasos/info.ts b/core/renderers/thrasos/info.ts index 789897209..23772a9af 100644 --- a/core/renderers/thrasos/info.ts +++ b/core/renderers/thrasos/info.ts @@ -15,7 +15,6 @@ import {InRowSpacer} from '../measurables/in_row_spacer.js'; import type {Row} from '../measurables/row.js'; import type {TopRow} from '../measurables/top_row.js'; import {Types} from '../measurables/types.js'; - import type {Renderer} from './renderer.js'; /** diff --git a/core/renderers/thrasos/renderer.ts b/core/renderers/thrasos/renderer.ts index 513cadc78..d12eaf941 100644 --- a/core/renderers/thrasos/renderer.ts +++ b/core/renderers/thrasos/renderer.ts @@ -9,7 +9,6 @@ import type {BlockSvg} from '../../block_svg.js'; import * as blockRendering from '../common/block_rendering.js'; import {Renderer as BaseRenderer} from '../common/renderer.js'; - import {RenderInfo} from './info.js'; /** diff --git a/core/renderers/zelos/constants.ts b/core/renderers/zelos/constants.ts index c50e66510..66ba6c958 100644 --- a/core/renderers/zelos/constants.ts +++ b/core/renderers/zelos/constants.ts @@ -13,8 +13,8 @@ import * as utilsColour from '../../utils/colour.js'; import * as dom from '../../utils/dom.js'; import {Svg} from '../../utils/svg.js'; import * as svgPaths from '../../utils/svg_paths.js'; -import {ConstantProvider as BaseConstantProvider} from '../common/constants.js'; import type {Shape} from '../common/constants.js'; +import {ConstantProvider as BaseConstantProvider} from '../common/constants.js'; /** An object containing sizing and path information about inside corners. */ export interface InsideCorners { diff --git a/core/renderers/zelos/drawer.ts b/core/renderers/zelos/drawer.ts index 009247aea..e5b91c1e6 100644 --- a/core/renderers/zelos/drawer.ts +++ b/core/renderers/zelos/drawer.ts @@ -17,7 +17,6 @@ import {OutputConnection} from '../measurables/output_connection.js'; import type {Row} from '../measurables/row.js'; import type {SpacerRow} from '../measurables/spacer_row.js'; import {Types} from '../measurables/types.js'; - import type {InsideCorners} from './constants.js'; import type {RenderInfo} from './info.js'; import type {StatementInput} from './measurables/inputs.js'; diff --git a/core/renderers/zelos/info.ts b/core/renderers/zelos/info.ts index 623f0a3b0..dd3702fe5 100644 --- a/core/renderers/zelos/info.ts +++ b/core/renderers/zelos/info.ts @@ -7,24 +7,23 @@ // Former goog.module ID: Blockly.zelos.RenderInfo import type {BlockSvg} from '../../block_svg.js'; -import {DummyInput} from '../../inputs/dummy_input.js'; -import {EndRowInput} from '../../inputs/end_row_input.js'; import {FieldImage} from '../../field_image.js'; import {FieldLabel} from '../../field_label.js'; import {FieldTextInput} from '../../field_textinput.js'; -import {Input} from '../../inputs/input.js'; import {Align} from '../../inputs/align.js'; +import {DummyInput} from '../../inputs/dummy_input.js'; +import {EndRowInput} from '../../inputs/end_row_input.js'; +import {Input} from '../../inputs/input.js'; +import {StatementInput} from '../../inputs/statement_input.js'; +import {ValueInput} from '../../inputs/value_input.js'; import {RenderInfo as BaseRenderInfo} from '../common/info.js'; import type {Measurable} from '../measurables/base.js'; import {Field} from '../measurables/field.js'; import {InRowSpacer} from '../measurables/in_row_spacer.js'; import {InputConnection} from '../measurables/input_connection.js'; -import {StatementInput} from '../../inputs/statement_input.js'; import type {Row} from '../measurables/row.js'; import type {SpacerRow} from '../measurables/spacer_row.js'; import {Types} from '../measurables/types.js'; -import {ValueInput} from '../../inputs/value_input.js'; - import type {ConstantProvider, InsideCorners} from './constants.js'; import {BottomRow} from './measurables/bottom_row.js'; import {StatementInput as StatementInputMeasurable} from './measurables/inputs.js'; diff --git a/core/renderers/zelos/marker_svg.ts b/core/renderers/zelos/marker_svg.ts index 4805e264b..395ece0b0 100644 --- a/core/renderers/zelos/marker_svg.ts +++ b/core/renderers/zelos/marker_svg.ts @@ -15,7 +15,6 @@ import {Svg} from '../../utils/svg.js'; import type {WorkspaceSvg} from '../../workspace_svg.js'; import type {ConstantProvider as BaseConstantProvider} from '../common/constants.js'; import {MarkerSvg as BaseMarkerSvg} from '../common/marker_svg.js'; - import type {ConstantProvider as ZelosConstantProvider} from './constants.js'; /** diff --git a/core/renderers/zelos/measurables/inputs.ts b/core/renderers/zelos/measurables/inputs.ts index d405574e0..98dd9f33e 100644 --- a/core/renderers/zelos/measurables/inputs.ts +++ b/core/renderers/zelos/measurables/inputs.ts @@ -6,7 +6,6 @@ // Former goog.module ID: Blockly.zelos.StatementInput -/* eslint-disable-next-line no-unused-vars */ import type {Input} from '../../../inputs/input.js'; import type {ConstantProvider} from '../../../renderers/common/constants.js'; import {StatementInput as BaseStatementInput} from '../../../renderers/measurables/statement_input.js'; diff --git a/core/renderers/zelos/path_object.ts b/core/renderers/zelos/path_object.ts index fdc6ab8a6..060190ee1 100644 --- a/core/renderers/zelos/path_object.ts +++ b/core/renderers/zelos/path_object.ts @@ -12,7 +12,6 @@ import type {BlockStyle} from '../../theme.js'; import * as dom from '../../utils/dom.js'; import {Svg} from '../../utils/svg.js'; import {PathObject as BasePathObject} from '../common/path_object.js'; - import type {ConstantProvider} from './constants.js'; /** diff --git a/core/renderers/zelos/renderer.ts b/core/renderers/zelos/renderer.ts index 354a3f35a..b48600a0b 100644 --- a/core/renderers/zelos/renderer.ts +++ b/core/renderers/zelos/renderer.ts @@ -12,17 +12,16 @@ import {InsertionMarkerManager} from '../../insertion_marker_manager.js'; import type {Marker} from '../../keyboard_nav/marker.js'; import type {RenderedConnection} from '../../rendered_connection.js'; import type {BlockStyle} from '../../theme.js'; +import * as deprecation from '../../utils/deprecation.js'; import type {WorkspaceSvg} from '../../workspace_svg.js'; import * as blockRendering from '../common/block_rendering.js'; import type {RenderInfo as BaseRenderInfo} from '../common/info.js'; import {Renderer as BaseRenderer} from '../common/renderer.js'; - import {ConstantProvider} from './constants.js'; import {Drawer} from './drawer.js'; import {RenderInfo} from './info.js'; import {MarkerSvg} from './marker_svg.js'; import {PathObject} from './path_object.js'; -import * as deprecation from '../../utils/deprecation.js'; /** * The zelos renderer. This renderer emulates Scratch-style and MakeCode-style diff --git a/core/serialization.ts b/core/serialization.ts index 8e159bb2b..3eb232a54 100644 --- a/core/serialization.ts +++ b/core/serialization.ts @@ -9,24 +9,24 @@ */ // Former goog.module ID: Blockly.serialization +import {ISerializer} from './interfaces/i_serializer.js'; import * as blocks from './serialization/blocks.js'; import * as exceptions from './serialization/exceptions.js'; import * as priorities from './serialization/priorities.js'; import * as procedures from './serialization/procedures.js'; import * as registry from './serialization/registry.js'; import * as variables from './serialization/variables.js'; -import * as workspaces from './serialization/workspaces.js'; import * as workspaceComments from './serialization/workspace_comments.js'; -import {ISerializer} from './interfaces/i_serializer.js'; +import * as workspaces from './serialization/workspaces.js'; export { blocks, exceptions, + ISerializer, priorities, procedures, registry, variables, - workspaces, workspaceComments, - ISerializer, + workspaces, }; diff --git a/core/serialization/blocks.ts b/core/serialization/blocks.ts index dbb58cffb..b693ff569 100644 --- a/core/serialization/blocks.ts +++ b/core/serialization/blocks.ts @@ -10,16 +10,18 @@ import type {Block} from '../block.js'; import type {BlockSvg} from '../block_svg.js'; import type {Connection} from '../connection.js'; import {MANUALLY_DISABLED} from '../constants.js'; +import {EventType} from '../events/type.js'; import * as eventUtils from '../events/utils.js'; import {inputTypes} from '../inputs/input_types.js'; import {isSerializable} from '../interfaces/i_serializable.js'; import type {ISerializer} from '../interfaces/i_serializer.js'; import * as registry from '../registry.js'; +import * as renderManagement from '../render_management.js'; import * as utilsXml from '../utils/xml.js'; +import {VariableModel} from '../variable_model.js'; +import * as Variables from '../variables.js'; import type {Workspace} from '../workspace.js'; import * as Xml from '../xml.js'; -import * as renderManagement from '../render_management.js'; - import { BadConnectionCheck, MissingBlockType, @@ -29,8 +31,6 @@ import { } from './exceptions.js'; import * as priorities from './priorities.js'; import * as serializationRegistry from './registry.js'; -import * as Variables from '../variables.js'; -import {VariableModel} from '../variable_model.js'; // TODO(#5160): Remove this once lint is fixed. /* eslint-disable no-use-before-define */ @@ -433,7 +433,7 @@ export function appendInternal( if (eventUtils.isEnabled()) { // Block events come after var events, in case they refer to newly created // variables. - eventUtils.fire(new (eventUtils.get(eventUtils.BLOCK_CREATE))(block)); + eventUtils.fire(new (eventUtils.get(EventType.BLOCK_CREATE))(block)); } eventUtils.setGroup(existingGroup); eventUtils.setRecordUndo(prevRecordUndo); @@ -513,9 +513,7 @@ function checkNewVariables( // Fire a VarCreate event for each (if any) new variable created. for (let i = 0; i < newVariables.length; i++) { const thisVariable = newVariables[i]; - eventUtils.fire( - new (eventUtils.get(eventUtils.VAR_CREATE))(thisVariable), - ); + eventUtils.fire(new (eventUtils.get(EventType.VAR_CREATE))(thisVariable)); } } } diff --git a/core/serialization/procedures.ts b/core/serialization/procedures.ts index 55d720604..5e2dd0d28 100644 --- a/core/serialization/procedures.ts +++ b/core/serialization/procedures.ts @@ -7,8 +7,8 @@ import {IParameterModel} from '../interfaces/i_parameter_model.js'; import {IProcedureModel} from '../interfaces/i_procedure_model.js'; import type {ISerializer} from '../interfaces/i_serializer.js'; -import * as priorities from './priorities.js'; import type {Workspace} from '../workspace.js'; +import * as priorities from './priorities.js'; /** Represents the state of a procedure model. */ export interface State { @@ -44,7 +44,7 @@ interface ProcedureModelConstructor { * @param workspace The workspace to load the procedure model into. * @returns The constructed procedure model. */ - loadState(state: Object, workspace: Workspace): ProcedureModel; + loadState(state: object, workspace: Workspace): ProcedureModel; } /** @@ -64,7 +64,7 @@ interface ParameterModelConstructor { * @param workspace The workspace to load the parameter model into. * @returns The constructed parameter model. */ - loadState(state: Object, workspace: Workspace): ParameterModel; + loadState(state: object, workspace: Workspace): ParameterModel; } /** diff --git a/core/serialization/variables.ts b/core/serialization/variables.ts index 69c6cda8c..b714401eb 100644 --- a/core/serialization/variables.ts +++ b/core/serialization/variables.ts @@ -8,7 +8,6 @@ import type {ISerializer} from '../interfaces/i_serializer.js'; import type {Workspace} from '../workspace.js'; - import * as priorities from './priorities.js'; import * as serializationRegistry from './registry.js'; diff --git a/core/serialization/workspace_comments.ts b/core/serialization/workspace_comments.ts index 525274e58..61d1127b3 100644 --- a/core/serialization/workspace_comments.ts +++ b/core/serialization/workspace_comments.ts @@ -4,14 +4,14 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {ISerializer} from '../interfaces/i_serializer.js'; -import {Workspace} from '../workspace.js'; -import * as priorities from './priorities.js'; import type {WorkspaceComment} from '../comments/workspace_comment.js'; import * as eventUtils from '../events/utils.js'; +import {ISerializer} from '../interfaces/i_serializer.js'; import {Coordinate} from '../utils/coordinate.js'; -import * as serializationRegistry from './registry.js'; import {Size} from '../utils/size.js'; +import {Workspace} from '../workspace.js'; +import * as priorities from './priorities.js'; +import * as serializationRegistry from './registry.js'; export interface State { id?: string; diff --git a/core/serialization/workspaces.ts b/core/serialization/workspaces.ts index 871060196..f201de19e 100644 --- a/core/serialization/workspaces.ts +++ b/core/serialization/workspaces.ts @@ -6,11 +6,11 @@ // Former goog.module ID: Blockly.serialization.workspaces +import {EventType} from '../events/type.js'; import * as eventUtils from '../events/utils.js'; import type {ISerializer} from '../interfaces/i_serializer.js'; import * as registry from '../registry.js'; import * as dom from '../utils/dom.js'; -// eslint-disable-next-line no-unused-vars import type {Workspace} from '../workspace.js'; import {WorkspaceSvg} from '../workspace_svg.js'; @@ -87,7 +87,7 @@ export function load( } dom.stopTextWidthCache(); - eventUtils.fire(new (eventUtils.get(eventUtils.FINISHED_LOADING))(workspace)); + eventUtils.fire(new (eventUtils.get(EventType.FINISHED_LOADING))(workspace)); eventUtils.setGroup(existingGroup); eventUtils.setRecordUndo(prevRecordUndo); diff --git a/core/shortcut_items.ts b/core/shortcut_items.ts index 6a7e29d26..3a32b687f 100644 --- a/core/shortcut_items.ts +++ b/core/shortcut_items.ts @@ -9,16 +9,16 @@ import {BlockSvg} from './block_svg.js'; import * as clipboard from './clipboard.js'; import * as common from './common.js'; +import * as eventUtils from './events/utils.js'; import {Gesture} from './gesture.js'; import {ICopyData, isCopyable} from './interfaces/i_copyable.js'; import {isDeletable} from './interfaces/i_deletable.js'; -import {KeyboardShortcut, ShortcutRegistry} from './shortcut_registry.js'; -import {KeyCodes} from './utils/keycodes.js'; -import type {WorkspaceSvg} from './workspace_svg.js'; import {isDraggable} from './interfaces/i_draggable.js'; -import * as eventUtils from './events/utils.js'; +import {KeyboardShortcut, ShortcutRegistry} from './shortcut_registry.js'; import {Coordinate} from './utils/coordinate.js'; +import {KeyCodes} from './utils/keycodes.js'; import {Rect} from './utils/rect.js'; +import type {WorkspaceSvg} from './workspace_svg.js'; /** * Object holding the names of the default shortcut items. diff --git a/core/toolbox/category.ts b/core/toolbox/category.ts index 6ff159b0b..5bdeca223 100644 --- a/core/toolbox/category.ts +++ b/core/toolbox/category.ts @@ -16,6 +16,11 @@ import type {ICollapsibleToolboxItem} from '../interfaces/i_collapsible_toolbox_ import type {ISelectableToolboxItem} from '../interfaces/i_selectable_toolbox_item.js'; import type {IToolbox} from '../interfaces/i_toolbox.js'; import type {IToolboxItem} from '../interfaces/i_toolbox_item.js'; +import * as registry from '../registry.js'; +import * as aria from '../utils/aria.js'; +import * as colourUtils from '../utils/colour.js'; +import * as dom from '../utils/dom.js'; +import * as parsing from '../utils/parsing.js'; import type { CategoryInfo, DynamicCategoryInfo, @@ -24,13 +29,7 @@ import type { FlyoutItemInfoArray, StaticCategoryInfo, } from '../utils/toolbox.js'; -import * as registry from '../registry.js'; -import * as aria from '../utils/aria.js'; -import * as colourUtils from '../utils/colour.js'; -import * as dom from '../utils/dom.js'; -import * as parsing from '../utils/parsing.js'; import * as toolbox from '../utils/toolbox.js'; - import {ToolboxItem} from './toolbox_item.js'; /** @@ -248,9 +247,11 @@ export class ToolboxCategory const nestedPadding = `${ ToolboxCategory.nestedPadding * this.getLevel() }px`; - this.workspace_.RTL - ? (rowDiv.style.paddingRight = nestedPadding) - : (rowDiv.style.paddingLeft = nestedPadding); + if (this.workspace_.RTL) { + rowDiv.style.paddingRight = nestedPadding; + } else { + rowDiv.style.paddingLeft = nestedPadding; + } return rowDiv; } @@ -564,9 +565,11 @@ export class ToolboxCategory setDisabled(isDisabled: boolean) { this.isDisabled_ = isDisabled; this.getDiv()!.setAttribute('disabled', `${isDisabled}`); - isDisabled - ? this.getDiv()!.setAttribute('disabled', 'true') - : this.getDiv()!.removeAttribute('disabled'); + if (isDisabled) { + this.getDiv()!.setAttribute('disabled', 'true'); + } else { + this.getDiv()!.removeAttribute('disabled'); + } } /** diff --git a/core/toolbox/collapsible_category.ts b/core/toolbox/collapsible_category.ts index faea8edcb..e51db4f68 100644 --- a/core/toolbox/collapsible_category.ts +++ b/core/toolbox/collapsible_category.ts @@ -18,7 +18,6 @@ import * as registry from '../registry.js'; import * as aria from '../utils/aria.js'; import * as dom from '../utils/dom.js'; import * as toolbox from '../utils/toolbox.js'; - import {ToolboxCategory} from './category.js'; import {ToolboxSeparator} from './separator.js'; diff --git a/core/toolbox/separator.ts b/core/toolbox/separator.ts index ec003daf6..5e899054a 100644 --- a/core/toolbox/separator.ts +++ b/core/toolbox/separator.ts @@ -16,7 +16,6 @@ import type {IToolbox} from '../interfaces/i_toolbox.js'; import * as registry from '../registry.js'; import * as dom from '../utils/dom.js'; import type * as toolbox from '../utils/toolbox.js'; - import {ToolboxItem} from './toolbox_item.js'; /** diff --git a/core/toolbox/toolbox.ts b/core/toolbox/toolbox.ts index e0fb62e23..5d6eee90a 100644 --- a/core/toolbox/toolbox.ts +++ b/core/toolbox/toolbox.ts @@ -12,8 +12,6 @@ // Former goog.module ID: Blockly.Toolbox // Unused import preserved for side-effects. Remove if unneeded. -import '../events/events_toolbox_item_select.js'; - import {BlockSvg} from '../block_svg.js'; import type {BlocklyOptions} from '../blockly_options.js'; import * as browserEvents from '../browser_events.js'; @@ -21,9 +19,12 @@ import * as common from '../common.js'; import {ComponentManager} from '../component_manager.js'; import * as Css from '../css.js'; import {DeleteArea} from '../delete_area.js'; +import '../events/events_toolbox_item_select.js'; +import {EventType} from '../events/type.js'; import * as eventUtils from '../events/utils.js'; import type {IAutoHideable} from '../interfaces/i_autohideable.js'; import type {ICollapsibleToolboxItem} from '../interfaces/i_collapsible_toolbox_item.js'; +import {isDeletable} from '../interfaces/i_deletable.js'; import type {IDraggable} from '../interfaces/i_draggable.js'; import type {IFlyout} from '../interfaces/i_flyout.js'; import type {IKeyboardAccessible} from '../interfaces/i_keyboard_accessible.js'; @@ -43,7 +44,6 @@ import * as toolbox from '../utils/toolbox.js'; import type {WorkspaceSvg} from '../workspace_svg.js'; import type {ToolboxCategory} from './category.js'; import {CollapsibleToolboxCategory} from './collapsible_category.js'; -import {isDeletable} from '../interfaces/i_deletable.js'; /** * Class for a Toolbox. @@ -157,7 +157,7 @@ export class Toolbox themeManager.subscribe(this.HtmlDiv, 'toolboxForegroundColour', 'color'); this.workspace_.getComponentManager().addComponent({ component: this, - weight: 1, + weight: ComponentManager.ComponentWeight.TOOLBOX_WEIGHT, capabilities: [ ComponentManager.Capability.AUTOHIDEABLE, ComponentManager.Capability.DELETE_AREA, @@ -963,7 +963,7 @@ export class Toolbox if (oldItem === newItem) { newElement = null; } - const event = new (eventUtils.get(eventUtils.TOOLBOX_ITEM_SELECT))( + const event = new (eventUtils.get(EventType.TOOLBOX_ITEM_SELECT))( oldElement, newElement, this.workspace_.id, diff --git a/core/tooltip.ts b/core/tooltip.ts index 0478b91fd..bf379f291 100644 --- a/core/tooltip.ts +++ b/core/tooltip.ts @@ -19,7 +19,7 @@ import * as blocklyString from './utils/string.js'; export type TipInfo = | string | {tooltip: AnyDuringMigration} - | (() => TipInfo | string | Function); + | (() => TipInfo | string); /** * A function that renders custom tooltip UI. diff --git a/core/trashcan.ts b/core/trashcan.ts index 050f506a4..d30c4a4e2 100644 --- a/core/trashcan.ts +++ b/core/trashcan.ts @@ -12,14 +12,14 @@ // Former goog.module ID: Blockly.Trashcan // Unused import preserved for side-effects. Remove if unneeded. -import './events/events_trashcan_open.js'; - import type {BlocklyOptions} from './blockly_options.js'; import * as browserEvents from './browser_events.js'; import {ComponentManager} from './component_manager.js'; import {DeleteArea} from './delete_area.js'; import type {Abstract} from './events/events_abstract.js'; -import type {BlockDelete} from './events/events_block_delete.js'; +import './events/events_trashcan_open.js'; +import {isBlockDelete} from './events/predicates.js'; +import {EventType} from './events/type.js'; import * as eventUtils from './events/utils.js'; import type {IAutoHideable} from './interfaces/i_autohideable.js'; import type {IDraggable} from './interfaces/i_draggable.js'; @@ -35,8 +35,8 @@ import * as dom from './utils/dom.js'; import {Rect} from './utils/rect.js'; import {Size} from './utils/size.js'; import {Svg} from './utils/svg.js'; -import {BlockInfo} from './utils/toolbox.js'; import * as toolbox from './utils/toolbox.js'; +import {BlockInfo} from './utils/toolbox.js'; import type {WorkspaceSvg} from './workspace_svg.js'; /** @@ -247,7 +247,7 @@ export class Trashcan } this.workspace.getComponentManager().addComponent({ component: this, - weight: 1, + weight: ComponentManager.ComponentWeight.TRASHCAN_WEIGHT, capabilities: [ ComponentManager.Capability.AUTOHIDEABLE, ComponentManager.Capability.DELETE_AREA, @@ -557,7 +557,7 @@ export class Trashcan * @param trashcanOpen Whether the flyout is opening. */ private fireUiEvent(trashcanOpen: boolean) { - const uiEvent = new (eventUtils.get(eventUtils.TRASHCAN_OPEN))( + const uiEvent = new (eventUtils.get(EventType.TRASHCAN_OPEN))( trashcanOpen, this.workspace.id, ); @@ -604,30 +604,22 @@ export class Trashcan private onDelete(event: Abstract) { if ( this.workspace.options.maxTrashcanContents <= 0 || - event.type !== eventUtils.BLOCK_DELETE + !isBlockDelete(event) || + event.wasShadow ) { return; } - const deleteEvent = event as BlockDelete; - if (event.type === eventUtils.BLOCK_DELETE && !deleteEvent.wasShadow) { - if (!deleteEvent.oldJson) { - throw new Error('Encountered a delete event without proper oldJson'); - } - const cleanedJson = JSON.stringify( - this.cleanBlockJson(deleteEvent.oldJson), - ); - if (this.contents.includes(cleanedJson)) { - return; - } - this.contents.unshift(cleanedJson); - while ( - this.contents.length > this.workspace.options.maxTrashcanContents - ) { - this.contents.pop(); - } - - this.setMinOpenness(HAS_BLOCKS_LID_ANGLE); + if (!event.oldJson) { + throw new Error('Encountered a delete event without proper oldJson'); } + const cleanedJson = JSON.stringify(this.cleanBlockJson(event.oldJson)); + if (this.contents.includes(cleanedJson)) return; + this.contents.unshift(cleanedJson); + while (this.contents.length > this.workspace.options.maxTrashcanContents) { + this.contents.pop(); + } + + this.setMinOpenness(HAS_BLOCKS_LID_ANGLE); } /** diff --git a/core/utils/dom.ts b/core/utils/dom.ts index e318e7e91..309cd3fae 100644 --- a/core/utils/dom.ts +++ b/core/utils/dom.ts @@ -211,7 +211,7 @@ export function getTextWidth(textElement: SVGTextElement): number { // Attempt to compute fetch the width of the SVG text element. try { width = textElement.getComputedTextLength(); - } catch (e) { + } catch { // In other cases where we fail to get the computed text. Instead, use an // approximation and do not cache the result. At some later point in time // when the block is inserted into the visible DOM, this method will be diff --git a/core/utils/parsing.ts b/core/utils/parsing.ts index 9950b80e6..3f70f5693 100644 --- a/core/utils/parsing.ts +++ b/core/utils/parsing.ts @@ -7,7 +7,6 @@ // Former goog.module ID: Blockly.utils.parsing import {Msg} from '../msg.js'; - import * as colourUtils from './colour.js'; /** diff --git a/core/utils/svg_math.ts b/core/utils/svg_math.ts index 0444787ad..c29d6ae69 100644 --- a/core/utils/svg_math.ts +++ b/core/utils/svg_math.ts @@ -7,7 +7,6 @@ // Former goog.module ID: Blockly.utils.svgMath import type {WorkspaceSvg} from '../workspace_svg.js'; - import {Coordinate} from './coordinate.js'; import {Rect} from './rect.js'; import * as style from './style.js'; diff --git a/core/variable_map.ts b/core/variable_map.ts index bc19b07a5..a67461741 100644 --- a/core/variable_map.ts +++ b/core/variable_map.ts @@ -18,6 +18,7 @@ import './events/events_var_rename.js'; import type {Block} from './block.js'; import * as dialog from './dialog.js'; +import {EventType} from './events/type.js'; import * as eventUtils from './events/utils.js'; import {Msg} from './msg.js'; import {Names} from './names.js'; @@ -119,7 +120,7 @@ export class VariableMap { blocks: Block[], ) { eventUtils.fire( - new (eventUtils.get(eventUtils.VAR_RENAME))(variable, newName), + new (eventUtils.get(EventType.VAR_RENAME))(variable, newName), ); variable.name = newName; for (let i = 0; i < blocks.length; i++) { @@ -158,7 +159,7 @@ export class VariableMap { blocks[i].renameVarById(variable.getId(), conflictVar.getId()); } // Finally delete the original variable, which is now unreferenced. - eventUtils.fire(new (eventUtils.get(eventUtils.VAR_DELETE))(variable)); + eventUtils.fire(new (eventUtils.get(EventType.VAR_DELETE))(variable)); // And remove it from the list. arrayUtils.removeElem(this.variableMap.get(type)!, variable); } @@ -213,7 +214,7 @@ export class VariableMap { this.variableMap.delete(type); this.variableMap.set(type, variables); - eventUtils.fire(new (eventUtils.get(eventUtils.VAR_CREATE))(variable)); + eventUtils.fire(new (eventUtils.get(EventType.VAR_CREATE))(variable)); return variable; } @@ -232,9 +233,7 @@ export class VariableMap { const tempVar = variableList[i]; if (tempVar.getId() === variableId) { variableList.splice(i, 1); - eventUtils.fire( - new (eventUtils.get(eventUtils.VAR_DELETE))(variable), - ); + eventUtils.fire(new (eventUtils.get(EventType.VAR_DELETE))(variable)); if (variableList.length === 0) { this.variableMap.delete(variable.type); } diff --git a/core/variables.ts b/core/variables.ts index dee53a72b..b69893a9f 100644 --- a/core/variables.ts +++ b/core/variables.ts @@ -8,9 +8,9 @@ import {Blocks} from './blocks.js'; import * as dialog from './dialog.js'; +import {isLegacyProcedureDefBlock} from './interfaces/i_legacy_procedure_blocks.js'; import {isVariableBackedParameterModel} from './interfaces/i_variable_backed_parameter_model.js'; import {Msg} from './msg.js'; -import {isLegacyProcedureDefBlock} from './interfaces/i_legacy_procedure_blocks.js'; import * as utilsXml from './utils/xml.js'; import {VariableModel} from './variable_model.js'; import type {Workspace} from './workspace.js'; diff --git a/core/variables_dynamic.ts b/core/variables_dynamic.ts index 6c4457549..9788962c7 100644 --- a/core/variables_dynamic.ts +++ b/core/variables_dynamic.ts @@ -7,13 +7,13 @@ // Former goog.module ID: Blockly.VariablesDynamic import {Blocks} from './blocks.js'; +import type {FlyoutButton} from './flyout_button.js'; import {Msg} from './msg.js'; import * as xml from './utils/xml.js'; import {VariableModel} from './variable_model.js'; import * as Variables from './variables.js'; import type {Workspace} from './workspace.js'; import type {WorkspaceSvg} from './workspace_svg.js'; -import type {FlyoutButton} from './flyout_button.js'; /** * String for use in the "custom" attribute of a category in toolbox XML. diff --git a/core/widgetdiv.ts b/core/widgetdiv.ts index 9f58bb1c5..897698611 100644 --- a/core/widgetdiv.ts +++ b/core/widgetdiv.ts @@ -7,8 +7,8 @@ // Former goog.module ID: Blockly.WidgetDiv import * as common from './common.js'; -import * as dom from './utils/dom.js'; import {Field} from './field.js'; +import * as dom from './utils/dom.js'; import type {Rect} from './utils/rect.js'; import type {Size} from './utils/size.js'; import type {WorkspaceSvg} from './workspace_svg.js'; @@ -126,7 +126,7 @@ export function hide() { div.style.display = 'none'; div.style.left = ''; div.style.top = ''; - dispose && dispose(); + if (dispose) dispose(); dispose = null; div.textContent = ''; diff --git a/core/workspace.ts b/core/workspace.ts index 16f32611b..bc09d36fb 100644 --- a/core/workspace.ts +++ b/core/workspace.ts @@ -16,12 +16,15 @@ import './connection_checker.js'; import type {Block} from './block.js'; import type {BlocklyOptions} from './blockly_options.js'; +import {WorkspaceComment} from './comments/workspace_comment.js'; +import * as common from './common.js'; import type {ConnectionDB} from './connection_db.js'; import type {Abstract} from './events/events_abstract.js'; -import * as common from './common.js'; import * as eventUtils from './events/utils.js'; import type {IASTNodeLocation} from './interfaces/i_ast_node_location.js'; import type {IConnectionChecker} from './interfaces/i_connection_checker.js'; +import {IProcedureMap} from './interfaces/i_procedure_map.js'; +import {ObservableProcedureMap} from './observable_procedure_map.js'; import {Options} from './options.js'; import * as registry from './registry.js'; import * as arrayUtils from './utils/array.js'; @@ -30,9 +33,6 @@ import * as math from './utils/math.js'; import type * as toolbox from './utils/toolbox.js'; import {VariableMap} from './variable_map.js'; import type {VariableModel} from './variable_model.js'; -import {WorkspaceComment} from './comments/workspace_comment.js'; -import {IProcedureMap} from './interfaces/i_procedure_map.js'; -import {ObservableProcedureMap} from './observable_procedure_map.js'; /** * Class for a workspace. This is a data structure that contains blocks. @@ -102,7 +102,7 @@ export class Workspace implements IASTNodeLocation { private readonly topBlocks: Block[] = []; private readonly topComments: WorkspaceComment[] = []; private readonly commentDB = new Map(); - private readonly listeners: Function[] = []; + private readonly listeners: ((e: Abstract) => void)[] = []; protected undoStack_: Abstract[] = []; protected redoStack_: Abstract[] = []; private readonly blockDB = new Map(); @@ -634,7 +634,7 @@ export class Workspace implements IASTNodeLocation { if (!inputEvent) { return; } - let events = [inputEvent]; + const events = [inputEvent]; // Do another undo/redo if the next one is of the same group. while ( inputStack.length && @@ -650,7 +650,6 @@ export class Workspace implements IASTNodeLocation { const event = events[i]; outputStack.push(event); } - events = eventUtils.filter(events, redo); eventUtils.setRecordUndo(false); try { for (let i = 0; i < events.length; i++) { @@ -679,7 +678,7 @@ export class Workspace implements IASTNodeLocation { * @param func Function to call. * @returns Obsolete return value, ignore. */ - addChangeListener(func: (e: Abstract) => void): Function { + addChangeListener(func: (e: Abstract) => void): (e: Abstract) => void { this.listeners.push(func); return func; } @@ -689,7 +688,7 @@ export class Workspace implements IASTNodeLocation { * * @param func Function to stop calling. */ - removeChangeListener(func: Function) { + removeChangeListener(func: (e: Abstract) => void) { arrayUtils.removeElem(this.listeners, func); } diff --git a/core/workspace_audio.ts b/core/workspace_audio.ts index c2ab93222..c8d21080c 100644 --- a/core/workspace_audio.ts +++ b/core/workspace_audio.ts @@ -64,7 +64,7 @@ export class WorkspaceAudio { let audioTest; try { audioTest = new globalThis['Audio'](); - } catch (e) { + } catch { // No browser support for Audio. // IE can throw an error even if the Audio object exists. return; diff --git a/core/workspace_svg.ts b/core/workspace_svg.ts index a92c3f4ae..cfab07d99 100644 --- a/core/workspace_svg.ts +++ b/core/workspace_svg.ts @@ -22,12 +22,18 @@ import type {Block} from './block.js'; import type {BlockSvg} from './block_svg.js'; import type {BlocklyOptions} from './blockly_options.js'; import * as browserEvents from './browser_events.js'; +import {RenderedWorkspaceComment} from './comments/rendered_workspace_comment.js'; +import {WorkspaceComment} from './comments/workspace_comment.js'; import * as common from './common.js'; import {ComponentManager} from './component_manager.js'; import {ConnectionDB} from './connection_db.js'; import * as ContextMenu from './contextmenu.js'; -import {ContextMenuRegistry} from './contextmenu_registry.js'; +import { + ContextMenuOption, + ContextMenuRegistry, +} from './contextmenu_registry.js'; import * as dropDownDiv from './dropdowndiv.js'; +import {EventType} from './events/type.js'; import * as eventUtils from './events/utils.js'; import type {FlyoutButton} from './flyout_button.js'; import {Gesture} from './gesture.js'; @@ -40,10 +46,12 @@ import type {IMetricsManager} from './interfaces/i_metrics_manager.js'; import type {IToolbox} from './interfaces/i_toolbox.js'; import type {Cursor} from './keyboard_nav/cursor.js'; import type {Marker} from './keyboard_nav/marker.js'; +import {LayerManager} from './layer_manager.js'; import {MarkerManager} from './marker_manager.js'; import {Options} from './options.js'; import * as Procedures from './procedures.js'; import * as registry from './registry.js'; +import * as renderManagement from './render_management.js'; import * as blockRendering from './renderers/common/block_rendering.js'; import type {Renderer} from './renderers/common/renderer.js'; import type {ScrollbarPair} from './scrollbar_pair.js'; @@ -68,12 +76,7 @@ import * as VariablesDynamic from './variables_dynamic.js'; import * as WidgetDiv from './widgetdiv.js'; import {Workspace} from './workspace.js'; import {WorkspaceAudio} from './workspace_audio.js'; -import {WorkspaceComment} from './comments/workspace_comment.js'; import {ZoomControls} from './zoom_controls.js'; -import {ContextMenuOption} from './contextmenu_registry.js'; -import * as renderManagement from './render_management.js'; -import {LayerManager} from './layer_manager.js'; -import {RenderedWorkspaceComment} from './comments/rendered_workspace_comment.js'; /** Margin around the top/bottom/left/right after a zoomToFit call. */ const ZOOM_TO_FIT_MARGIN = 20; @@ -556,7 +559,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { this.setVisible(true); } - const event = new (eventUtils.get(eventUtils.THEME_CHANGE))( + const event = new (eventUtils.get(EventType.THEME_CHANGE))( this.getTheme().name, this.id, ); @@ -817,7 +820,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { this.options, ); - CursorClass && this.markerManager.setCursor(new CursorClass()); + if (CursorClass) this.markerManager.setCursor(new CursorClass()); this.renderer.createDom(this.svgGroup_, this.getTheme()); return this.svgGroup_; @@ -1179,7 +1182,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { // of negligible changes in viewport top/left. return; } - const event = new (eventUtils.get(eventUtils.VIEWPORT_CHANGE))( + const event = new (eventUtils.get(EventType.VIEWPORT_CHANGE))( top, left, scale, diff --git a/core/xml.ts b/core/xml.ts index bad381c5d..cecc4dce2 100644 --- a/core/xml.ts +++ b/core/xml.ts @@ -8,12 +8,17 @@ import type {Block} from './block.js'; import type {BlockSvg} from './block_svg.js'; +import {RenderedWorkspaceComment} from './comments/rendered_workspace_comment.js'; +import {WorkspaceComment} from './comments/workspace_comment.js'; import type {Connection} from './connection.js'; import {MANUALLY_DISABLED} from './constants.js'; +import {EventType} from './events/type.js'; import * as eventUtils from './events/utils.js'; import type {Field} from './field.js'; import {IconType} from './icons/icon_types.js'; import {inputTypes} from './inputs/input_types.js'; +import * as renderManagement from './render_management.js'; +import {Coordinate} from './utils/coordinate.js'; import * as dom from './utils/dom.js'; import {Size} from './utils/size.js'; import * as utilsXml from './utils/xml.js'; @@ -21,10 +26,6 @@ import type {VariableModel} from './variable_model.js'; import * as Variables from './variables.js'; import type {Workspace} from './workspace.js'; import {WorkspaceSvg} from './workspace_svg.js'; -import * as renderManagement from './render_management.js'; -import {WorkspaceComment} from './comments/workspace_comment.js'; -import {RenderedWorkspaceComment} from './comments/rendered_workspace_comment.js'; -import {Coordinate} from './utils/coordinate.js'; /** * Encode a block tree as XML. @@ -497,7 +498,7 @@ export function domToWorkspace(xml: Element, workspace: Workspace): string[] { dom.stopTextWidthCache(); } // Re-enable workspace resizing. - eventUtils.fire(new (eventUtils.get(eventUtils.FINISHED_LOADING))(workspace)); + eventUtils.fire(new (eventUtils.get(EventType.FINISHED_LOADING))(workspace)); return newBlockIds; } @@ -666,13 +667,11 @@ export function domToBlockInternal( // Fire a VarCreate event for each (if any) new variable created. for (let i = 0; i < newVariables.length; i++) { const thisVariable = newVariables[i]; - eventUtils.fire( - new (eventUtils.get(eventUtils.VAR_CREATE))(thisVariable), - ); + eventUtils.fire(new (eventUtils.get(EventType.VAR_CREATE))(thisVariable)); } // Block events come after var events, in case they refer to newly created // variables. - eventUtils.fire(new (eventUtils.get(eventUtils.CREATE))(topBlock)); + eventUtils.fire(new (eventUtils.get(EventType.BLOCK_CREATE))(topBlock)); } return topBlock; } diff --git a/core/zoom_controls.ts b/core/zoom_controls.ts index 6534c7322..4f14b73be 100644 --- a/core/zoom_controls.ts +++ b/core/zoom_controls.ts @@ -17,6 +17,7 @@ import './events/events_click.js'; import * as browserEvents from './browser_events.js'; import {ComponentManager} from './component_manager.js'; import * as Css from './css.js'; +import {EventType} from './events/type.js'; import * as eventUtils from './events/utils.js'; import type {IPositionable} from './interfaces/i_positionable.js'; import type {UiMetrics} from './metrics_manager.js'; @@ -116,7 +117,7 @@ export class ZoomControls implements IPositionable { init() { this.workspace.getComponentManager().addComponent({ component: this, - weight: 2, + weight: ComponentManager.ComponentWeight.ZOOM_CONTROLS_WEIGHT, capabilities: [ComponentManager.Capability.POSITIONABLE], }); this.initialized = true; @@ -467,7 +468,7 @@ export class ZoomControls implements IPositionable { /** Fires a zoom control UI event. */ private fireZoomEvent() { - const uiEvent = new (eventUtils.get(eventUtils.CLICK))( + const uiEvent = new (eventUtils.get(EventType.CLICK))( null, this.workspace.id, 'zoom_controls', diff --git a/generators/dart/dart_generator.ts b/generators/dart/dart_generator.ts index 222bbd41d..20feeda6f 100644 --- a/generators/dart/dart_generator.ts +++ b/generators/dart/dart_generator.ts @@ -11,13 +11,13 @@ // Former goog.module ID: Blockly.Dart -import * as Variables from '../../core/variables.js'; -import * as stringUtils from '../../core/utils/string.js'; import type {Block} from '../../core/block.js'; import {CodeGenerator} from '../../core/generator.js'; -import {Names, NameType} from '../../core/names.js'; -import type {Workspace} from '../../core/workspace.js'; import {inputTypes} from '../../core/inputs/input_types.js'; +import {Names, NameType} from '../../core/names.js'; +import * as stringUtils from '../../core/utils/string.js'; +import * as Variables from '../../core/variables.js'; +import type {Workspace} from '../../core/workspace.js'; /** * Order of operation ENUMs. diff --git a/generators/dart/lists.ts b/generators/dart/lists.ts index 4aaf39905..176b88dc4 100644 --- a/generators/dart/lists.ts +++ b/generators/dart/lists.ts @@ -10,10 +10,10 @@ // Former goog.module ID: Blockly.Dart.lists -import type {Block} from '../../core/block.js'; import type {CreateWithBlock} from '../../blocks/lists.js'; -import type {DartGenerator} from './dart_generator.js'; +import type {Block} from '../../core/block.js'; import {NameType} from '../../core/names.js'; +import type {DartGenerator} from './dart_generator.js'; import {Order} from './dart_generator.js'; // RESERVED WORDS: 'Math' diff --git a/generators/dart/loops.ts b/generators/dart/loops.ts index a6b6bb180..f2e6efab0 100644 --- a/generators/dart/loops.ts +++ b/generators/dart/loops.ts @@ -10,11 +10,11 @@ // Former goog.module ID: Blockly.Dart.loops -import * as stringUtils from '../../core/utils/string.js'; -import type {Block} from '../../core/block.js'; import type {ControlFlowInLoopBlock} from '../../blocks/loops.js'; -import type {DartGenerator} from './dart_generator.js'; +import type {Block} from '../../core/block.js'; import {NameType} from '../../core/names.js'; +import * as stringUtils from '../../core/utils/string.js'; +import type {DartGenerator} from './dart_generator.js'; import {Order} from './dart_generator.js'; export function controls_repeat_ext(block: Block, generator: DartGenerator) { diff --git a/generators/dart/procedures.ts b/generators/dart/procedures.ts index 0ecf6d210..8890e713c 100644 --- a/generators/dart/procedures.ts +++ b/generators/dart/procedures.ts @@ -10,8 +10,8 @@ // Former goog.module ID: Blockly.Dart.procedures -import type {Block} from '../../core/block.js'; import type {IfReturnBlock} from '../../blocks/procedures.js'; +import type {Block} from '../../core/block.js'; import type {DartGenerator} from './dart_generator.js'; import {Order} from './dart_generator.js'; diff --git a/generators/dart/text.ts b/generators/dart/text.ts index c141eaad0..c189c32cf 100644 --- a/generators/dart/text.ts +++ b/generators/dart/text.ts @@ -10,9 +10,9 @@ // Former goog.module ID: Blockly.Dart.texts +import type {JoinMutatorBlock} from '../../blocks/text.js'; import type {Block} from '../../core/block.js'; import type {DartGenerator} from './dart_generator.js'; -import type {JoinMutatorBlock} from '../../blocks/text.js'; import {Order} from './dart_generator.js'; // RESERVED WORDS: 'Html,Math' diff --git a/generators/javascript/javascript_generator.ts b/generators/javascript/javascript_generator.ts index 592563f91..a247ed5dd 100644 --- a/generators/javascript/javascript_generator.ts +++ b/generators/javascript/javascript_generator.ts @@ -11,13 +11,13 @@ // Former goog.module ID: Blockly.JavaScript -import * as Variables from '../../core/variables.js'; -import * as stringUtils from '../../core/utils/string.js'; import type {Block} from '../../core/block.js'; import {CodeGenerator} from '../../core/generator.js'; -import {Names, NameType} from '../../core/names.js'; -import type {Workspace} from '../../core/workspace.js'; import {inputTypes} from '../../core/inputs/input_types.js'; +import {Names, NameType} from '../../core/names.js'; +import * as stringUtils from '../../core/utils/string.js'; +import * as Variables from '../../core/variables.js'; +import type {Workspace} from '../../core/workspace.js'; /** * Order of operation ENUMs. diff --git a/generators/javascript/lists.ts b/generators/javascript/lists.ts index bbed5231b..7fd1887fb 100644 --- a/generators/javascript/lists.ts +++ b/generators/javascript/lists.ts @@ -10,10 +10,10 @@ // Former goog.module ID: Blockly.JavaScript.lists -import type {Block} from '../../core/block.js'; import type {CreateWithBlock} from '../../blocks/lists.js'; -import type {JavascriptGenerator} from './javascript_generator.js'; +import type {Block} from '../../core/block.js'; import {NameType} from '../../core/names.js'; +import type {JavascriptGenerator} from './javascript_generator.js'; import {Order} from './javascript_generator.js'; export function lists_create_empty( diff --git a/generators/javascript/loops.ts b/generators/javascript/loops.ts index 555e43ff1..2bc561582 100644 --- a/generators/javascript/loops.ts +++ b/generators/javascript/loops.ts @@ -10,11 +10,11 @@ // Former goog.module ID: Blockly.JavaScript.loops -import * as stringUtils from '../../core/utils/string.js'; -import type {Block} from '../../core/block.js'; import type {ControlFlowInLoopBlock} from '../../blocks/loops.js'; -import type {JavascriptGenerator} from './javascript_generator.js'; +import type {Block} from '../../core/block.js'; import {NameType} from '../../core/names.js'; +import * as stringUtils from '../../core/utils/string.js'; +import type {JavascriptGenerator} from './javascript_generator.js'; import {Order} from './javascript_generator.js'; export function controls_repeat_ext( diff --git a/generators/javascript/procedures.ts b/generators/javascript/procedures.ts index e0a055217..d4a2e2034 100644 --- a/generators/javascript/procedures.ts +++ b/generators/javascript/procedures.ts @@ -10,8 +10,8 @@ // Former goog.module ID: Blockly.JavaScript.procedures -import type {Block} from '../../core/block.js'; import type {IfReturnBlock} from '../../blocks/procedures.js'; +import type {Block} from '../../core/block.js'; import type {JavascriptGenerator} from './javascript_generator.js'; import {Order} from './javascript_generator.js'; diff --git a/generators/javascript/text.ts b/generators/javascript/text.ts index d31bdcf4b..f991bb28a 100644 --- a/generators/javascript/text.ts +++ b/generators/javascript/text.ts @@ -10,9 +10,9 @@ // Former goog.module ID: Blockly.JavaScript.texts +import type {JoinMutatorBlock} from '../../blocks/text.js'; import type {Block} from '../../core/block.js'; import type {JavascriptGenerator} from './javascript_generator.js'; -import type {JoinMutatorBlock} from '../../blocks/text.js'; import {Order} from './javascript_generator.js'; /** diff --git a/generators/lua.ts b/generators/lua.ts index 0cf81fb96..35ac570af 100644 --- a/generators/lua.ts +++ b/generators/lua.ts @@ -11,10 +11,10 @@ // Former goog.module ID: Blockly.Lua.all -import {LuaGenerator} from './lua/lua_generator.js'; import * as lists from './lua/lists.js'; import * as logic from './lua/logic.js'; import * as loops from './lua/loops.js'; +import {LuaGenerator} from './lua/lua_generator.js'; import * as math from './lua/math.js'; import * as procedures from './lua/procedures.js'; import * as text from './lua/text.js'; diff --git a/generators/lua/lists.ts b/generators/lua/lists.ts index 901ed88a6..f1f90cc4a 100644 --- a/generators/lua/lists.ts +++ b/generators/lua/lists.ts @@ -10,10 +10,10 @@ // Former goog.module ID: Blockly.Lua.lists -import type {Block} from '../../core/block.js'; import type {CreateWithBlock} from '../../blocks/lists.js'; -import type {LuaGenerator} from './lua_generator.js'; +import type {Block} from '../../core/block.js'; import {NameType} from '../../core/names.js'; +import type {LuaGenerator} from './lua_generator.js'; import {Order} from './lua_generator.js'; export function lists_create_empty( diff --git a/generators/lua/loops.ts b/generators/lua/loops.ts index 01474cd81..2c09f6279 100644 --- a/generators/lua/loops.ts +++ b/generators/lua/loops.ts @@ -10,11 +10,11 @@ // Former goog.module ID: Blockly.Lua.loops -import * as stringUtils from '../../core/utils/string.js'; -import type {Block} from '../../core/block.js'; import type {ControlFlowInLoopBlock} from '../../blocks/loops.js'; -import type {LuaGenerator} from './lua_generator.js'; +import type {Block} from '../../core/block.js'; import {NameType} from '../../core/names.js'; +import * as stringUtils from '../../core/utils/string.js'; +import type {LuaGenerator} from './lua_generator.js'; import {Order} from './lua_generator.js'; /** diff --git a/generators/lua/lua_generator.ts b/generators/lua/lua_generator.ts index 76517c77d..b753ff2c6 100644 --- a/generators/lua/lua_generator.ts +++ b/generators/lua/lua_generator.ts @@ -13,12 +13,12 @@ // Former goog.module ID: Blockly.Lua -import * as stringUtils from '../../core/utils/string.js'; import type {Block} from '../../core/block.js'; import {CodeGenerator} from '../../core/generator.js'; -import {Names} from '../../core/names.js'; -import type {Workspace} from '../../core/workspace.js'; import {inputTypes} from '../../core/inputs/input_types.js'; +import {Names} from '../../core/names.js'; +import * as stringUtils from '../../core/utils/string.js'; +import type {Workspace} from '../../core/workspace.js'; /** * Order of operation ENUMs. diff --git a/generators/lua/procedures.ts b/generators/lua/procedures.ts index 79dc58aa2..bd78ef7a6 100644 --- a/generators/lua/procedures.ts +++ b/generators/lua/procedures.ts @@ -10,8 +10,8 @@ // Former goog.module ID: Blockly.Lua.procedures -import type {Block} from '../../core/block.js'; import type {IfReturnBlock} from '../../blocks/procedures.js'; +import type {Block} from '../../core/block.js'; import type {LuaGenerator} from './lua_generator.js'; import {Order} from './lua_generator.js'; diff --git a/generators/lua/text.ts b/generators/lua/text.ts index 1c4a79a8e..47d9a2033 100644 --- a/generators/lua/text.ts +++ b/generators/lua/text.ts @@ -10,8 +10,8 @@ // Former goog.module ID: Blockly.Lua.texts -import type {Block} from '../../core/block.js'; import type {JoinMutatorBlock} from '../../blocks/text.js'; +import type {Block} from '../../core/block.js'; import type {LuaGenerator} from './lua_generator.js'; import {Order} from './lua_generator.js'; diff --git a/generators/php.ts b/generators/php.ts index 30a080866..69f6cda74 100644 --- a/generators/php.ts +++ b/generators/php.ts @@ -12,11 +12,11 @@ // Former goog.module ID: Blockly.PHP.all -import {PhpGenerator} from './php/php_generator.js'; import * as lists from './php/lists.js'; import * as logic from './php/logic.js'; import * as loops from './php/loops.js'; import * as math from './php/math.js'; +import {PhpGenerator} from './php/php_generator.js'; import * as procedures from './php/procedures.js'; import * as text from './php/text.js'; import * as variables from './php/variables.js'; diff --git a/generators/php/lists.ts b/generators/php/lists.ts index 7ca2639b7..009d7ccc8 100644 --- a/generators/php/lists.ts +++ b/generators/php/lists.ts @@ -21,12 +21,12 @@ // Former goog.module ID: Blockly.generator.lists -import * as stringUtils from '../../core/utils/string.js'; -import type {Block} from '../../core/block.js'; import type {CreateWithBlock} from '../../blocks/lists.js'; +import type {Block} from '../../core/block.js'; import {NameType} from '../../core/names.js'; -import {Order} from './php_generator.js'; +import * as stringUtils from '../../core/utils/string.js'; import type {PhpGenerator} from './php_generator.js'; +import {Order} from './php_generator.js'; export function lists_create_empty( block: Block, diff --git a/generators/php/logic.ts b/generators/php/logic.ts index 8aaa5c892..731fe5708 100644 --- a/generators/php/logic.ts +++ b/generators/php/logic.ts @@ -11,8 +11,8 @@ // Former goog.module ID: Blockly.PHP.logic import type {Block} from '../../core/block.js'; -import {Order} from './php_generator.js'; import type {PhpGenerator} from './php_generator.js'; +import {Order} from './php_generator.js'; export function controls_if(block: Block, generator: PhpGenerator) { // If/elseif/else condition. diff --git a/generators/php/loops.ts b/generators/php/loops.ts index ae87dbb29..991cbaf4e 100644 --- a/generators/php/loops.ts +++ b/generators/php/loops.ts @@ -10,12 +10,12 @@ // Former goog.module ID: Blockly.PHP.loops -import * as stringUtils from '../../core/utils/string.js'; -import type {Block} from '../../core/block.js'; import type {ControlFlowInLoopBlock} from '../../blocks/loops.js'; +import type {Block} from '../../core/block.js'; import {NameType} from '../../core/names.js'; -import {Order} from './php_generator.js'; +import * as stringUtils from '../../core/utils/string.js'; import type {PhpGenerator} from './php_generator.js'; +import {Order} from './php_generator.js'; export function controls_repeat_ext(block: Block, generator: PhpGenerator) { // Repeat n times. diff --git a/generators/php/math.ts b/generators/php/math.ts index 6218bf4d1..2026af064 100644 --- a/generators/php/math.ts +++ b/generators/php/math.ts @@ -11,8 +11,8 @@ // Former goog.module ID: Blockly.PHP.math import type {Block} from '../../core/block.js'; -import {Order} from './php_generator.js'; import type {PhpGenerator} from './php_generator.js'; +import {Order} from './php_generator.js'; export function math_number( block: Block, diff --git a/generators/php/php_generator.ts b/generators/php/php_generator.ts index ecdfb76fd..8ac23c057 100644 --- a/generators/php/php_generator.ts +++ b/generators/php/php_generator.ts @@ -11,12 +11,12 @@ // Former goog.module ID: Blockly.PHP -import * as stringUtils from '../../core/utils/string.js'; import type {Block} from '../../core/block.js'; import {CodeGenerator} from '../../core/generator.js'; -import {Names} from '../../core/names.js'; -import type {Workspace} from '../../core/workspace.js'; import {inputTypes} from '../../core/inputs/input_types.js'; +import {Names} from '../../core/names.js'; +import * as stringUtils from '../../core/utils/string.js'; +import type {Workspace} from '../../core/workspace.js'; /** * Order of operation ENUMs. diff --git a/generators/php/procedures.ts b/generators/php/procedures.ts index acf84aea6..bad6c1443 100644 --- a/generators/php/procedures.ts +++ b/generators/php/procedures.ts @@ -10,12 +10,12 @@ // Former goog.module ID: Blockly.PHP.procedures -import * as Variables from '../../core/variables.js'; -import type {Block} from '../../core/block.js'; import type {IfReturnBlock} from '../../blocks/procedures.js'; +import type {Block} from '../../core/block.js'; import {NameType} from '../../core/names.js'; -import {Order} from './php_generator.js'; +import * as Variables from '../../core/variables.js'; import type {PhpGenerator} from './php_generator.js'; +import {Order} from './php_generator.js'; export function procedures_defreturn(block: Block, generator: PhpGenerator) { // Define a procedure with a return value. diff --git a/generators/php/text.ts b/generators/php/text.ts index 811e0251f..f50c76946 100644 --- a/generators/php/text.ts +++ b/generators/php/text.ts @@ -10,10 +10,10 @@ // Former goog.module ID: Blockly.PHP.texts -import type {Block} from '../../core/block.js'; import type {JoinMutatorBlock} from '../../blocks/text.js'; -import {Order} from './php_generator.js'; +import type {Block} from '../../core/block.js'; import type {PhpGenerator} from './php_generator.js'; +import {Order} from './php_generator.js'; export function text(block: Block, generator: PhpGenerator): [string, Order] { // Text value. diff --git a/generators/php/variables.ts b/generators/php/variables.ts index 4aacc293b..2275719da 100644 --- a/generators/php/variables.ts +++ b/generators/php/variables.ts @@ -11,8 +11,8 @@ // Former goog.module ID: Blockly.PHP.variables import type {Block} from '../../core/block.js'; -import {Order} from './php_generator.js'; import type {PhpGenerator} from './php_generator.js'; +import {Order} from './php_generator.js'; export function variables_get( block: Block, diff --git a/generators/python.ts b/generators/python.ts index d7b505763..6d57229e3 100644 --- a/generators/python.ts +++ b/generators/python.ts @@ -12,12 +12,12 @@ // Former goog.module ID: Blockly.Python.all -import {PythonGenerator} from './python/python_generator.js'; import * as lists from './python/lists.js'; import * as logic from './python/logic.js'; import * as loops from './python/loops.js'; import * as math from './python/math.js'; import * as procedures from './python/procedures.js'; +import {PythonGenerator} from './python/python_generator.js'; import * as text from './python/text.js'; import * as variables from './python/variables.js'; import * as variablesDynamic from './python/variables_dynamic.js'; diff --git a/generators/python/lists.ts b/generators/python/lists.ts index 6e412c23f..79cfe9dd8 100644 --- a/generators/python/lists.ts +++ b/generators/python/lists.ts @@ -10,12 +10,12 @@ // Former goog.module ID: Blockly.Python.lists -import * as stringUtils from '../../core/utils/string.js'; -import type {Block} from '../../core/block.js'; import type {CreateWithBlock} from '../../blocks/lists.js'; +import type {Block} from '../../core/block.js'; import {NameType} from '../../core/names.js'; -import {Order} from './python_generator.js'; +import * as stringUtils from '../../core/utils/string.js'; import type {PythonGenerator} from './python_generator.js'; +import {Order} from './python_generator.js'; export function lists_create_empty( block: Block, diff --git a/generators/python/loops.ts b/generators/python/loops.ts index 7ca7a5582..84aa613c6 100644 --- a/generators/python/loops.ts +++ b/generators/python/loops.ts @@ -10,11 +10,11 @@ // Former goog.module ID: Blockly.Python.loops -import * as stringUtils from '../../core/utils/string.js'; -import type {Block} from '../../core/block.js'; import type {ControlFlowInLoopBlock} from '../../blocks/loops.js'; -import type {PythonGenerator} from './python_generator.js'; +import type {Block} from '../../core/block.js'; import {NameType} from '../../core/names.js'; +import * as stringUtils from '../../core/utils/string.js'; +import type {PythonGenerator} from './python_generator.js'; import {Order} from './python_generator.js'; export function controls_repeat_ext(block: Block, generator: PythonGenerator) { diff --git a/generators/python/procedures.ts b/generators/python/procedures.ts index 51d2ee9a3..32eae97b9 100644 --- a/generators/python/procedures.ts +++ b/generators/python/procedures.ts @@ -10,12 +10,12 @@ // Former goog.module ID: Blockly.Python.procedures -import * as Variables from '../../core/variables.js'; -import type {Block} from '../../core/block.js'; import type {IfReturnBlock} from '../../blocks/procedures.js'; +import type {Block} from '../../core/block.js'; import {NameType} from '../../core/names.js'; -import {Order} from './python_generator.js'; +import * as Variables from '../../core/variables.js'; import type {PythonGenerator} from './python_generator.js'; +import {Order} from './python_generator.js'; export function procedures_defreturn(block: Block, generator: PythonGenerator) { // Define a procedure with a return value. diff --git a/generators/python/python_generator.ts b/generators/python/python_generator.ts index bf7b87496..f96312e6d 100644 --- a/generators/python/python_generator.ts +++ b/generators/python/python_generator.ts @@ -11,13 +11,13 @@ // Former goog.module ID: Blockly.Python -import * as stringUtils from '../../core/utils/string.js'; -import * as Variables from '../../core/variables.js'; import type {Block} from '../../core/block.js'; import {CodeGenerator} from '../../core/generator.js'; -import {Names} from '../../core/names.js'; -import type {Workspace} from '../../core/workspace.js'; import {inputTypes} from '../../core/inputs/input_types.js'; +import {Names} from '../../core/names.js'; +import * as stringUtils from '../../core/utils/string.js'; +import * as Variables from '../../core/variables.js'; +import type {Workspace} from '../../core/workspace.js'; /** * Order of operation ENUMs. diff --git a/generators/python/text.ts b/generators/python/text.ts index e9154da83..1ccf6b200 100644 --- a/generators/python/text.ts +++ b/generators/python/text.ts @@ -10,12 +10,12 @@ // Former goog.module ID: Blockly.Python.texts -import * as stringUtils from '../../core/utils/string.js'; -import type {Block} from '../../core/block.js'; import type {JoinMutatorBlock} from '../../blocks/text.js'; +import type {Block} from '../../core/block.js'; import {NameType} from '../../core/names.js'; -import {Order} from './python_generator.js'; +import * as stringUtils from '../../core/utils/string.js'; import type {PythonGenerator} from './python_generator.js'; +import {Order} from './python_generator.js'; export function text( block: Block, diff --git a/package-lock.json b/package-lock.json index ef27c3b64..7097ad6d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,18 +10,18 @@ "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "jsdom": "24.1.0" + "jsdom": "24.1.1" }, "devDependencies": { "@blockly/block-test": "^6.0.4", - "@blockly/dev-tools": "^8.0.4", + "@blockly/dev-tools": "^8.0.6", "@blockly/theme-modern": "^6.0.3", "@hyperjump/browser": "^1.1.4", "@hyperjump/json-schema": "^1.5.0", "@microsoft/api-documenter": "^7.22.4", "@microsoft/api-extractor": "^7.29.5", - "@typescript-eslint/eslint-plugin": "^7.3.1", - "@typescript-eslint/parser": "^7.16.1", + "@typescript-eslint/eslint-plugin": "^8.1.0", + "@typescript-eslint/parser": "^8.1.0", "async-done": "^2.0.0", "chai": "^5.1.1", "concurrently": "^8.0.1", @@ -31,7 +31,7 @@ "eslint-plugin-jsdoc": "^48.0.2", "glob": "^10.3.4", "google-closure-compiler": "^20240317.0.0", - "gulp": "^4.0.2", + "gulp": "^5.0.0", "gulp-concat": "^2.6.1", "gulp-gzip": "^1.4.2", "gulp-header": "^2.0.9", @@ -47,7 +47,8 @@ "markdown-tables-to-json": "^0.1.7", "mocha": "^10.0.0", "patch-package": "^8.0.0", - "prettier": "3.3.2", + "prettier": "^3.3.3", + "prettier-plugin-organize-imports": "^4.0.0", "readline-sync": "^1.4.10", "rimraf": "^5.0.0", "typescript": "^5.3.3", @@ -80,11 +81,10 @@ } }, "node_modules/@blockly/block-test": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@blockly/block-test/-/block-test-6.0.4.tgz", - "integrity": "sha512-T8uod/uIt3QSvS5nIRGTa6i3h/UZXWJPUOiNY+RW0/azHZLBSOH8udyw1a22u9iOSpA7gDmw3WBbFgooCytDcw==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/@blockly/block-test/-/block-test-6.0.5.tgz", + "integrity": "sha512-k71CGCM6A7XZFyFQL/cnZkylhtfCgf3wTTG9Jymt7bkGZR6jVV1FSZYk0vaZ4tj+T2goqc8gb9VA1Jn8YWmoFA==", "dev": true, - "license": "Apache 2.0", "engines": { "node": ">=8.17.0" }, @@ -93,17 +93,16 @@ } }, "node_modules/@blockly/dev-tools": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-8.0.4.tgz", - "integrity": "sha512-YTb3dj8msWWz4hfpQTRIE3NLX2xbTjkluuazA55jOBWSnkPRo0ZeCmjMVwOAG3GECBrjt3IanwuNIuwwBLkbkg==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-8.0.6.tgz", + "integrity": "sha512-jC/XG7KKHqt1evxW/2/cnEgNEUsAzigsFjPNqwgCTyouJTORMxPDx/+CDIo3VPfRf2XFkEb/+KecjZz4SC+ToA==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@blockly/block-test": "^6.0.4", - "@blockly/theme-dark": "^7.0.3", - "@blockly/theme-deuteranopia": "^6.0.3", - "@blockly/theme-highcontrast": "^6.0.3", - "@blockly/theme-tritanopia": "^6.0.3", + "@blockly/block-test": "^6.0.5", + "@blockly/theme-dark": "^7.0.4", + "@blockly/theme-deuteranopia": "^6.0.4", + "@blockly/theme-highcontrast": "^6.0.4", + "@blockly/theme-tritanopia": "^6.0.4", "chai": "^4.2.0", "dat.gui": "^0.7.7", "lodash.assign": "^4.2.0", @@ -188,11 +187,10 @@ } }, "node_modules/@blockly/theme-dark": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@blockly/theme-dark/-/theme-dark-7.0.3.tgz", - "integrity": "sha512-lRV9V5vjijbJAlUdZqtEhUt81OjHjZK8vagxir1cUqTrZ/+MNS2m7wkhIVPba4RWInJ1LY/nHEoQn6demZqRRQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@blockly/theme-dark/-/theme-dark-7.0.4.tgz", + "integrity": "sha512-HJgP+3g5YYt8Zqe7DSstT0mM13BgsSKwuXNSD8iC7nNxldKu+uEWcoOdAIOy3oLifmnDJ6cYk924+KM6JLUnhQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=8.17.0" }, @@ -201,11 +199,10 @@ } }, "node_modules/@blockly/theme-deuteranopia": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@blockly/theme-deuteranopia/-/theme-deuteranopia-6.0.3.tgz", - "integrity": "sha512-56nkKRoRMzArtz14sMp4sQ8nd2oYQGToadAzx9JfOl0otx2RoeZLnMnZlKa6ZeTsdJXspPRfkrwHcSyuDTA/6g==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@blockly/theme-deuteranopia/-/theme-deuteranopia-6.0.4.tgz", + "integrity": "sha512-8nQ6Q+eRpHOA5ZSUWShPavYBE/TDzKrSEW5F2flpYTM/Yepyv55d8hKm/0ZxxKPbYO7deqx2iwfriAVFHwpDOQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=8.17.0" }, @@ -214,11 +211,10 @@ } }, "node_modules/@blockly/theme-highcontrast": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@blockly/theme-highcontrast/-/theme-highcontrast-6.0.3.tgz", - "integrity": "sha512-AXaB6ELmOZ+2z8ENbdaFDGVorNmcLn10JE9+fMICGTKBTs0T+N5LYH7q7dok04qrV3ZTrhw+rV8Xxp9tYio0Cw==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@blockly/theme-highcontrast/-/theme-highcontrast-6.0.4.tgz", + "integrity": "sha512-c9EBTQbOcBfOun8VRJsRNt8BvMI1Y6K2KZr6XIX4ur04O+XUMXixid8+4xceEajFSZd7IKB19CEwUkO3hjWXNQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=8.17.0" }, @@ -240,11 +236,10 @@ } }, "node_modules/@blockly/theme-tritanopia": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@blockly/theme-tritanopia/-/theme-tritanopia-6.0.3.tgz", - "integrity": "sha512-U4Y7WB2jzFQbNtt7D74gixfPHFBK0FW5CqGCFFOO+mHz2AfKHA+s/cZiVblYomhlA1938mvjzIxbdnafzmaCiw==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@blockly/theme-tritanopia/-/theme-tritanopia-6.0.4.tgz", + "integrity": "sha512-7bHo8tZcjL3xP7FM23R7kxJSN2K8kwn5KA0jx2GQ5gMbd+woHRo0VBXV/HeH5d6ulFTPUNoCb9XjuTVLRiW6zQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=8.17.0" }, @@ -422,6 +417,27 @@ "xtend": "~4.0.1" } }, + "node_modules/@gulpjs/messages": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@gulpjs/messages/-/messages-1.1.0.tgz", + "integrity": "sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@gulpjs/to-absolute-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz", + "integrity": "sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==", + "dev": true, + "dependencies": { + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -486,9 +502,9 @@ } }, "node_modules/@hyperjump/json-schema": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@hyperjump/json-schema/-/json-schema-1.9.3.tgz", - "integrity": "sha512-NZyQ+PSQKUVIO0PInwqk2EOOObJD/ZqR9awzZeOddwtJyLZaxim9/xizZ6gGxGZi5ZGIdIB1mkBTM9fBu85E4A==", + "version": "1.9.6", + "resolved": "https://registry.npmjs.org/@hyperjump/json-schema/-/json-schema-1.9.6.tgz", + "integrity": "sha512-tv0JLDESJCGEPR1LNDNHEdr/AV+kjmfwpsayNPnk8Qy55VPZvXpr5SpExlq8HwB9IXJp1ScfIcrcVrpaWN2Yxw==", "dev": true, "dependencies": { "@hyperjump/json-pointer": "^1.1.0", @@ -627,16 +643,16 @@ } }, "node_modules/@microsoft/api-documenter": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@microsoft/api-documenter/-/api-documenter-7.25.7.tgz", - "integrity": "sha512-jxGFnZ8olak7q/DVPpMYKb8xvMu9ySmvdx0ltLhkaXXCfD/md5ZlJjEOMNHTnP5I1HclJ1Z8WyRilL+GmycKmw==", + "version": "7.25.10", + "resolved": "https://registry.npmjs.org/@microsoft/api-documenter/-/api-documenter-7.25.10.tgz", + "integrity": "sha512-GYc5AALrP9gxYPpkPc/BXXdekg+Ge8p9yyO1aRVwJDGzCXR7XRUvh6gc2jay/DmBx4KfyMx0LFWJ0HcUXudqgQ==", "dev": true, "dependencies": { - "@microsoft/api-extractor-model": "7.29.3", + "@microsoft/api-extractor-model": "7.29.4", "@microsoft/tsdoc": "~0.15.0", - "@rushstack/node-core-library": "5.5.0", - "@rushstack/terminal": "0.13.2", - "@rushstack/ts-command-line": "4.22.2", + "@rushstack/node-core-library": "5.5.1", + "@rushstack/terminal": "0.13.3", + "@rushstack/ts-command-line": "4.22.4", "js-yaml": "~3.13.1", "resolve": "~1.22.1" }, @@ -645,20 +661,20 @@ } }, "node_modules/@microsoft/api-documenter/node_modules/@microsoft/api-extractor-model": { - "version": "7.29.3", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.29.3.tgz", - "integrity": "sha512-kEWjLr2ygL3ku9EGyjeTnL2S5IxyH9NaF1k1UoI0Nzwr4xEJBSWCVsWuF2+0lPUrRPA6mTY95fR264SJ5ETKQA==", + "version": "7.29.4", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.29.4.tgz", + "integrity": "sha512-LHOMxmT8/tU1IiiiHOdHFF83Qsi+V8d0kLfscG4EvQE9cafiR8blOYr8SfkQKWB1wgEilQgXJX3MIA4vetDLZw==", "dev": true, "dependencies": { "@microsoft/tsdoc": "~0.15.0", "@microsoft/tsdoc-config": "~0.17.0", - "@rushstack/node-core-library": "5.5.0" + "@rushstack/node-core-library": "5.5.1" } }, "node_modules/@microsoft/api-documenter/node_modules/@rushstack/node-core-library": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.5.0.tgz", - "integrity": "sha512-Cl3MYQ74Je5Y/EngMxcA3SpHjGZ/022nKbAO1aycGfQ+7eKyNCBu0oywj5B1f367GCzuHBgy+3BlVLKysHkXZw==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.5.1.tgz", + "integrity": "sha512-ZutW56qIzH8xIOlfyaLQJFx+8IBqdbVCZdnj+XT1MorQ1JqqxHse8vbCpEM+2MjsrqcbxcgDIbfggB1ZSQ2A3g==", "dev": true, "dependencies": { "ajv": "~8.13.0", @@ -680,12 +696,12 @@ } }, "node_modules/@microsoft/api-documenter/node_modules/@rushstack/terminal": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.13.2.tgz", - "integrity": "sha512-t8i0PsGvBHmFBY8pryO3badqFlxQsm2rw3KYrzjcmVkG/WGklKg1qVkr9beAS1Oe8XWDRgj6SkoHkpNjs7aaNw==", + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.13.3.tgz", + "integrity": "sha512-fc3zjXOw8E0pXS5t9vTiIPx9gHA0fIdTXsu9mT4WbH+P3mYvnrX0iAQ5a6NvyK1+CqYWBTw/wVNx7SDJkI+WYQ==", "dev": true, "dependencies": { - "@rushstack/node-core-library": "5.5.0", + "@rushstack/node-core-library": "5.5.1", "supports-color": "~8.1.1" }, "peerDependencies": { @@ -698,12 +714,12 @@ } }, "node_modules/@microsoft/api-documenter/node_modules/@rushstack/ts-command-line": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.22.2.tgz", - "integrity": "sha512-xkvrGd6D9dPlI3I401Thc640WNsEPB1sGEmy12a2VJaPQPwhE6Ik0gEVPZJ/2G1w213eaCAdxUY1xpiTulsmpA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.22.4.tgz", + "integrity": "sha512-QoyhbWfyF9Ixg5DWdPzxO3h2RmJ7i5WH9b7qLzD5h5WFya/ZqicjdPrVwQiGtrFvAbBj8jhcC9DhbzU9xAk78g==", "dev": true, "dependencies": { - "@rushstack/terminal": "0.13.2", + "@rushstack/terminal": "0.13.3", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" @@ -1286,31 +1302,32 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz", - "integrity": "sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.1.0.tgz", + "integrity": "sha512-LlNBaHFCEBPHyD4pZXb35mzjGkuGKXU5eeCA1SxvHfiRES0E82dOounfVpL4DCqYvJEKab0bZIA0gCRpdLKkCw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.16.1", - "@typescript-eslint/type-utils": "7.16.1", - "@typescript-eslint/utils": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", + "@typescript-eslint/scope-manager": "8.1.0", + "@typescript-eslint/type-utils": "8.1.0", + "@typescript-eslint/utils": "8.1.0", + "@typescript-eslint/visitor-keys": "8.1.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1319,27 +1336,27 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.1.tgz", - "integrity": "sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.1.0.tgz", + "integrity": "sha512-U7iTAtGgJk6DPX9wIWPPOlt1gO57097G06gIcl0N0EEnNw8RGD62c+2/DiP/zL7KrkqnnqF7gtFGR7YgzPllTA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "7.16.1", - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/typescript-estree": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", + "@typescript-eslint/scope-manager": "8.1.0", + "@typescript-eslint/types": "8.1.0", + "@typescript-eslint/typescript-estree": "8.1.0", + "@typescript-eslint/visitor-keys": "8.1.0", "debug": "^4.3.4" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1347,18 +1364,46 @@ } } }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz", + "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz", - "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.1.0.tgz", + "integrity": "sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1" + "@typescript-eslint/types": "8.1.0", + "@typescript-eslint/visitor-keys": "8.1.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz", + "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -1366,26 +1411,24 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz", - "integrity": "sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.1.0.tgz", + "integrity": "sha512-oLYvTxljVvsMnldfl6jIKxTaU7ok7km0KDrwOt1RHYu6nxlhN3TIx8k5Q52L6wR33nOwDgM7VwW1fT1qMNfFIA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.16.1", - "@typescript-eslint/utils": "7.16.1", + "@typescript-eslint/typescript-estree": "8.1.0", + "@typescript-eslint/utils": "8.1.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "eslint": "^8.56.0" - }, "peerDependenciesMeta": { "typescript": { "optional": true @@ -1407,14 +1450,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz", - "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.1.0.tgz", + "integrity": "sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", + "@typescript-eslint/types": "8.1.0", + "@typescript-eslint/visitor-keys": "8.1.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1423,7 +1466,7 @@ "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -1435,6 +1478,20 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/types": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz", + "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -1462,9 +1519,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "license": "ISC", "bin": { @@ -1475,39 +1532,68 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.1.tgz", - "integrity": "sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.1.0.tgz", + "integrity": "sha512-ypRueFNKTIFwqPeJBfeIpxZ895PQhNyH4YID6js0UoBImWYoSjBsahUn9KMiJXh94uOjVBgHD9AmkyPsPnFwJA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.16.1", - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/typescript-estree": "7.16.1" + "@typescript-eslint/scope-manager": "8.1.0", + "@typescript-eslint/types": "8.1.0", + "@typescript-eslint/typescript-estree": "8.1.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz", + "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz", - "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.1.0.tgz", + "integrity": "sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/types": "8.1.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/@typescript-eslint/types": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz", + "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -1870,15 +1956,6 @@ "node": ">=0.10.0" } }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -1910,9 +1987,9 @@ "dev": true }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -1922,18 +1999,6 @@ "node": ">= 8" } }, - "node_modules/append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", - "dev": true, - "dependencies": { - "buffer-equal": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/archiver": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", @@ -2117,12 +2182,6 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, "node_modules/are-docs-informative": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", @@ -2156,39 +2215,6 @@ "node": ">=0.10.0" } }, - "node_modules/arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", - "dev": true, - "dependencies": { - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", - "dev": true, - "dependencies": { - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", @@ -2201,50 +2227,7 @@ "node_modules/array-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", - "dev": true, - "dependencies": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-initial/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", - "dev": true, - "dependencies": { - "is-number": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-last/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -2259,38 +2242,16 @@ "node": ">=0.10.0" } }, - "node_modules/array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", - "dev": true, - "dependencies": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/assertion-error": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", @@ -2347,37 +2308,16 @@ "node": ">= 10.13.0" } }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, "node_modules/async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-2.0.0.tgz", + "integrity": "sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==", "dev": true, "dependencies": { - "async-done": "^1.2.2" + "async-done": "^2.0.0" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/async-settle/node_modules/async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/asynckit": { @@ -2413,38 +2353,17 @@ "dev": true }, "node_modules/bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bach/-/bach-2.0.1.tgz", + "integrity": "sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==", "dev": true, "dependencies": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" + "async-done": "^2.0.0", + "async-settle": "^2.0.0", + "now-and-later": "^3.0.0" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/bach/node_modules/async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, "node_modules/balanced-match": { @@ -2499,36 +2418,6 @@ "streamx": "^2.18.0" } }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -2591,6 +2480,41 @@ "url": "https://bevry.me/fund" } }, + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2602,12 +2526,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -2652,15 +2576,6 @@ "node": "*" } }, - "node_modules/buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -2676,26 +2591,6 @@ "node": ">= 0.8" } }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cacheable-lookup": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", @@ -2735,19 +2630,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2852,95 +2734,6 @@ "node": ">=8" } }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -3002,42 +2795,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", - "dev": true, - "dependencies": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -3094,12 +2851,6 @@ "node": ">= 12.0.0" } }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, "node_modules/compress-commons": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", @@ -3299,23 +3050,17 @@ "safe-buffer": "~5.1.1" } }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/copy-props": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", - "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-4.0.0.tgz", + "integrity": "sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==", "dev": true, "dependencies": { - "each-props": "^1.3.2", + "each-props": "^3.0.0", "is-plain-object": "^5.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, "node_modules/core-util-is": { @@ -3594,15 +3339,6 @@ "ms": "^2.1.1" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/decimal.js": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", @@ -3668,27 +3404,6 @@ "node": ">=16.0.0" } }, - "node_modules/default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", - "dev": true, - "dependencies": { - "kind-of": "^5.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", @@ -3698,31 +3413,6 @@ "node": ">=10" } }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/degenerator": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", @@ -3748,7 +3438,7 @@ "node_modules/detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", "dev": true, "engines": { "node": ">=0.10.0" @@ -3783,6 +3473,7 @@ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -3790,15 +3481,6 @@ "node": ">=8" } }, - "node_modules/dir-glob/node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -3811,53 +3493,17 @@ "node": ">=6.0.0" } }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/duplexify/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, "node_modules/each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-3.0.0.tgz", + "integrity": "sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==", "dev": true, "dependencies": { - "is-plain-object": "^2.0.1", + "is-plain-object": "^5.0.0", "object.defaults": "^1.1.0" - } - }, - "node_modules/each-props/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, "node_modules/eastasianwidth": { @@ -3989,15 +3635,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, "node_modules/es-module-lexer": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", @@ -4371,138 +4008,10 @@ "node": ">=0.8.x" } }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "node_modules/expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, "dependencies": { "homedir-polyfill": "^1.0.1" @@ -4545,58 +4054,6 @@ "node": ">=0.10.0" } }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -4649,6 +4106,7 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -4660,19 +4118,6 @@ "node": ">=8.6.0" } }, - "node_modules/fast-glob/node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -4685,6 +4130,15 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -4739,9 +4193,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -4775,69 +4229,44 @@ "micromatch": "^4.0.2" } }, - "node_modules/find-yarn-workspace-root/node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "dev": true, "dependencies": { "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", "resolve-dir": "^1.0.1" }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", + "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", "dev": true, "dependencies": { "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", + "is-plain-object": "^5.0.0", "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" + "object.pick": "^1.3.0", + "parse-filepath": "^1.0.2" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fined/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, "node_modules/flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", + "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/flat": { @@ -4903,35 +4332,10 @@ "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/flush-write-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, "node_modules/follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, "funding": [ { @@ -4951,7 +4355,7 @@ "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -4960,7 +4364,7 @@ "node_modules/for-own": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", "dev": true, "dependencies": { "for-in": "^1.0.1" @@ -5019,18 +4423,6 @@ "node": ">=12.20.0" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", @@ -5064,41 +4456,16 @@ } }, "node_modules/fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", + "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" + "graceful-fs": "^4.2.8", + "streamx": "^2.12.0" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fs-mkdirp-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/fs-mkdirp-stream/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "node": ">=10.13.0" } }, "node_modules/fs.realpath": { @@ -5234,20 +4601,6 @@ "node": "*" } }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/get-port": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.1.0.tgz", @@ -5322,15 +4675,6 @@ "node": ">= 4.0.0" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/glob": { "version": "10.4.1", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", @@ -5366,301 +4710,47 @@ } }, "node_modules/glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.2.tgz", + "integrity": "sha512-R8z6eTB55t3QeZMmU1C+Gv+t5UnNRkA55c5yo67fAVfxODxieTwsjNG7utxS/73NdP1NbDgCrhVEg2h00y4fFw==", "dev": true, "dependencies": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", + "@gulpjs/to-absolute-glob": "^4.0.0", + "anymatch": "^3.1.3", + "fastq": "^1.13.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" + "normalize-path": "^3.0.0", + "streamx": "^2.12.5" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/glob-stream/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=10.13.0" } }, "node_modules/glob-stream/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-stream/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "node": ">=10.13.0" } }, "node_modules/glob-watcher": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", - "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-6.0.0.tgz", + "integrity": "sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==", "dev": true, "dependencies": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "normalize-path": "^3.0.0", - "object.defaults": "^1.1.0" + "async-done": "^2.0.0", + "chokidar": "^3.5.3" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/glob-watcher/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/glob-watcher/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/glob-watcher/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", - "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/glob-watcher/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-watcher/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/glob-watcher/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/glob-watcher/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, "node_modules/glob/node_modules/brace-expansion": { @@ -5704,7 +4794,7 @@ "node_modules/global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, "dependencies": { "expand-tilde": "^2.0.2", @@ -5761,6 +4851,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -5777,15 +4868,15 @@ } }, "node_modules/glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-2.2.0.tgz", + "integrity": "sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==", "dev": true, "dependencies": { - "sparkles": "^1.0.0" + "sparkles": "^2.1.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/google-closure-compiler": { @@ -5899,9 +4990,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, "node_modules/grapheme-splitter": { @@ -5917,258 +5008,74 @@ "dev": true }, "node_modules/gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.0.tgz", + "integrity": "sha512-S8Z8066SSileaYw1S2N1I64IUc/myI2bqe2ihOBzO6+nKpvNSg7ZcWJt/AwF8LC/NVN+/QZ560Cb/5OPsyhkhg==", "dev": true, "dependencies": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" + "glob-watcher": "^6.0.0", + "gulp-cli": "^3.0.0", + "undertaker": "^2.0.0", + "vinyl-fs": "^4.0.0" }, "bin": { "gulp": "bin/gulp.js" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, "node_modules/gulp-cli": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", - "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-3.0.0.tgz", + "integrity": "sha512-RtMIitkT8DEMZZygHK2vEuLPqLPAFB4sntSxg4NoDta7ciwGZ18l7JuhCTiS5deOJi2IoK0btE+hs6R4sfj7AA==", "dev": true, "dependencies": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.4.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.2.0", - "yargs": "^7.1.0" + "@gulpjs/messages": "^1.1.0", + "chalk": "^4.1.2", + "copy-props": "^4.0.0", + "gulplog": "^2.2.0", + "interpret": "^3.1.1", + "liftoff": "^5.0.0", + "mute-stdout": "^2.0.0", + "replace-homedir": "^2.0.0", + "semver-greatest-satisfied-range": "^2.0.0", + "string-width": "^4.2.3", + "v8flags": "^4.0.0", + "yargs": "^16.2.0" }, "bin": { "gulp": "bin/gulp.js" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, - "node_modules/gulp-cli/node_modules/ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "dependencies": { - "ansi-wrap": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "node_modules/gulp-cli/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "node_modules/gulp-cli/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/gulp-cli/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/gulp-cli/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/gulp-cli/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true - }, "node_modules/gulp-cli/node_modules/yargs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", - "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.1" + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" } }, "node_modules/gulp-cli/node_modules/yargs-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", - "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "dependencies": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" + "engines": { + "node": ">=10" } }, "node_modules/gulp-concat": { @@ -6511,27 +5418,15 @@ } }, "node_modules/gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz", + "integrity": "sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==", "dev": true, "dependencies": { - "glogg": "^1.0.0" + "glogg": "^2.2.0" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" + "node": ">= 10.13.0" } }, "node_modules/has-flag": { @@ -6543,57 +5438,6 @@ "node": ">=8" } }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -6712,9 +5556,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -6836,27 +5680,31 @@ "dev": true }, "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "dev": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 12" } }, - "node_modules/ip": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz", - "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==", + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "dev": true }, "node_modules/is-absolute": { @@ -6872,33 +5720,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -6911,12 +5732,6 @@ "node": ">=8" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, "node_modules/is-core-module": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", @@ -6929,50 +5744,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -7045,34 +5816,19 @@ "node_modules/is-negated-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "node": ">=0.12.0" } }, "node_modules/is-path-inside": { @@ -7152,16 +5908,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, "node_modules/is-valid-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -7261,6 +6011,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true + }, "node_modules/jsdoc-type-pratt-parser": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", @@ -7271,9 +6027,9 @@ } }, "node_modules/jsdom": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.0.tgz", - "integrity": "sha512-6gpM7pRXCwIOKxX47cgOyvyQDN/Eh0f1MeKySBV2xGdKtqJBLj8P25eY3EVCWo2mglDDzozR2r2MW4T+JiNUZA==", + "version": "24.1.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.1.tgz", + "integrity": "sha512-5O1wWV99Jhq4DV7rCLIoZ/UIhyQeDR7wHVyZAHAshbrvZsLs+Xzz7gtwnlJTJDjleiTKh54F4dXrX70vJQTyJQ==", "dependencies": { "cssstyle": "^4.0.1", "data-urls": "^5.0.0", @@ -7281,11 +6037,11 @@ "form-data": "^4.0.0", "html-encoding-sniffer": "^4.0.0", "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.4", + "https-proxy-agent": "^7.0.5", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.10", + "nwsapi": "^2.2.12", "parse5": "^7.1.2", - "rrweb-cssom": "^0.7.0", + "rrweb-cssom": "^0.7.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^4.1.4", @@ -7294,7 +6050,7 @@ "whatwg-encoding": "^3.1.1", "whatwg-mimetype": "^4.0.0", "whatwg-url": "^14.0.0", - "ws": "^8.17.0", + "ws": "^8.18.0", "xml-name-validator": "^5.0.0" }, "engines": { @@ -7376,9 +6132,9 @@ } }, "node_modules/jsdom/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "engines": { "node": ">=10.0.0" }, @@ -7500,12 +6256,6 @@ "integrity": "sha512-silMIRiFjUWlfaDhkgSzpuAyQ6EX/o09Eu8ZBfmFwQMbax7+LQzeIU2CBrICT6Ne4l86ITCGvUCBpCubWYy0Yw==", "dev": true }, - "node_modules/just-debounce": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", - "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", - "dev": true - }, "node_modules/just-extend": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", @@ -7521,15 +6271,6 @@ "json-buffer": "3.0.1" } }, - "node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/klaw-sync": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", @@ -7552,16 +6293,12 @@ } }, "node_modules/last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-2.0.0.tgz", + "integrity": "sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==", "dev": true, - "dependencies": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" - }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/lazystream": { @@ -7591,28 +6328,13 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", + "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", "dev": true, - "dependencies": { - "flush-write-stream": "^1.0.2" - }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, "node_modules/levn": { @@ -7638,62 +6360,21 @@ } }, "node_modules/liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-5.0.0.tgz", + "integrity": "sha512-a5BQjbCHnB+cy+gsro8lXJ4kZluzOijzJ1UVVfyJYZC+IP2pLv1h4+aysQeKuTmyO8NAqfyQAk4HWaP/HjcKTg==", "dev": true, "dependencies": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" + "extend": "^3.0.2", + "findup-sync": "^5.0.0", + "fined": "^2.0.0", + "flagged-respawn": "^2.0.0", + "is-plain-object": "^5.0.0", + "rechoir": "^0.8.0", + "resolve": "^1.20.0" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/liftoff/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, "node_modules/locate-app": { @@ -7870,31 +6551,10 @@ "es5-ext": "~0.10.2" } }, - "node_modules/make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/make-iterator/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -7906,18 +6566,6 @@ "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=", "dev": true }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/markdown-tables-to-json": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/markdown-tables-to-json/-/markdown-tables-to-json-0.1.7.tgz", @@ -7927,48 +6575,6 @@ "@ts-stack/markdown": "^1.3.0" } }, - "node_modules/matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", - "dev": true, - "dependencies": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/matchdep/node_modules/findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/matchdep/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/memoizee": { "version": "0.4.15", "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", @@ -7996,123 +6602,22 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" + "node": ">=8.6" } }, "node_modules/mime": { @@ -8191,19 +6696,6 @@ "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", "dev": true }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -8223,9 +6715,9 @@ "dev": true }, "node_modules/mocha": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.6.0.tgz", - "integrity": "sha512-hxjt4+EEB0SA0ZDygSS015t65lJw/I2yRCS3Ae+SJ5FrbzrXgfYwJr96f0OvIXdj7h4lv/vLCrH3rkiuizFSvw==", + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", + "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", "dev": true, "dependencies": { "ansi-colors": "^4.1.3", @@ -8381,43 +6873,12 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-2.0.0.tgz", + "integrity": "sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==", "dev": true, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, "node_modules/natural-compare": { @@ -8515,30 +6976,21 @@ } }, "node_modules/now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", + "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", "dev": true, "dependencies": { - "once": "^1.3.2" + "once": "^1.4.0" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, "node_modules/nwsapi": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz", - "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==" + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz", + "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==" }, "node_modules/object-assign": { "version": "4.1.1", @@ -8549,134 +7001,10 @@ "node": ">=0.10.0" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.defaults": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", "dev": true, "dependencies": { "array-each": "^1.0.1", @@ -8688,23 +7016,10 @@ "node": ">=0.10.0" } }, - "node_modules/object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "dev": true, - "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dev": true, "dependencies": { "isobject": "^3.0.1" @@ -8713,19 +7028,6 @@ "node": ">=0.10.0" } }, - "node_modules/object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", - "dev": true, - "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -8777,42 +7079,6 @@ "node": ">= 0.8.0" } }, - "node_modules/ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.1" - } - }, - "node_modules/ordered-read-streams/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -8881,13 +7147,12 @@ } }, "node_modules/pac-resolver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", - "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", "dev": true, "dependencies": { "degenerator": "^5.0.0", - "ip": "^1.1.8", "netmask": "^2.0.2" }, "engines": { @@ -8915,7 +7180,7 @@ "node_modules/parse-filepath": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", "dev": true, "dependencies": { "is-absolute": "^1.0.0", @@ -8951,7 +7216,7 @@ "node_modules/parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true, "engines": { "node": ">=0.10.0" @@ -8968,15 +7233,6 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/patch-package": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.0.tgz", @@ -9063,12 +7319,6 @@ "node": ">=6" } }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -9105,7 +7355,7 @@ "node_modules/path-root": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", "dev": true, "dependencies": { "path-root-regex": "^0.1.0" @@ -9117,7 +7367,7 @@ "node_modules/path-root-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -9164,17 +7414,13 @@ "dev": true }, "node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/pathval": { @@ -9210,36 +7456,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/plugin-error": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", @@ -9299,15 +7515,6 @@ "ms": "^2.1.1" } }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -9344,10 +7551,11 @@ } }, "node_modules/prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -9358,13 +7566,25 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "node_modules/prettier-plugin-organize-imports": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.0.0.tgz", + "integrity": "sha512-vnKSdgv9aOlqKeEFGhf9SCBsTyzDSyScy1k7E0R1Uo4L0cTcOV7c1XQaT7jfXIOc/p08WLBfN2QUQA9zDSZMxA==", "dev": true, - "engines": { - "node": ">= 0.8" + "license": "MIT", + "peerDependencies": { + "@vue/language-plugin-pug": "^2.0.24", + "prettier": ">=2.0", + "typescript": ">=2.9", + "vue-tsc": "^2.0.24" + }, + "peerDependenciesMeta": { + "@vue/language-plugin-pug": { + "optional": true + }, + "vue-tsc": { + "optional": true + } } }, "node_modules/process": { @@ -9440,27 +7660,6 @@ "once": "^1.3.1" } }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -9633,15 +7832,15 @@ } }, "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, "dependencies": { - "resolve": "^1.1.6" + "resolve": "^1.20.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/regenerator-runtime": { @@ -9650,107 +7849,28 @@ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", - "dev": true, - "dependencies": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remove-bom-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/remove-bom-stream/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, "node_modules/remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", "dev": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "engines": { - "node": ">=0.10" + "node": ">= 10" } }, "node_modules/replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-2.0.0.tgz", + "integrity": "sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==", "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" - }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/replacestream": { @@ -9806,12 +7926,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -9843,7 +7957,7 @@ "node_modules/resolve-dir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "dev": true, "dependencies": { "expand-tilde": "^2.0.0", @@ -9863,24 +7977,17 @@ } }, "node_modules/resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz", + "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", "dev": true, "dependencies": { - "value-or-function": "^3.0.0" + "value-or-function": "^4.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, "node_modules/responselike": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", @@ -9911,15 +8018,6 @@ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -9937,9 +8035,9 @@ "dev": true }, "node_modules/rimraf": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.9.tgz", - "integrity": "sha512-3i7b8OcswU6CpU8Ej89quJD4O98id7TtVM5U4Mybh84zQXdrFmDLouWBEEaD/QfO3gDDfH+AGFCGsR7kngzQnA==", + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", "dev": true, "dependencies": { "glob": "^10.3.7" @@ -9947,9 +8045,6 @@ "bin": { "rimraf": "dist/esm/bin.mjs" }, - "engines": { - "node": "14 >=14.20 || 16 >=16.20 || >=18" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -10004,15 +8099,6 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -10051,15 +8137,15 @@ } }, "node_modules/semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-2.0.0.tgz", + "integrity": "sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==", "dev": true, "dependencies": { - "sver-compat": "^1.5.0" + "sver": "^1.8.3" }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/serialize-error": { @@ -10086,60 +8172,6 @@ "randombytes": "^2.1.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -10220,6 +8252,7 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -10240,209 +8273,17 @@ "npm": ">= 3.0.0" } }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/snapdragon/node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "dev": true, "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, @@ -10460,12 +8301,6 @@ "node": ">= 14" } }, - "node_modules/socks/node_modules/ip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", - "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", - "dev": true - }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -10485,12 +8320,6 @@ "decode-uri-component": "^0.2.0" } }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, "node_modules/spacetrim": { "version": "0.11.36", "resolved": "https://registry.npmjs.org/spacetrim/-/spacetrim-0.11.36.tgz", @@ -10508,12 +8337,12 @@ ] }, "node_modules/sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-2.1.0.tgz", + "integrity": "sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/spawn-command": { @@ -10522,50 +8351,18 @@ "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", "dev": true }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, "node_modules/spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, "node_modules/spdx-license-ids": { "version": "3.0.11", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", "dev": true }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -10581,100 +8378,13 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "node_modules/stream-composer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz", + "integrity": "sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==", "dev": true, "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" + "streamx": "^2.13.2" } }, "node_modules/stream-exhaust": { @@ -10683,12 +8393,6 @@ "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", "dev": true }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, "node_modules/stream-to-array": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", @@ -10838,18 +8542,6 @@ "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/strip-bom-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", @@ -10895,14 +8587,23 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "node_modules/sver": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/sver/-/sver-1.8.4.tgz", + "integrity": "sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==", "dev": true, - "dependencies": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" + "optionalDependencies": { + "semver": "^6.3.0" + } + }, + "node_modules/sver/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver.js" } }, "node_modules/symbol-tree": { @@ -10954,6 +8655,15 @@ "streamx": "^2.15.0" } }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "dev": true, + "dependencies": { + "streamx": "^2.12.5" + } + }, "node_modules/text-decoder": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz", @@ -10987,41 +8697,6 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, - "node_modules/through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, - "dependencies": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - } - }, - "node_modules/through2-filter/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2-filter/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, "node_modules/time-stamp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", @@ -11053,58 +8728,6 @@ "node": ">=0.6.0" } }, - "node_modules/to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "dev": true, - "dependencies": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -11117,50 +8740,16 @@ "node": ">=8.0" } }, - "node_modules/to-regex-range/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz", + "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", "dev": true, "dependencies": { - "through2": "^2.0.3" + "streamx": "^2.12.5" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/to-through/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/to-through/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "node": ">=10.13.0" } }, "node_modules/tough-cookie": { @@ -11264,9 +8853,9 @@ "dev": true }, "node_modules/typescript": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -11289,47 +8878,44 @@ "node_modules/unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/undertaker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", - "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-2.0.0.tgz", + "integrity": "sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==", "dev": true, "dependencies": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "fast-levenshtein": "^1.0.0", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" + "bach": "^2.0.1", + "fast-levenshtein": "^3.0.0", + "last-run": "^2.0.0", + "undertaker-registry": "^2.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, "node_modules/undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-2.0.0.tgz", + "integrity": "sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/undertaker/node_modules/fast-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", - "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", + "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", + "dev": true, + "dependencies": { + "fastest-levenshtein": "^1.0.7" + } }, "node_modules/union": { "version": "0.5.0", @@ -11343,40 +8929,6 @@ "node": ">= 0.8.0" } }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, - "dependencies": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -11386,64 +8938,6 @@ "node": ">= 10.0.0" } }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -11453,13 +8947,6 @@ "punycode": "^2.1.0" } }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, "node_modules/url-join": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", @@ -11475,15 +8962,6 @@ "requires-port": "^1.0.0" } }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/userhome": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/userhome/-/userhome-1.0.0.tgz", @@ -11509,34 +8987,21 @@ } }, "node_modules/v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-4.0.1.tgz", + "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==", "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "node": ">= 10.13.0" } }, "node_modules/value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", + "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/vinyl": { @@ -11556,87 +9021,113 @@ "node": ">= 0.10" } }, - "node_modules/vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "node_modules/vinyl-contents": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", + "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", "dev": true, "dependencies": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" + "bl": "^5.0.0", + "vinyl": "^3.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, - "node_modules/vinyl-fs/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/vinyl-contents/node_modules/vinyl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", "dev": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "clone": "^2.1.2", + "clone-stats": "^1.0.0", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/vinyl-fs/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "node_modules/vinyl-fs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.0.tgz", + "integrity": "sha512-7GbgBnYfaquMk3Qu9g22x000vbYkOex32930rBnc3qByw6HfMEAoELjCjoJv4HuEQxHAurT+nvMHm6MnJllFLw==", "dev": true, "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "fs-mkdirp-stream": "^2.0.1", + "glob-stream": "^8.0.0", + "graceful-fs": "^4.2.11", + "iconv-lite": "^0.6.3", + "is-valid-glob": "^1.0.0", + "lead": "^4.0.0", + "normalize-path": "3.0.0", + "resolve-options": "^2.0.0", + "stream-composer": "^1.0.2", + "streamx": "^2.14.0", + "to-through": "^3.0.0", + "value-or-function": "^4.0.0", + "vinyl": "^3.0.0", + "vinyl-sourcemap": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/vinyl-fs/node_modules/vinyl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", + "dev": true, + "dependencies": { + "clone": "^2.1.2", + "clone-stats": "^1.0.0", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + }, + "engines": { + "node": ">=10.13.0" } }, "node_modules/vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", + "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", "dev": true, "dependencies": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" + "convert-source-map": "^2.0.0", + "graceful-fs": "^4.2.10", + "now-and-later": "^3.0.0", + "streamx": "^2.12.5", + "vinyl": "^3.0.0", + "vinyl-contents": "^2.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, - "node_modules/vinyl-sourcemap/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "node_modules/vinyl-sourcemap/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/vinyl-sourcemap/node_modules/vinyl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", "dev": true, "dependencies": { - "remove-trailing-separator": "^1.0.1" + "clone": "^2.1.2", + "clone-stats": "^1.0.0", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, "node_modules/vinyl-sourcemaps-apply": { @@ -11855,12 +9346,6 @@ "node": ">= 8" } }, - "node_modules/which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, "node_modules/workerpool": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", diff --git a/package.json b/package.json index c0a55f201..fa7ab7163 100644 --- a/package.json +++ b/package.json @@ -101,14 +101,14 @@ "license": "Apache-2.0", "devDependencies": { "@blockly/block-test": "^6.0.4", - "@blockly/dev-tools": "^8.0.4", + "@blockly/dev-tools": "^8.0.6", "@blockly/theme-modern": "^6.0.3", "@hyperjump/browser": "^1.1.4", "@hyperjump/json-schema": "^1.5.0", "@microsoft/api-documenter": "^7.22.4", "@microsoft/api-extractor": "^7.29.5", - "@typescript-eslint/eslint-plugin": "^7.3.1", - "@typescript-eslint/parser": "^7.16.1", + "@typescript-eslint/eslint-plugin": "^8.1.0", + "@typescript-eslint/parser": "^8.1.0", "async-done": "^2.0.0", "chai": "^5.1.1", "concurrently": "^8.0.1", @@ -118,7 +118,7 @@ "eslint-plugin-jsdoc": "^48.0.2", "glob": "^10.3.4", "google-closure-compiler": "^20240317.0.0", - "gulp": "^4.0.2", + "gulp": "^5.0.0", "gulp-concat": "^2.6.1", "gulp-gzip": "^1.4.2", "gulp-header": "^2.0.9", @@ -134,7 +134,8 @@ "markdown-tables-to-json": "^0.1.7", "mocha": "^10.0.0", "patch-package": "^8.0.0", - "prettier": "3.3.2", + "prettier": "^3.3.3", + "prettier-plugin-organize-imports": "^4.0.0", "readline-sync": "^1.4.10", "rimraf": "^5.0.0", "typescript": "^5.3.3", @@ -142,7 +143,7 @@ "yargs": "^17.2.1" }, "dependencies": { - "jsdom": "24.1.0" + "jsdom": "24.1.1" }, "engines": { "node": ">=18" diff --git a/tests/browser/test/basic_block_factory_test.mjs b/tests/browser/test/basic_block_factory_test.mjs index e20892471..a9f3cc3f3 100644 --- a/tests/browser/test/basic_block_factory_test.mjs +++ b/tests/browser/test/basic_block_factory_test.mjs @@ -9,7 +9,7 @@ */ import * as chai from 'chai'; -import {testSetup, testFileLocations} from './test_setup.mjs'; +import {testFileLocations, testSetup} from './test_setup.mjs'; suite('Testing Connecting Blocks', function (done) { // Setting timeout to unlimited as the webdriver takes a longer time to run than most mocha test diff --git a/tests/browser/test/basic_block_test.mjs b/tests/browser/test/basic_block_test.mjs index 515cf5668..326e20ecf 100644 --- a/tests/browser/test/basic_block_test.mjs +++ b/tests/browser/test/basic_block_test.mjs @@ -11,12 +11,11 @@ import * as chai from 'chai'; import { - testSetup, - testFileLocations, - getAllBlocks, dragNthBlockFromFlyout, + getAllBlocks, + testFileLocations, + testSetup, } from './test_setup.mjs'; -import {Key} from 'webdriverio'; suite('Basic block tests', function (done) { // Setting timeout to unlimited as the webdriver takes a longer time diff --git a/tests/browser/test/basic_playground_test.mjs b/tests/browser/test/basic_playground_test.mjs index 11ad7a368..55ff58e4b 100644 --- a/tests/browser/test/basic_playground_test.mjs +++ b/tests/browser/test/basic_playground_test.mjs @@ -10,13 +10,13 @@ import * as chai from 'chai'; import { - testSetup, - testFileLocations, - dragNthBlockFromFlyout, - dragBlockTypeFromFlyout, connect, contextMenuSelect, + dragBlockTypeFromFlyout, + dragNthBlockFromFlyout, PAUSE_TIME, + testFileLocations, + testSetup, } from './test_setup.mjs'; async function getIsCollapsed(browser, blockId) { diff --git a/tests/browser/test/block_undo_test.mjs b/tests/browser/test/block_undo_test.mjs index 1c96422dc..0d9f256c2 100644 --- a/tests/browser/test/block_undo_test.mjs +++ b/tests/browser/test/block_undo_test.mjs @@ -11,11 +11,11 @@ import * as chai from 'chai'; import {Key} from 'webdriverio'; import { - testSetup, - testFileLocations, dragBlockTypeFromFlyout, - screenDirection, getAllBlocks, + screenDirection, + testFileLocations, + testSetup, } from './test_setup.mjs'; suite('Testing undo block movement', function (done) { diff --git a/tests/browser/test/delete_blocks_test.mjs b/tests/browser/test/delete_blocks_test.mjs index 1e560dcce..27e17054d 100644 --- a/tests/browser/test/delete_blocks_test.mjs +++ b/tests/browser/test/delete_blocks_test.mjs @@ -5,16 +5,16 @@ */ import * as chai from 'chai'; +import {Key} from 'webdriverio'; import { - testSetup, - testFileLocations, - getAllBlocks, - getBlockElementById, clickBlock, contextMenuSelect, + getAllBlocks, + getBlockElementById, PAUSE_TIME, + testFileLocations, + testSetup, } from './test_setup.mjs'; -import {Key} from 'webdriverio'; const firstBlockId = 'root_block'; const startBlocks = { diff --git a/tests/browser/test/extensive_test.mjs b/tests/browser/test/extensive_test.mjs index 2b1245d2a..786be0ade 100644 --- a/tests/browser/test/extensive_test.mjs +++ b/tests/browser/test/extensive_test.mjs @@ -9,14 +9,14 @@ */ import * as chai from 'chai'; -import { - testSetup, - testFileLocations, - getBlockElementById, - getAllBlocks, - PAUSE_TIME, -} from './test_setup.mjs'; import {Key} from 'webdriverio'; +import { + getAllBlocks, + getBlockElementById, + PAUSE_TIME, + testFileLocations, + testSetup, +} from './test_setup.mjs'; suite('This tests loading Large Configuration and Deletion', function (done) { // Setting timeout to unlimited as the webdriver takes a longer time to run than most mocha test diff --git a/tests/browser/test/field_edits_test.mjs b/tests/browser/test/field_edits_test.mjs index a4dbbb823..bd4da0019 100644 --- a/tests/browser/test/field_edits_test.mjs +++ b/tests/browser/test/field_edits_test.mjs @@ -9,14 +9,14 @@ */ import * as chai from 'chai'; +import {Key} from 'webdriverio'; import { - testSetup, - testFileLocations, + clickWorkspace, dragBlockTypeFromFlyout, screenDirection, - clickWorkspace, + testFileLocations, + testSetup, } from './test_setup.mjs'; -import {Key} from 'webdriverio'; suite('Testing Field Edits', function (done) { // Setting timeout to unlimited as the webdriver takes a longer time to run than most mocha test diff --git a/tests/browser/test/mutator_test.mjs b/tests/browser/test/mutator_test.mjs index 46bc2abbe..6d077b9fd 100644 --- a/tests/browser/test/mutator_test.mjs +++ b/tests/browser/test/mutator_test.mjs @@ -6,15 +6,15 @@ import * as chai from 'chai'; import { - testSetup, - testFileLocations, - connect, - dragBlockTypeFromFlyout, - screenDirection, PAUSE_TIME, - getBlockElementById, + connect, dragBlockFromMutatorFlyout, + dragBlockTypeFromFlyout, + getBlockElementById, openMutatorForBlock, + screenDirection, + testFileLocations, + testSetup, } from './test_setup.mjs'; suite('Mutating a block', function (done) { diff --git a/tests/browser/test/procedure_test.mjs b/tests/browser/test/procedure_test.mjs index 4c0e0897c..34368c732 100644 --- a/tests/browser/test/procedure_test.mjs +++ b/tests/browser/test/procedure_test.mjs @@ -10,13 +10,13 @@ import * as chai from 'chai'; import { - testSetup, - testFileLocations, - getSelectedBlockElement, - getNthBlockOfCategory, - getBlockTypeFromCategory, connect, + getBlockTypeFromCategory, + getNthBlockOfCategory, + getSelectedBlockElement, PAUSE_TIME, + testFileLocations, + testSetup, } from './test_setup.mjs'; suite('Testing Connecting Blocks', function (done) { diff --git a/tests/browser/test/test_setup.mjs b/tests/browser/test/test_setup.mjs index 3888815df..523a5d851 100644 --- a/tests/browser/test/test_setup.mjs +++ b/tests/browser/test/test_setup.mjs @@ -16,9 +16,9 @@ * identifiers that Selenium can use to find those elements. */ -import * as webdriverio from 'webdriverio'; import * as path from 'path'; import {fileURLToPath} from 'url'; +import * as webdriverio from 'webdriverio'; import {posixPath} from '../../../scripts/helpers.js'; let driver = null; diff --git a/tests/browser/test/toolbox_drag_test.mjs b/tests/browser/test/toolbox_drag_test.mjs index ab0fa828f..742872d93 100644 --- a/tests/browser/test/toolbox_drag_test.mjs +++ b/tests/browser/test/toolbox_drag_test.mjs @@ -10,12 +10,12 @@ import * as chai from 'chai'; import { - testSetup, - testFileLocations, getCategory, - scrollFlyout, - screenDirection, PAUSE_TIME, + screenDirection, + scrollFlyout, + testFileLocations, + testSetup, } from './test_setup.mjs'; // Categories in the basic toolbox. @@ -25,7 +25,6 @@ const basicCategories = [ 'Math', 'Text', 'Lists', - 'Colour', 'Variables', 'Functions', ]; @@ -39,12 +38,13 @@ const testCategories = [ 'Row', 'Stack', 'Statement', - 'Drag', + // Disabled due to #8466 + // 'Drag', + // Skip fields because it's an accordion that is already open. // 'Fields', 'Defaults', 'Numbers', - 'Angles', 'Drop-downs', // Note: images has a block that has a bad image source, but still builds and renders // just fine. diff --git a/tests/browser/test/workspace_comment_test.mjs b/tests/browser/test/workspace_comment_test.mjs index 0a7b12bf7..5719948d0 100644 --- a/tests/browser/test/workspace_comment_test.mjs +++ b/tests/browser/test/workspace_comment_test.mjs @@ -6,8 +6,7 @@ import * as chai from 'chai'; import * as sinon from 'sinon'; -import {Key} from 'webdriverio'; -import {testSetup, testFileLocations} from './test_setup.mjs'; +import {testFileLocations, testSetup} from './test_setup.mjs'; suite('Workspace comments', function () { // Setting timeout to unlimited as the webdriver takes a longer time diff --git a/tests/migration/validate-renamings.mjs b/tests/migration/validate-renamings.mjs index 439e216c8..d9c66ef9c 100755 --- a/tests/migration/validate-renamings.mjs +++ b/tests/migration/validate-renamings.mjs @@ -11,11 +11,10 @@ * (renamings-schema.json). */ -import JSON5 from 'json5'; -import {readFile} from 'fs/promises'; -import {posixPath} from '../../scripts/helpers.js'; import {validate} from '@hyperjump/json-schema/draft-2020-12'; import {BASIC} from '@hyperjump/json-schema/experimental'; +import {readFile} from 'fs/promises'; +import JSON5 from 'json5'; /** @type {URL} Renaming schema filename. */ const SCHEMA_URL = new URL('renamings.schema.json', import.meta.url); diff --git a/tests/mocha/astnode_test.js b/tests/mocha/astnode_test.js index 4c449b7fa..7ffe8efb9 100644 --- a/tests/mocha/astnode_test.js +++ b/tests/mocha/astnode_test.js @@ -4,8 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import {ASTNode} from '../../build/src/core/keyboard_nav/ast_node.js'; +import {assert} from '../../node_modules/chai/chai.js'; import { sharedTestSetup, sharedTestTeardown, diff --git a/tests/mocha/block_json_test.js b/tests/mocha/block_json_test.js index 9d6dfb738..6f286fa30 100644 --- a/tests/mocha/block_json_test.js +++ b/tests/mocha/block_json_test.js @@ -4,8 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import {Align} from '../../build/src/core/inputs/align.js'; +import {assert} from '../../node_modules/chai/chai.js'; import { sharedTestSetup, sharedTestTeardown, diff --git a/tests/mocha/block_test.js b/tests/mocha/block_test.js index dd070f86c..061584401 100644 --- a/tests/mocha/block_test.js +++ b/tests/mocha/block_test.js @@ -4,23 +4,22 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import {ConnectionType} from '../../build/src/core/connection_type.js'; -import {createDeprecationWarningStub} from './test_helpers/warnings.js'; -import {createRenderedBlock} from './test_helpers/block_definitions.js'; +import {EventType} from '../../build/src/core/events/type.js'; import * as eventUtils from '../../build/src/core/events/utils.js'; import {EndRowInput} from '../../build/src/core/inputs/end_row_input.js'; +import {assert} from '../../node_modules/chai/chai.js'; +import {createRenderedBlock} from './test_helpers/block_definitions.js'; +import { + createChangeListenerSpy, + createMockEvent, +} from './test_helpers/events.js'; +import {MockBubbleIcon, MockIcon} from './test_helpers/icon_mocks.js'; import { sharedTestSetup, sharedTestTeardown, workspaceTeardown, } from './test_helpers/setup_teardown.js'; -import { - createChangeListenerSpy, - createMockEvent, -} from './test_helpers/events.js'; -import {MockIcon, MockBubbleIcon} from './test_helpers/icon_mocks.js'; -import {IconType} from '../../build/src/core/icons/icon_types.js'; suite('Blocks', function () { setup(function () { @@ -1253,7 +1252,7 @@ suite('Blocks', function () { function assertCommentEvent(eventSpy, oldValue, newValue) { const calls = eventSpy.getCalls(); const event = calls[calls.length - 1].args[0]; - assert.equal(event.type, eventUtils.BLOCK_CHANGE); + assert.equal(event.type, EventType.BLOCK_CHANGE); assert.equal( event.element, 'comment', @@ -1273,7 +1272,7 @@ suite('Blocks', function () { function assertNoCommentEvent(eventSpy) { const calls = eventSpy.getCalls(); const event = calls[calls.length - 1].args[0]; - assert.notEqual(event.type, eventUtils.BLOCK_CHANGE); + assert.notEqual(event.type, EventType.BLOCK_CHANGE); } setup(function () { this.eventsFireSpy = sinon.spy(eventUtils.TEST_ONLY, 'fireInternal'); diff --git a/tests/mocha/blocks/lists_test.js b/tests/mocha/blocks/lists_test.js index cecf3c808..0c7a92bf6 100644 --- a/tests/mocha/blocks/lists_test.js +++ b/tests/mocha/blocks/lists_test.js @@ -4,14 +4,14 @@ * SPDX-License-Identifier: Apache-2.0 */ +import {ConnectionType} from '../../../build/src/core/connection_type.js'; import {assert} from '../../../node_modules/chai/chai.js'; +import {defineStatementBlock} from '../test_helpers/block_definitions.js'; import {runSerializationTestSuite} from '../test_helpers/serialization.js'; import { sharedTestSetup, sharedTestTeardown, } from '../test_helpers/setup_teardown.js'; -import {ConnectionType} from '../../../build/src/core/connection_type.js'; -import {defineStatementBlock} from '../test_helpers/block_definitions.js'; suite('Lists', function () { setup(function () { diff --git a/tests/mocha/blocks/logic_ternary_test.js b/tests/mocha/blocks/logic_ternary_test.js index 6661bd5d4..e6e3326ec 100644 --- a/tests/mocha/blocks/logic_ternary_test.js +++ b/tests/mocha/blocks/logic_ternary_test.js @@ -4,8 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../../node_modules/chai/chai.js'; import * as eventUtils from '../../../build/src/core/events/utils.js'; +import {assert} from '../../../node_modules/chai/chai.js'; import {runSerializationTestSuite} from '../test_helpers/serialization.js'; import { sharedTestSetup, diff --git a/tests/mocha/blocks/loops_test.js b/tests/mocha/blocks/loops_test.js index 8f4897e00..f8d74916c 100644 --- a/tests/mocha/blocks/loops_test.js +++ b/tests/mocha/blocks/loops_test.js @@ -4,8 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../../node_modules/chai/chai.js'; import * as Blockly from '../../../build/src/core/blockly.js'; +import {assert} from '../../../node_modules/chai/chai.js'; import { sharedTestSetup, sharedTestTeardown, diff --git a/tests/mocha/blocks/procedures_test.js b/tests/mocha/blocks/procedures_test.js index 600aefa6a..84dbf1746 100644 --- a/tests/mocha/blocks/procedures_test.js +++ b/tests/mocha/blocks/procedures_test.js @@ -4,13 +4,14 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../../node_modules/chai/chai.js'; import * as Blockly from '../../../build/src/core/blockly.js'; +import {assert} from '../../../node_modules/chai/chai.js'; +import {defineRowBlock} from '../test_helpers/block_definitions.js'; import { assertCallBlockStructure, assertDefBlockStructure, - createProcDefBlock, createProcCallBlock, + createProcDefBlock, MockProcedureModel, } from '../test_helpers/procedures.js'; import {runSerializationTestSuite} from '../test_helpers/serialization.js'; @@ -20,7 +21,6 @@ import { sharedTestTeardown, workspaceTeardown, } from '../test_helpers/setup_teardown.js'; -import {defineRowBlock} from '../test_helpers/block_definitions.js'; suite('Procedures', function () { setup(function () { diff --git a/tests/mocha/blocks/variables_test.js b/tests/mocha/blocks/variables_test.js index ea45d59c3..d12691dd4 100644 --- a/tests/mocha/blocks/variables_test.js +++ b/tests/mocha/blocks/variables_test.js @@ -4,16 +4,16 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../../node_modules/chai/chai.js'; -import { - sharedTestSetup, - sharedTestTeardown, -} from '../test_helpers/setup_teardown.js'; import {nameUsedWithConflictingParam} from '../../../build/src/core/variables.js'; +import {assert} from '../../../node_modules/chai/chai.js'; import { MockParameterModelWithVar, MockProcedureModel, } from '../test_helpers/procedures.js'; +import { + sharedTestSetup, + sharedTestTeardown, +} from '../test_helpers/setup_teardown.js'; suite('Variables', function () { setup(function () { diff --git a/tests/mocha/clipboard_test.js b/tests/mocha/clipboard_test.js index 37145de07..652698421 100644 --- a/tests/mocha/clipboard_test.js +++ b/tests/mocha/clipboard_test.js @@ -5,14 +5,14 @@ */ import {assert} from '../../node_modules/chai/chai.js'; -import { - sharedTestSetup, - sharedTestTeardown, -} from './test_helpers/setup_teardown.js'; import { assertEventFired, createChangeListenerSpy, } from './test_helpers/events.js'; +import { + sharedTestSetup, + sharedTestTeardown, +} from './test_helpers/setup_teardown.js'; suite('Clipboard', function () { setup(function () { diff --git a/tests/mocha/comment_test.js b/tests/mocha/comment_test.js index d4091b9c2..8024fa5e3 100644 --- a/tests/mocha/comment_test.js +++ b/tests/mocha/comment_test.js @@ -4,9 +4,9 @@ * SPDX-License-Identifier: Apache-2.0 */ +import {EventType} from '../../build/src/core/events/type.js'; import {assert} from '../../node_modules/chai/chai.js'; import {assertEventFired} from './test_helpers/events.js'; -import * as eventUtils from '../../build/src/core/events/utils.js'; import { sharedTestSetup, sharedTestTeardown, @@ -55,7 +55,7 @@ suite('Comments', function () { assertEventFired( this.eventsFireStub, Blockly.Events.BubbleOpen, - {bubbleType: 'comment', isOpen: true, type: eventUtils.BUBBLE_OPEN}, + {bubbleType: 'comment', isOpen: true, type: EventType.BUBBLE_OPEN}, this.workspace.id, this.block.id, ); @@ -70,7 +70,7 @@ suite('Comments', function () { assertEventFired( this.eventsFireStub, Blockly.Events.BubbleOpen, - {bubbleType: 'comment', isOpen: true, type: eventUtils.BUBBLE_OPEN}, + {bubbleType: 'comment', isOpen: true, type: EventType.BUBBLE_OPEN}, this.workspace.id, this.block.id, ); @@ -86,7 +86,7 @@ suite('Comments', function () { assertEventFired( this.eventsFireStub, Blockly.Events.BubbleOpen, - {bubbleType: 'comment', isOpen: true, type: eventUtils.BUBBLE_OPEN}, + {bubbleType: 'comment', isOpen: true, type: EventType.BUBBLE_OPEN}, this.workspace.id, this.block.id, ); @@ -104,7 +104,7 @@ suite('Comments', function () { assertEventFired( this.eventsFireStub, Blockly.Events.BubbleOpen, - {bubbleType: 'comment', isOpen: true, type: eventUtils.BUBBLE_OPEN}, + {bubbleType: 'comment', isOpen: true, type: EventType.BUBBLE_OPEN}, this.workspace.id, this.block.id, ); diff --git a/tests/mocha/connection_checker_test.js b/tests/mocha/connection_checker_test.js index 20f85623a..f7aa33ba8 100644 --- a/tests/mocha/connection_checker_test.js +++ b/tests/mocha/connection_checker_test.js @@ -4,8 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import {ConnectionType} from '../../build/src/core/connection_type.js'; +import {assert} from '../../node_modules/chai/chai.js'; import { sharedTestSetup, sharedTestTeardown, diff --git a/tests/mocha/connection_db_test.js b/tests/mocha/connection_db_test.js index 11eeecf31..e7f397d54 100644 --- a/tests/mocha/connection_db_test.js +++ b/tests/mocha/connection_db_test.js @@ -4,8 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import {ConnectionType} from '../../build/src/core/connection_type.js'; +import {assert} from '../../node_modules/chai/chai.js'; import { sharedTestSetup, sharedTestTeardown, diff --git a/tests/mocha/connection_test.js b/tests/mocha/connection_test.js index 040f59f40..cefea1784 100644 --- a/tests/mocha/connection_test.js +++ b/tests/mocha/connection_test.js @@ -5,17 +5,17 @@ */ import {assert} from '../../node_modules/chai/chai.js'; +import { + defineRowBlock, + defineStackBlock, + defineStatementBlock, +} from './test_helpers/block_definitions.js'; import { createGenUidStubWithReturns, sharedTestSetup, sharedTestTeardown, workspaceTeardown, } from './test_helpers/setup_teardown.js'; -import { - defineRowBlock, - defineStatementBlock, - defineStackBlock, -} from './test_helpers/block_definitions.js'; suite('Connection', function () { setup(function () { diff --git a/tests/mocha/contextmenu_test.js b/tests/mocha/contextmenu_test.js index b730b250d..fe6d4be99 100644 --- a/tests/mocha/contextmenu_test.js +++ b/tests/mocha/contextmenu_test.js @@ -4,16 +4,15 @@ * SPDX-License-Identifier: Apache-2.0 */ +import {callbackFactory} from '../../build/src/core/contextmenu.js'; +import * as xmlUtils from '../../build/src/core/utils/xml.js'; +import * as Variables from '../../build/src/core/variables.js'; import {assert} from '../../node_modules/chai/chai.js'; import { sharedTestSetup, sharedTestTeardown, } from './test_helpers/setup_teardown.js'; -import {callbackFactory} from '../../build/src/core/contextmenu.js'; -import * as xmlUtils from '../../build/src/core/utils/xml.js'; -import * as Variables from '../../build/src/core/variables.js'; - suite('Context Menu', function () { setup(function () { sharedTestSetup.call(this); diff --git a/tests/mocha/cursor_test.js b/tests/mocha/cursor_test.js index fcb763304..bb5026d7a 100644 --- a/tests/mocha/cursor_test.js +++ b/tests/mocha/cursor_test.js @@ -4,12 +4,12 @@ * SPDX-License-Identifier: Apache-2.0 */ +import {ASTNode} from '../../build/src/core/keyboard_nav/ast_node.js'; import {assert} from '../../node_modules/chai/chai.js'; import { sharedTestSetup, sharedTestTeardown, } from './test_helpers/setup_teardown.js'; -import {ASTNode} from '../../build/src/core/keyboard_nav/ast_node.js'; suite('Cursor', function () { setup(function () { diff --git a/tests/mocha/event_block_change_test.js b/tests/mocha/event_block_change_test.js index a4de1eddb..7de0a23b6 100644 --- a/tests/mocha/event_block_change_test.js +++ b/tests/mocha/event_block_change_test.js @@ -5,11 +5,11 @@ */ import {assert} from '../../node_modules/chai/chai.js'; +import {defineMutatorBlocks} from './test_helpers/block_definitions.js'; import { sharedTestSetup, sharedTestTeardown, } from './test_helpers/setup_teardown.js'; -import {defineMutatorBlocks} from './test_helpers/block_definitions.js'; suite('Block Change Event', function () { setup(function () { diff --git a/tests/mocha/event_block_create_test.js b/tests/mocha/event_block_create_test.js index 4ca6fb22a..f59f9435e 100644 --- a/tests/mocha/event_block_create_test.js +++ b/tests/mocha/event_block_create_test.js @@ -4,14 +4,14 @@ * SPDX-License-Identifier: Apache-2.0 */ +import {EventType} from '../../build/src/core/events/type.js'; import {assert} from '../../node_modules/chai/chai.js'; +import {defineRowBlock} from './test_helpers/block_definitions.js'; import {assertEventFired} from './test_helpers/events.js'; -import * as eventUtils from '../../build/src/core/events/utils.js'; import { sharedTestSetup, sharedTestTeardown, } from './test_helpers/setup_teardown.js'; -import {defineRowBlock} from './test_helpers/block_definitions.js'; suite('Block Create Event', function () { setup(function () { @@ -48,7 +48,7 @@ suite('Block Create Event', function () { assertEventFired( this.eventsFireStub, Blockly.Events.BlockCreate, - {'recordUndo': false, 'type': eventUtils.BLOCK_CREATE}, + {'recordUndo': false, 'type': EventType.BLOCK_CREATE}, this.workspace.id, 'shadowId', ); diff --git a/tests/mocha/event_test.js b/tests/mocha/event_test.js index 0a4e96d2b..75b52bede 100644 --- a/tests/mocha/event_test.js +++ b/tests/mocha/event_test.js @@ -4,22 +4,22 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import * as Blockly from '../../build/src/core/blockly.js'; +import * as eventUtils from '../../build/src/core/events/utils.js'; import {ASTNode} from '../../build/src/core/keyboard_nav/ast_node.js'; +import {assert} from '../../node_modules/chai/chai.js'; import { assertEventEquals, assertNthCallEventArgEquals, createChangeListenerSpy, } from './test_helpers/events.js'; -import {assertVariableValues} from './test_helpers/variables.js'; import { createGenUidStubWithReturns, sharedTestSetup, sharedTestTeardown, workspaceTeardown, } from './test_helpers/setup_teardown.js'; -import * as eventUtils from '../../build/src/core/events/utils.js'; +import {assertVariableValues} from './test_helpers/variables.js'; suite('Events', function () { setup(function () { diff --git a/tests/mocha/field_checkbox_test.js b/tests/mocha/field_checkbox_test.js index 1db3c9a4b..08190fed8 100644 --- a/tests/mocha/field_checkbox_test.js +++ b/tests/mocha/field_checkbox_test.js @@ -4,8 +4,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import * as Blockly from '../../build/src/core/blockly.js'; +import {assert} from '../../node_modules/chai/chai.js'; +import {defineRowBlock} from './test_helpers/block_definitions.js'; import { assertFieldValue, runConstructorSuiteTests, @@ -17,7 +18,6 @@ import { sharedTestTeardown, workspaceTeardown, } from './test_helpers/setup_teardown.js'; -import {defineRowBlock} from './test_helpers/block_definitions.js'; suite('Checkbox Fields', function () { setup(function () { diff --git a/tests/mocha/field_colour_test.js b/tests/mocha/field_colour_test.js index ed30be552..262f978f2 100644 --- a/tests/mocha/field_colour_test.js +++ b/tests/mocha/field_colour_test.js @@ -4,18 +4,18 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import * as Blockly from '../../build/src/core/blockly.js'; +import {assert} from '../../node_modules/chai/chai.js'; +import { + createTestBlock, + defineRowBlock, +} from './test_helpers/block_definitions.js'; import { assertFieldValue, runConstructorSuiteTests, runFromJsonSuiteTests, runSetValueTests, } from './test_helpers/fields.js'; -import { - createTestBlock, - defineRowBlock, -} from './test_helpers/block_definitions.js'; import { sharedTestSetup, sharedTestTeardown, diff --git a/tests/mocha/field_dropdown_test.js b/tests/mocha/field_dropdown_test.js index c0261bc65..61deaf47f 100644 --- a/tests/mocha/field_dropdown_test.js +++ b/tests/mocha/field_dropdown_test.js @@ -4,18 +4,18 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import * as Blockly from '../../build/src/core/blockly.js'; +import {assert} from '../../node_modules/chai/chai.js'; +import { + createTestBlock, + defineRowBlock, +} from './test_helpers/block_definitions.js'; import { assertFieldValue, runConstructorSuiteTests, runFromJsonSuiteTests, runSetValueTests, } from './test_helpers/fields.js'; -import { - createTestBlock, - defineRowBlock, -} from './test_helpers/block_definitions.js'; import { sharedTestSetup, sharedTestTeardown, diff --git a/tests/mocha/field_image_test.js b/tests/mocha/field_image_test.js index ed1ec5596..89dd5fcc9 100644 --- a/tests/mocha/field_image_test.js +++ b/tests/mocha/field_image_test.js @@ -4,8 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import * as Blockly from '../../build/src/core/blockly.js'; +import {assert} from '../../node_modules/chai/chai.js'; import { assertFieldValue, runConstructorSuiteTests, diff --git a/tests/mocha/field_label_serializable_test.js b/tests/mocha/field_label_serializable_test.js index f6502db08..a83171341 100644 --- a/tests/mocha/field_label_serializable_test.js +++ b/tests/mocha/field_label_serializable_test.js @@ -4,8 +4,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import * as Blockly from '../../build/src/core/blockly.js'; +import {assert} from '../../node_modules/chai/chai.js'; +import { + createTestBlock, + defineRowBlock, +} from './test_helpers/block_definitions.js'; import { assertFieldValue, runConstructorSuiteTests, @@ -17,10 +21,6 @@ import { sharedTestTeardown, workspaceTeardown, } from './test_helpers/setup_teardown.js'; -import { - createTestBlock, - defineRowBlock, -} from './test_helpers/block_definitions.js'; suite('Label Serializable Fields', function () { setup(function () { diff --git a/tests/mocha/field_label_test.js b/tests/mocha/field_label_test.js index 43883ebf8..cf5b49044 100644 --- a/tests/mocha/field_label_test.js +++ b/tests/mocha/field_label_test.js @@ -4,8 +4,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import * as Blockly from '../../build/src/core/blockly.js'; +import {assert} from '../../node_modules/chai/chai.js'; +import {createTestBlock} from './test_helpers/block_definitions.js'; import { assertFieldValue, runConstructorSuiteTests, @@ -16,7 +17,6 @@ import { sharedTestSetup, sharedTestTeardown, } from './test_helpers/setup_teardown.js'; -import {createTestBlock} from './test_helpers/block_definitions.js'; suite('Label Fields', function () { setup(function () { diff --git a/tests/mocha/field_number_test.js b/tests/mocha/field_number_test.js index fb6712046..3e0d8ca38 100644 --- a/tests/mocha/field_number_test.js +++ b/tests/mocha/field_number_test.js @@ -4,21 +4,21 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import * as Blockly from '../../build/src/core/blockly.js'; +import {assert} from '../../node_modules/chai/chai.js'; +import {defineRowBlock} from './test_helpers/block_definitions.js'; +import {runTestCases} from './test_helpers/common.js'; import { assertFieldValue, runConstructorSuiteTests, runFromJsonSuiteTests, runSetValueTests, } from './test_helpers/fields.js'; -import {defineRowBlock} from './test_helpers/block_definitions.js'; import { sharedTestSetup, sharedTestTeardown, workspaceTeardown, } from './test_helpers/setup_teardown.js'; -import {runTestCases} from './test_helpers/common.js'; suite('Number Fields', function () { setup(function () { diff --git a/tests/mocha/field_registry_test.js b/tests/mocha/field_registry_test.js index c6ec26967..26b33c16c 100644 --- a/tests/mocha/field_registry_test.js +++ b/tests/mocha/field_registry_test.js @@ -4,9 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import * as Blockly from '../../build/src/core/blockly.js'; -import {createDeprecationWarningStub} from './test_helpers/warnings.js'; +import {assert} from '../../node_modules/chai/chai.js'; import { sharedTestSetup, sharedTestTeardown, diff --git a/tests/mocha/field_test.js b/tests/mocha/field_test.js index dfc798033..70970b9bf 100644 --- a/tests/mocha/field_test.js +++ b/tests/mocha/field_test.js @@ -4,8 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import * as Blockly from '../../build/src/core/blockly.js'; +import {assert} from '../../node_modules/chai/chai.js'; import { addBlockTypeToCleanup, addMessageToCleanup, @@ -13,7 +13,6 @@ import { sharedTestTeardown, workspaceTeardown, } from './test_helpers/setup_teardown.js'; -import {createDeprecationWarningStub} from './test_helpers/warnings.js'; suite('Abstract Fields', function () { setup(function () { diff --git a/tests/mocha/field_textinput_test.js b/tests/mocha/field_textinput_test.js index 7b0da1b4c..3b755a543 100644 --- a/tests/mocha/field_textinput_test.js +++ b/tests/mocha/field_textinput_test.js @@ -4,18 +4,18 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import * as Blockly from '../../build/src/core/blockly.js'; +import {assert} from '../../node_modules/chai/chai.js'; +import { + createTestBlock, + defineRowBlock, +} from './test_helpers/block_definitions.js'; import { assertFieldValue, runConstructorSuiteTests, runFromJsonSuiteTests, runSetValueTests, } from './test_helpers/fields.js'; -import { - createTestBlock, - defineRowBlock, -} from './test_helpers/block_definitions.js'; import { sharedTestSetup, sharedTestTeardown, diff --git a/tests/mocha/field_variable_test.js b/tests/mocha/field_variable_test.js index 63dd644c3..78dad10ba 100644 --- a/tests/mocha/field_variable_test.js +++ b/tests/mocha/field_variable_test.js @@ -4,8 +4,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import * as Blockly from '../../build/src/core/blockly.js'; +import {assert} from '../../node_modules/chai/chai.js'; +import { + createTestBlock, + defineRowBlock, +} from './test_helpers/block_definitions.js'; import { assertFieldValue, runConstructorSuiteTests, @@ -18,10 +22,6 @@ import { sharedTestTeardown, workspaceTeardown, } from './test_helpers/setup_teardown.js'; -import { - createTestBlock, - defineRowBlock, -} from './test_helpers/block_definitions.js'; suite('Variable Fields', function () { const FAKE_VARIABLE_NAME = 'default_name'; diff --git a/tests/mocha/flyout_test.js b/tests/mocha/flyout_test.js index 522efbdc6..9be45458c 100644 --- a/tests/mocha/flyout_test.js +++ b/tests/mocha/flyout_test.js @@ -10,16 +10,8 @@ import { sharedTestTeardown, workspaceTeardown, } from './test_helpers/setup_teardown.js'; -import {defineStackBlock} from './test_helpers/block_definitions.js'; import { - getBasicToolbox, - getChildItem, - getCollapsibleItem, - getDeeplyNestedJSON, - getInjectedToolbox, - getNonCollapsibleItem, getProperSimpleJson, - getSeparator, getSimpleJson, getXmlArray, } from './test_helpers/toolbox_definitions.js'; diff --git a/tests/mocha/generator_test.js b/tests/mocha/generator_test.js index efaa924de..527448eac 100644 --- a/tests/mocha/generator_test.js +++ b/tests/mocha/generator_test.js @@ -4,13 +4,13 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import * as Blockly from '../../build/src/core/blockly.js'; import {DartGenerator} from '../../build/src/generators/dart/dart_generator.js'; import {JavascriptGenerator} from '../../build/src/generators/javascript/javascript_generator.js'; import {LuaGenerator} from '../../build/src/generators/lua/lua_generator.js'; import {PhpGenerator} from '../../build/src/generators/php/php_generator.js'; import {PythonGenerator} from '../../build/src/generators/python/python_generator.js'; +import {assert} from '../../node_modules/chai/chai.js'; import { sharedTestSetup, sharedTestTeardown, diff --git a/tests/mocha/gesture_test.js b/tests/mocha/gesture_test.js index 122e96b8b..3f53b8894 100644 --- a/tests/mocha/gesture_test.js +++ b/tests/mocha/gesture_test.js @@ -4,15 +4,15 @@ * SPDX-License-Identifier: Apache-2.0 */ +import {EventType} from '../../build/src/core/events/type.js'; import {assert} from '../../node_modules/chai/chai.js'; -import {assertEventFired, assertEventNotFired} from './test_helpers/events.js'; import {defineBasicBlockWithField} from './test_helpers/block_definitions.js'; -import {dispatchPointerEvent} from './test_helpers/user_input.js'; -import * as eventUtils from '../../build/src/core/events/utils.js'; +import {assertEventFired, assertEventNotFired} from './test_helpers/events.js'; import { sharedTestSetup, sharedTestTeardown, } from './test_helpers/setup_teardown.js'; +import {dispatchPointerEvent} from './test_helpers/user_input.js'; suite('Gesture', function () { function testGestureIsFieldClick(block, isFieldClick, eventsFireStub) { @@ -39,11 +39,11 @@ suite('Gesture', function () { assertEventFired( eventsFireStub, Blockly.Events.Selected, - {newElementId: block.id, type: eventUtils.SELECTED}, + {newElementId: block.id, type: EventType.SELECTED}, fieldWorkspace.id, ); assertEventNotFired(eventsFireStub, Blockly.Events.Click, { - type: eventUtils.CLICK, + type: EventType.CLICK, }); } diff --git a/tests/mocha/icon_test.js b/tests/mocha/icon_test.js index dd5668b24..5855fcfc5 100644 --- a/tests/mocha/icon_test.js +++ b/tests/mocha/icon_test.js @@ -5,12 +5,12 @@ */ import {assert} from '../../node_modules/chai/chai.js'; +import {defineEmptyBlock} from './test_helpers/block_definitions.js'; +import {MockIcon, MockSerializableIcon} from './test_helpers/icon_mocks.js'; import { sharedTestSetup, sharedTestTeardown, } from './test_helpers/setup_teardown.js'; -import {defineEmptyBlock} from './test_helpers/block_definitions.js'; -import {MockIcon, MockSerializableIcon} from './test_helpers/icon_mocks.js'; suite('Icon', function () { setup(function () { diff --git a/tests/mocha/insertion_marker_manager_test.js b/tests/mocha/insertion_marker_manager_test.js index e6992109f..3fae888df 100644 --- a/tests/mocha/insertion_marker_manager_test.js +++ b/tests/mocha/insertion_marker_manager_test.js @@ -5,15 +5,15 @@ */ import {assert} from '../../node_modules/chai/chai.js'; -import { - sharedTestSetup, - sharedTestTeardown, -} from './test_helpers/setup_teardown.js'; import { defineRowBlock, defineRowToStackBlock, defineStackBlock, } from './test_helpers/block_definitions.js'; +import { + sharedTestSetup, + sharedTestTeardown, +} from './test_helpers/setup_teardown.js'; suite('Insertion marker manager', function () { setup(function () { diff --git a/tests/mocha/jso_deserialization_test.js b/tests/mocha/jso_deserialization_test.js index 7bd902a23..dfd3e62b7 100644 --- a/tests/mocha/jso_deserialization_test.js +++ b/tests/mocha/jso_deserialization_test.js @@ -4,18 +4,17 @@ * SPDX-License-Identifier: Apache-2.0 */ +import {EventType} from '../../build/src/core/events/type.js'; import {assert} from '../../node_modules/chai/chai.js'; -import { - sharedTestSetup, - sharedTestTeardown, - workspaceTeardown, -} from './test_helpers/setup_teardown.js'; import {assertEventFired} from './test_helpers/events.js'; -import * as eventUtils from '../../build/src/core/events/utils.js'; import { MockParameterModel, MockProcedureModel, } from './test_helpers/procedures.js'; +import { + sharedTestSetup, + sharedTestTeardown, +} from './test_helpers/setup_teardown.js'; suite('JSO Deserialization', function () { setup(function () { @@ -67,7 +66,7 @@ suite('JSO Deserialization', function () { assertEventFired( this.eventsFireStub, Blockly.Events.FinishedLoading, - {type: eventUtils.FINISHED_LOADING}, + {type: EventType.FINISHED_LOADING}, this.workspace.id, ); }); @@ -90,7 +89,7 @@ suite('JSO Deserialization', function () { assertEventFired( this.eventsFireStub, Blockly.Events.FinishedLoading, - {'group': 'my group', 'type': eventUtils.FINISHED_LOADING}, + {'group': 'my group', 'type': EventType.FINISHED_LOADING}, this.workspace.id, ); }); @@ -145,7 +144,7 @@ suite('JSO Deserialization', function () { 'varId': 'testId', 'varType': '', 'recordUndo': false, - 'type': eventUtils.VAR_CREATE, + 'type': EventType.VAR_CREATE, }, this.workspace.id, ); @@ -171,7 +170,7 @@ suite('JSO Deserialization', function () { 'varId': 'testId', 'varType': '', 'recordUndo': true, - 'type': eventUtils.VAR_CREATE, + 'type': EventType.VAR_CREATE, }, this.workspace.id, ); @@ -196,7 +195,7 @@ suite('JSO Deserialization', function () { 'varId': 'testId', 'varType': '', 'group': 'my group', - 'type': eventUtils.VAR_CREATE, + 'type': EventType.VAR_CREATE, }, this.workspace.id, ); @@ -261,7 +260,7 @@ suite('JSO Deserialization', function () { 'varName': 'test', 'varId': 'testId', 'varType': '', - 'type': eventUtils.VAR_CREATE, + 'type': EventType.VAR_CREATE, }, this.workspace.id, ); @@ -287,7 +286,7 @@ suite('JSO Deserialization', function () { assertEventFired( this.eventsFireStub, Blockly.Events.BlockCreate, - {'recordUndo': false, 'type': eventUtils.BLOCK_CREATE}, + {'recordUndo': false, 'type': EventType.BLOCK_CREATE}, this.workspace.id, 'testId', ); @@ -312,7 +311,7 @@ suite('JSO Deserialization', function () { assertEventFired( this.eventsFireStub, Blockly.Events.BlockCreate, - {'recordUndo': true, 'type': eventUtils.BLOCK_CREATE}, + {'recordUndo': true, 'type': EventType.BLOCK_CREATE}, this.workspace.id, 'testId', ); @@ -336,7 +335,7 @@ suite('JSO Deserialization', function () { assertEventFired( this.eventsFireStub, Blockly.Events.BlockCreate, - {'group': 'my group', 'type': eventUtils.BLOCK_CREATE}, + {'group': 'my group', 'type': EventType.BLOCK_CREATE}, this.workspace.id, 'testId', ); @@ -398,7 +397,7 @@ suite('JSO Deserialization', function () { assertEventFired( this.eventsFireStub, Blockly.Events.BlockCreate, - {type: eventUtils.BLOCK_CREATE}, + {type: EventType.BLOCK_CREATE}, this.workspace.id, 'id1', ); @@ -436,7 +435,7 @@ suite('JSO Deserialization', function () { assertEventFired( this.eventsFireStub, Blockly.Events.BlockCreate, - {'recordUndo': true, 'type': eventUtils.BLOCK_CREATE}, + {'recordUndo': true, 'type': EventType.BLOCK_CREATE}, this.workspace.id, 'testId', ); @@ -454,7 +453,7 @@ suite('JSO Deserialization', function () { assertEventFired( this.eventsFireStub, Blockly.Events.BlockCreate, - {'group': 'my group', 'type': eventUtils.BLOCK_CREATE}, + {'group': 'my group', 'type': EventType.BLOCK_CREATE}, this.workspace.id, 'testId', ); diff --git a/tests/mocha/jso_serialization_test.js b/tests/mocha/jso_serialization_test.js index 8494dc3bc..7e68edb98 100644 --- a/tests/mocha/jso_serialization_test.js +++ b/tests/mocha/jso_serialization_test.js @@ -4,14 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import * as Blockly from '../../build/src/core/blockly.js'; -import { - createGenUidStubWithReturns, - sharedTestSetup, - sharedTestTeardown, - workspaceTeardown, -} from './test_helpers/setup_teardown.js'; +import {assert} from '../../node_modules/chai/chai.js'; import { defineRowBlock, defineStackBlock, @@ -21,6 +15,12 @@ import { MockParameterModel, MockProcedureModel, } from './test_helpers/procedures.js'; +import { + createGenUidStubWithReturns, + sharedTestSetup, + sharedTestTeardown, + workspaceTeardown, +} from './test_helpers/setup_teardown.js'; suite('JSO Serialization', function () { setup(function () { diff --git a/tests/mocha/keydown_test.js b/tests/mocha/keydown_test.js index 077aff55e..da8129b48 100644 --- a/tests/mocha/keydown_test.js +++ b/tests/mocha/keydown_test.js @@ -5,12 +5,12 @@ */ import * as Blockly from '../../build/src/core/blockly.js'; -import {createKeyDownEvent} from './test_helpers/user_input.js'; import {defineStackBlock} from './test_helpers/block_definitions.js'; import { sharedTestSetup, sharedTestTeardown, } from './test_helpers/setup_teardown.js'; +import {createKeyDownEvent} from './test_helpers/user_input.js'; suite('Key Down', function () { setup(function () { diff --git a/tests/mocha/mutator_test.js b/tests/mocha/mutator_test.js index 7fa47fd82..fb6d8caf0 100644 --- a/tests/mocha/mutator_test.js +++ b/tests/mocha/mutator_test.js @@ -5,15 +5,15 @@ */ import {assert} from '../../node_modules/chai/chai.js'; -import { - sharedTestSetup, - sharedTestTeardown, -} from './test_helpers/setup_teardown.js'; import { createRenderedBlock, defineMutatorBlocks, } from './test_helpers/block_definitions.js'; import {assertEventFired, assertEventNotFired} from './test_helpers/events.js'; +import { + sharedTestSetup, + sharedTestTeardown, +} from './test_helpers/setup_teardown.js'; suite('Mutator', function () { setup(function () { diff --git a/tests/mocha/procedure_map_test.js b/tests/mocha/procedure_map_test.js index 69166fdb7..eebd5a9f3 100644 --- a/tests/mocha/procedure_map_test.js +++ b/tests/mocha/procedure_map_test.js @@ -5,16 +5,11 @@ */ import {assert} from '../../node_modules/chai/chai.js'; +import {MockProcedureModel} from './test_helpers/procedures.js'; import { sharedTestSetup, sharedTestTeardown, } from './test_helpers/setup_teardown.js'; -import { - assertEventFiredShallow, - assertEventNotFired, - createChangeListenerSpy, -} from './test_helpers/events.js'; -import {MockProcedureModel} from './test_helpers/procedures.js'; suite('Procedure Map', function () { setup(function () { diff --git a/tests/mocha/registry_test.js b/tests/mocha/registry_test.js index c1bbf442a..6bcb8b5b0 100644 --- a/tests/mocha/registry_test.js +++ b/tests/mocha/registry_test.js @@ -5,11 +5,11 @@ */ import {assert} from '../../node_modules/chai/chai.js'; -import {assertWarnings} from './test_helpers/warnings.js'; import { sharedTestSetup, sharedTestTeardown, } from './test_helpers/setup_teardown.js'; +import {assertWarnings} from './test_helpers/warnings.js'; suite('Registry', function () { const TestClass = function () {}; diff --git a/tests/mocha/serializer_test.js b/tests/mocha/serializer_test.js index 557608311..0cc073e7b 100644 --- a/tests/mocha/serializer_test.js +++ b/tests/mocha/serializer_test.js @@ -4,8 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../node_modules/chai/chai.js'; import * as Blockly from '../../build/src/core/blockly.js'; +import {assert} from '../../node_modules/chai/chai.js'; import { TestCase, TestSuite, diff --git a/tests/mocha/shortcut_registry_test.js b/tests/mocha/shortcut_registry_test.js index 4c64f1e69..cfd98a302 100644 --- a/tests/mocha/shortcut_registry_test.js +++ b/tests/mocha/shortcut_registry_test.js @@ -5,11 +5,11 @@ */ import {assert} from '../../node_modules/chai/chai.js'; -import {createKeyDownEvent} from './test_helpers/user_input.js'; import { sharedTestSetup, sharedTestTeardown, } from './test_helpers/setup_teardown.js'; +import {createKeyDownEvent} from './test_helpers/user_input.js'; suite('Keyboard Shortcut Registry Test', function () { setup(function () { diff --git a/tests/mocha/test_helpers/procedures.js b/tests/mocha/test_helpers/procedures.js index 82075ff27..ecf8c13ad 100644 --- a/tests/mocha/test_helpers/procedures.js +++ b/tests/mocha/test_helpers/procedures.js @@ -4,9 +4,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assert} from '../../../node_modules/chai/chai.js'; import {ConnectionType} from '../../../build/src/core/connection_type.js'; import {VariableModel} from '../../../build/src/core/variable_model.js'; +import {assert} from '../../../node_modules/chai/chai.js'; /** * Asserts that the procedure definition or call block has the expected var diff --git a/tests/mocha/test_helpers/workspace.js b/tests/mocha/test_helpers/workspace.js index e312e1188..40b2574fc 100644 --- a/tests/mocha/test_helpers/workspace.js +++ b/tests/mocha/test_helpers/workspace.js @@ -4,11 +4,11 @@ * SPDX-License-Identifier: Apache-2.0 */ +import * as eventUtils from '../../../build/src/core/events/utils.js'; import {assert} from '../../../node_modules/chai/chai.js'; +import {workspaceTeardown} from './setup_teardown.js'; import {assertVariableValues} from './variables.js'; import {assertWarnings} from './warnings.js'; -import * as eventUtils from '../../../build/src/core/events/utils.js'; -import {workspaceTeardown} from './setup_teardown.js'; export function testAWorkspace() { setup(function () { diff --git a/tests/mocha/theme_test.js b/tests/mocha/theme_test.js index 57aec45a2..1f425dca6 100644 --- a/tests/mocha/theme_test.js +++ b/tests/mocha/theme_test.js @@ -4,9 +4,9 @@ * SPDX-License-Identifier: Apache-2.0 */ +import {EventType} from '../../build/src/core/events/type.js'; import {assert} from '../../node_modules/chai/chai.js'; import {assertEventFired} from './test_helpers/events.js'; -import * as eventUtils from '../../build/src/core/events/utils.js'; import { sharedTestSetup, sharedTestTeardown, @@ -153,7 +153,7 @@ suite('Theme', function () { assertEventFired( this.eventsFireStub, Blockly.Events.ThemeChange, - {themeName: 'themeName', type: eventUtils.THEME_CHANGE}, + {themeName: 'themeName', type: EventType.THEME_CHANGE}, workspace.id, ); } finally { diff --git a/tests/mocha/trashcan_test.js b/tests/mocha/trashcan_test.js index 798f604ff..5486326f1 100644 --- a/tests/mocha/trashcan_test.js +++ b/tests/mocha/trashcan_test.js @@ -4,12 +4,9 @@ * SPDX-License-Identifier: Apache-2.0 */ +import {EventType} from '../../build/src/core/events/type.js'; +import * as eventUtils from '../../build/src/core/events/utils.js'; import {assert} from '../../node_modules/chai/chai.js'; -import {assertEventFired, assertEventNotFired} from './test_helpers/events.js'; -import { - sharedTestSetup, - sharedTestTeardown, -} from './test_helpers/setup_teardown.js'; import { defineBasicBlockWithField, defineMutatorBlocks, @@ -17,7 +14,11 @@ import { defineStackBlock, defineStatementBlock, } from './test_helpers/block_definitions.js'; -import * as eventUtils from '../../build/src/core/events/utils.js'; +import {assertEventFired, assertEventNotFired} from './test_helpers/events.js'; +import { + sharedTestSetup, + sharedTestTeardown, +} from './test_helpers/setup_teardown.js'; import {simulateClick} from './test_helpers/user_input.js'; suite('Trashcan', function () { @@ -91,12 +92,12 @@ suite('Trashcan', function () { simulateClick(this.trashcan.svgGroup); assertEventNotFired(this.eventsFireStub, Blockly.Events.TrashcanOpen, { - type: eventUtils.CLICK, + type: EventType.CLICK, }); assertEventFired( this.eventsFireStub, Blockly.Events.Click, - {targetType: 'workspace', type: eventUtils.CLICK}, + {targetType: 'workspace', type: EventType.CLICK}, this.workspace.id, undefined, ); @@ -114,11 +115,11 @@ suite('Trashcan', function () { assertEventFired( this.eventsFireStub, Blockly.Events.TrashcanOpen, - {isOpen: true, type: eventUtils.TRASHCAN_OPEN}, + {isOpen: true, type: EventType.TRASHCAN_OPEN}, this.workspace.id, ); assertEventNotFired(this.eventsFireStub, Blockly.Events.Click, { - type: eventUtils.TRASHCAN_OPEN, + type: EventType.TRASHCAN_OPEN, }); }); test('Click outside trashcan - fires trashcanClose', function () { @@ -133,13 +134,13 @@ suite('Trashcan', function () { assertEventFired( this.eventsFireStub, Blockly.Events.TrashcanOpen, - {isOpen: false, type: eventUtils.TRASHCAN_OPEN}, + {isOpen: false, type: EventType.TRASHCAN_OPEN}, this.workspace.id, ); assertEventFired( this.eventsFireStub, Blockly.Events.Click, - {targetType: 'workspace', type: eventUtils.CLICK}, + {targetType: 'workspace', type: EventType.CLICK}, this.workspace.id, undefined, ); diff --git a/tests/mocha/variable_map_test.js b/tests/mocha/variable_map_test.js index c3d75e8a5..51f710c99 100644 --- a/tests/mocha/variable_map_test.js +++ b/tests/mocha/variable_map_test.js @@ -5,17 +5,17 @@ */ import {assert} from '../../node_modules/chai/chai.js'; -import {assertVariableValues} from './test_helpers/variables.js'; -import { - createGenUidStubWithReturns, - sharedTestSetup, - sharedTestTeardown, -} from './test_helpers/setup_teardown.js'; import { assertEventFired, assertEventNotFired, createChangeListenerSpy, } from './test_helpers/events.js'; +import { + createGenUidStubWithReturns, + sharedTestSetup, + sharedTestTeardown, +} from './test_helpers/setup_teardown.js'; +import {assertVariableValues} from './test_helpers/variables.js'; suite('Variable Map', function () { setup(function () { diff --git a/tests/mocha/workspace_comment_test.js b/tests/mocha/workspace_comment_test.js index ece1819e4..6e3fa9607 100644 --- a/tests/mocha/workspace_comment_test.js +++ b/tests/mocha/workspace_comment_test.js @@ -4,14 +4,14 @@ * SPDX-License-Identifier: Apache-2.0 */ +import { + assertEventFired, + createChangeListenerSpy, +} from './test_helpers/events.js'; import { sharedTestSetup, sharedTestTeardown, } from './test_helpers/setup_teardown.js'; -import { - createChangeListenerSpy, - assertEventFired, -} from './test_helpers/events.js'; suite('Workspace comment', function () { setup(function () { diff --git a/tests/mocha/workspace_svg_test.js b/tests/mocha/workspace_svg_test.js index b76cd3516..9218ad22b 100644 --- a/tests/mocha/workspace_svg_test.js +++ b/tests/mocha/workspace_svg_test.js @@ -4,15 +4,14 @@ * SPDX-License-Identifier: Apache-2.0 */ +import {EventType} from '../../build/src/core/events/type.js'; import {assert} from '../../node_modules/chai/chai.js'; +import {defineStackBlock} from './test_helpers/block_definitions.js'; import { assertEventFired, assertEventNotFired, createChangeListenerSpy, } from './test_helpers/events.js'; -import {assertVariableValues} from './test_helpers/variables.js'; -import {defineStackBlock} from './test_helpers/block_definitions.js'; -import * as eventUtils from '../../build/src/core/events/utils.js'; import { sharedTestSetup, sharedTestTeardown, @@ -188,7 +187,7 @@ suite('WorkspaceSvg', function () { oldScale: 1, viewTop: metrics.viewTop, viewLeft: metrics.viewLeft, - type: eventUtils.VIEWPORT_CHANGE, + type: EventType.VIEWPORT_CHANGE, }; assertSpyFiredViewportEvent( changeListenerSpy, @@ -351,7 +350,7 @@ suite('WorkspaceSvg', function () { assertEventNotFired( this.changeListenerSpy, Blockly.Events.ViewportChange, - {type: eventUtils.VIEWPORT_CHANGE}, + {type: EventType.VIEWPORT_CHANGE}, ); }); test("domToWorkspace at 0,0 that doesn't trigger scroll", function () { @@ -378,7 +377,7 @@ suite('WorkspaceSvg', function () { assertEventNotFired( this.changeListenerSpy, Blockly.Events.ViewportChange, - {type: eventUtils.VIEWPORT_CHANGE}, + {type: EventType.VIEWPORT_CHANGE}, ); }); test.skip('domToWorkspace multiple blocks triggers one viewport event', function () { diff --git a/tests/mocha/workspace_test.js b/tests/mocha/workspace_test.js index 58829a77a..a517d796c 100644 --- a/tests/mocha/workspace_test.js +++ b/tests/mocha/workspace_test.js @@ -4,11 +4,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {assertVariableValues} from './test_helpers/variables.js'; import { sharedTestSetup, sharedTestTeardown, - workspaceTeardown, } from './test_helpers/setup_teardown.js'; import {testAWorkspace} from './test_helpers/workspace.js'; diff --git a/tests/mocha/zoom_controls_test.js b/tests/mocha/zoom_controls_test.js index dce8acfe6..dedc36b75 100644 --- a/tests/mocha/zoom_controls_test.js +++ b/tests/mocha/zoom_controls_test.js @@ -4,9 +4,9 @@ * SPDX-License-Identifier: Apache-2.0 */ +import {EventType} from '../../build/src/core/events/type.js'; import {assert} from '../../node_modules/chai/chai.js'; import {assertEventFired, assertEventNotFired} from './test_helpers/events.js'; -import * as eventUtils from '../../build/src/core/events/utils.js'; import { sharedTestSetup, sharedTestTeardown, @@ -35,13 +35,13 @@ suite('Zoom Controls', function () { assertEventFired( this.eventsFireStub, Blockly.Events.Click, - {targetType: 'zoom_controls', type: eventUtils.CLICK}, + {targetType: 'zoom_controls', type: EventType.CLICK}, this.workspace.id, undefined, ); assertEventNotFired(this.eventsFireStub, Blockly.Events.Click, { targetType: 'workspace', - type: eventUtils.CLICK, + type: EventType.CLICK, }); assert.closeTo(this.workspace.getScale(), 1.2, 0.05); }); @@ -51,13 +51,13 @@ suite('Zoom Controls', function () { assertEventFired( this.eventsFireStub, Blockly.Events.Click, - {targetType: 'zoom_controls', type: eventUtils.CLICK}, + {targetType: 'zoom_controls', type: EventType.CLICK}, this.workspace.id, undefined, ); assertEventNotFired(this.eventsFireStub, Blockly.Events.Click, { targetType: 'workspace', - type: eventUtils.CLICK, + type: EventType.CLICK, }); assert.closeTo(this.workspace.getScale(), 0.8, 0.05); }); @@ -67,13 +67,13 @@ suite('Zoom Controls', function () { assertEventFired( this.eventsFireStub, Blockly.Events.Click, - {targetType: 'zoom_controls', type: eventUtils.CLICK}, + {targetType: 'zoom_controls', type: EventType.CLICK}, this.workspace.id, undefined, ); assertEventNotFired(this.eventsFireStub, Blockly.Events.Click, { targetType: 'workspace', - type: eventUtils.CLICK, + type: EventType.CLICK, }); assert.equal(this.workspace.getScale(), 1); }); diff --git a/tests/node/run_node_test.mjs b/tests/node/run_node_test.mjs index f7a01098f..ee95fd528 100644 --- a/tests/node/run_node_test.mjs +++ b/tests/node/run_node_test.mjs @@ -22,9 +22,9 @@ console.log(process.cwd()); // copied when packaged), resulting in require() looking for the // compressed bundles in the wrong place. -import {assert} from 'chai'; import * as Blockly from 'blockly-test'; import {javascriptGenerator} from 'blockly-test/javascript'; +import {assert} from 'chai'; const xmlText = '\n' + diff --git a/tests/typescript/src/generators.ts b/tests/typescript/src/generators.ts index fd79a3a00..d1358335d 100644 --- a/tests/typescript/src/generators.ts +++ b/tests/typescript/src/generators.ts @@ -4,12 +4,14 @@ * SPDX-License-Identifier: Apache-2.0 */ +/* eslint-disable */ + import * as Blockly from 'blockly-test/core'; -import {JavascriptGenerator} from 'blockly-test/javascript'; -import {PhpGenerator, phpGenerator, Order} from 'blockly-test/php'; -import {LuaGenerator} from 'blockly-test/lua'; -import {PythonGenerator} from 'blockly-test/python'; import {DartGenerator} from 'blockly-test/dart'; +import {JavascriptGenerator} from 'blockly-test/javascript'; +import {LuaGenerator} from 'blockly-test/lua'; +import {Order, PhpGenerator, phpGenerator} from 'blockly-test/php'; +import {PythonGenerator} from 'blockly-test/python'; JavascriptGenerator; PhpGenerator; diff --git a/tests/typescript/src/generators/php.ts b/tests/typescript/src/generators/php.ts index cb9241b43..5b66d3d71 100644 --- a/tests/typescript/src/generators/php.ts +++ b/tests/typescript/src/generators/php.ts @@ -10,7 +10,7 @@ import * as Blockly from 'blockly-test/core'; * Test: should be able to import a generator instance, class, and * Order enum. */ -import {phpGenerator, PhpGenerator, Order} from 'blockly-test/php'; +import {Order, phpGenerator, PhpGenerator} from 'blockly-test/php'; /** * Test: should be able to create a simple block generator function, diff --git a/tests/typescript/src/generators/python.ts b/tests/typescript/src/generators/python.ts index aa1c19c38..572e992e4 100644 --- a/tests/typescript/src/generators/python.ts +++ b/tests/typescript/src/generators/python.ts @@ -10,7 +10,7 @@ import * as Blockly from 'blockly-test/core'; * Test: should be able to import a generator instance, class, and * Order enum. */ -import {pythonGenerator, PythonGenerator, Order} from 'blockly-test/python'; +import {Order, pythonGenerator, PythonGenerator} from 'blockly-test/python'; /** * Test: should be able to create a simple block generator function,