Files
blockly/core/serialization/exceptions.ts
Maribeth Bottorff 037eb59b89 chore: Lint TsDoc. (#6353)
* chore: add linting for tsdoc

* chore: don't require types on return

* chore: remove redundant fileoverview from ts

* chore: change return to returns and add some newlines

* chore: remove license tag

* chore: don't require params/return docs

* chore: remove spurious struct tags

* Revert "chore: change return to returns and add some newlines"

This reverts commit d6d8656a45.

* chore: don't auto-add param names

* chore: disable require-param bc it breaks on this

* return to returns and add line breaks

* chore: configure additional jsdoc rules

* chore: run format

* Revert "chore: remove license tag"

This reverts commit 173455588a.

* chore: allow license tag format

* chore: only require jsdoc on exported items

* chore: add missing jsdoc or silence where needed

* chore: run format

* chore: lint fixes
2022-08-23 14:27:22 -07:00

100 lines
3.1 KiB
TypeScript

/**
* @license
* Copyright 2021 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* Contains custom errors thrown by the serialization system.
*
* @namespace Blockly.serialization.exceptions
*/
import * as goog from '../../closure/goog/goog.js';
goog.declareModuleId('Blockly.serialization.exceptions');
import type {Block} from '../block.js';
import type {State} from './blocks.js';
/** @alias Blockly.serialization.exceptions.DeserializationError */
export class DeserializationError extends Error {}
/**
* Represents an error where the serialized state is expected to provide a
* block type, but it is not provided.
*
* @alias Blockly.serialization.exceptions.MissingBlockType
*/
export class MissingBlockType extends DeserializationError {
/**
* @param state The state object which is missing the block type.
* @internal
*/
constructor(public state: State) {
super(`Expected to find a 'type' property, defining the block type`);
}
}
/**
* Represents an error where deserialization encountered a block that did
* not have a connection that was defined in the serialized state.
*
* @alias Blockly.serialization.exceptions.MissingConnection
*/
export class MissingConnection extends DeserializationError {
/**
* @param connection The name of the connection that is missing. E.g.
* 'IF0', or 'next'.
* @param block The block missing the connection.
* @param state The state object containing the bad connection.
* @internal
*/
constructor(connection: string, public block: Block, public state: State) {
super(`The block ${block.toDevString()} is missing a(n) ${connection}
connection`);
}
}
/**
* Represents an error where deserialization tried to connect two connections
* that were not compatible.
*
* @alias Blockly.serialization.exceptions.BadConnectionCheck
*/
export class BadConnectionCheck extends DeserializationError {
/**
* @param reason The reason the connections were not compatible.
* @param childConnection The name of the incompatible child connection. E.g.
* 'output' or 'previous'.
* @param childBlock The child block that could not connect to its parent.
* @param childState The state object representing the child block.
* @internal
*/
constructor(
reason: string, childConnection: string, public childBlock: Block,
public childState: State) {
super(`The block ${childBlock.toDevString()} could not connect its
${childConnection} to its parent, because: ${reason}`);
}
}
/**
* Represents an error where deserialization encountered a real block as it
* was deserializing children of a shadow.
* This is an error because it is an invariant of Blockly that shadow blocks
* do not have real children.
*
* @alias Blockly.serialization.exceptions.RealChildOfShadow
*/
export class RealChildOfShadow extends DeserializationError {
/**
* @param state The state object representing the real block.
* @internal
*/
constructor(public state: State) {
super(`Encountered a real block which is defined as a child of a shadow
block. It is an invariant of Blockly that shadow blocks only have shadow
children`);
}
}