chore: merge develop into rc/v11

This commit is contained in:
Maribeth Bottorff
2024-04-01 14:57:19 -07:00
committed by GitHub
34 changed files with 375 additions and 426 deletions

View File

@@ -42,7 +42,7 @@ jobs:
path: _deploy/ path: _deploy/
- name: Deploy to App Engine - name: Deploy to App Engine
uses: google-github-actions/deploy-appengine@v2.0.0 uses: google-github-actions/deploy-appengine@v2.1.0
# For parameters see: # For parameters see:
# https://github.com/google-github-actions/deploy-appengine#inputs # https://github.com/google-github-actions/deploy-appengine#inputs
with: with:

View File

@@ -62,8 +62,8 @@ def run_query():
while more: while more:
results, cursor, more = query.fetch_page(PAGE_SIZE, start_cursor=cursor) results, cursor, more = query.fetch_page(PAGE_SIZE, start_cursor=cursor)
handle_results(results) handle_results(results)
page_count = page_count + 1 page_count += 1
result_count = result_count + len(results) result_count += len(results)
print(f'{datetime.datetime.now().strftime("%I:%M:%S %p")} : page {page_count} : {result_count}') print(f'{datetime.datetime.now().strftime("%I:%M:%S %p")} : page {page_count} : {result_count}')
run_query() run_query()

View File

@@ -38,18 +38,26 @@ export function disposeUiEffect(block: BlockSvg) {
const svgGroup = block.getSvgRoot(); const svgGroup = block.getSvgRoot();
workspace.getAudioManager().play('delete'); workspace.getAudioManager().play('delete');
const xy = workspace.getSvgXY(svgGroup); const xy = block.getRelativeToSurfaceXY();
// Deeply clone the current block. // Deeply clone the current block.
const clone: SVGGElement = svgGroup.cloneNode(true) as SVGGElement; const clone: SVGGElement = svgGroup.cloneNode(true) as SVGGElement;
clone.setAttribute('transform', 'translate(' + xy.x + ',' + xy.y + ')'); clone.setAttribute('transform', 'translate(' + xy.x + ',' + xy.y + ')');
workspace.getParentSvg().appendChild(clone); if (workspace.isDragging()) {
workspace.getLayerManager()?.moveToDragLayer({
getSvgRoot: () => {
return clone;
},
});
} else {
workspace.getLayerManager()?.getBlockLayer().appendChild(clone);
}
const cloneRect = { const cloneRect = {
'x': xy.x, 'x': xy.x,
'y': xy.y, 'y': xy.y,
'width': block.width, 'width': block.width,
'height': block.height, 'height': block.height,
}; };
disposeUiStep(clone, cloneRect, workspace.RTL, new Date(), workspace.scale); disposeUiStep(clone, cloneRect, workspace.RTL, new Date());
} }
/** /**
* Animate a cloned block and eventually dispose of it. * Animate a cloned block and eventually dispose of it.
@@ -60,29 +68,26 @@ export function disposeUiEffect(block: BlockSvg) {
* @param rect Starting rect of the clone. * @param rect Starting rect of the clone.
* @param rtl True if RTL, false if LTR. * @param rtl True if RTL, false if LTR.
* @param start Date of animation's start. * @param start Date of animation's start.
* @param workspaceScale Scale of workspace.
*/ */
function disposeUiStep( function disposeUiStep(
clone: Element, clone: Element,
rect: CloneRect, rect: CloneRect,
rtl: boolean, rtl: boolean,
start: Date, start: Date,
workspaceScale: number,
) { ) {
const ms = new Date().getTime() - start.getTime(); const ms = new Date().getTime() - start.getTime();
const percent = ms / 150; const percent = ms / 150;
if (percent > 1) { if (percent > 1) {
dom.removeNode(clone); dom.removeNode(clone);
} else { } else {
const x = const x = rect.x + (((rtl ? -1 : 1) * rect.width) / 2) * percent;
rect.x + (((rtl ? -1 : 1) * rect.width * workspaceScale) / 2) * percent; const y = rect.y + (rect.height / 2) * percent;
const y = rect.y + rect.height * workspaceScale * percent; const scale = 1 - percent;
const scale = (1 - percent) * workspaceScale;
clone.setAttribute( clone.setAttribute(
'transform', 'transform',
'translate(' + x + ',' + y + ')' + ' scale(' + scale + ')', 'translate(' + x + ',' + y + ')' + ' scale(' + scale + ')',
); );
setTimeout(disposeUiStep, 10, clone, rect, rtl, start, workspaceScale); setTimeout(disposeUiStep, 10, clone, rect, rtl, start);
} }
} }

View File

@@ -224,7 +224,7 @@ export class Connection implements IASTNodeLocationWithBlock {
* Connect this connection to another connection. * Connect this connection to another connection.
* *
* @param otherConnection Connection to connect to. * @param otherConnection Connection to connect to.
* @returns Whether the the blocks are now connected or not. * @returns Whether the blocks are now connected or not.
*/ */
connect(otherConnection: Connection): boolean { connect(otherConnection: Connection): boolean {
if (this.targetConnection === otherConnection) { if (this.targetConnection === otherConnection) {

View File

@@ -444,7 +444,6 @@ export class FieldVariable extends FieldDropdown {
// #1499. // #1499.
// Set the allowable variable types. Null means all types on the workspace. // Set the allowable variable types. Null means all types on the workspace.
if (Array.isArray(variableTypes)) { if (Array.isArray(variableTypes)) {
variableTypes = variableTypes;
// Make sure the default type is valid. // Make sure the default type is valid.
let isInArray = false; let isInArray = false;
for (let i = 0; i < variableTypes.length; i++) { for (let i = 0; i < variableTypes.length; i++) {

View File

@@ -303,6 +303,9 @@ export class CodeGenerator {
throw TypeError('Expecting valid order from block: ' + block.type); throw TypeError('Expecting valid order from block: ' + block.type);
} }
const targetBlock = block.getInputTargetBlock(name); const targetBlock = block.getInputTargetBlock(name);
if (!targetBlock && !block.getInput(name)) {
throw ReferenceError(`Input "${name}" doesn't exist on "${block.type}"`);
}
if (!targetBlock) { if (!targetBlock) {
return ''; return '';
} }
@@ -381,6 +384,9 @@ export class CodeGenerator {
*/ */
statementToCode(block: Block, name: string): string { statementToCode(block: Block, name: string): string {
const targetBlock = block.getInputTargetBlock(name); const targetBlock = block.getInputTargetBlock(name);
if (!targetBlock && !block.getInput(name)) {
throw ReferenceError(`Input "${name}" doesn't exist on "${block.type}"`);
}
let code = this.blockToCode(targetBlock); let code = this.blockToCode(targetBlock);
// Value blocks must return code and order of operations info. // Value blocks must return code and order of operations info.
// Statement blocks must only return code. // Statement blocks must only return code.

View File

@@ -165,8 +165,13 @@ export function register<T>(
// Validate that the given class has all the required properties. // Validate that the given class has all the required properties.
validate(type, registryItem); validate(type, registryItem);
// Don't throw an error if opt_allowOverrides is true. // Don't throw an error if opt_allowOverrides is true,
if (!opt_allowOverrides && typeRegistry[caselessName]) { // or if we're trying to register the same item.
if (
!opt_allowOverrides &&
typeRegistry[caselessName] &&
typeRegistry[caselessName] !== registryItem
) {
throw Error( throw Error(
'Name "' + 'Name "' +
caselessName + caselessName +

View File

@@ -170,7 +170,7 @@ function dequeueBlock(block: BlockSvg) {
* No need to render dead blocks. * No need to render dead blocks.
* *
* No need to render blocks with parents. A render for the block may have been * No need to render blocks with parents. A render for the block may have been
* queued, and the the block was connected to a parent, so it is no longer a * queued, and the block was connected to a parent, so it is no longer a
* root block. Rendering will be triggered through the real root block. * root block. Rendering will be triggered through the real root block.
*/ */
function shouldRenderRootBlock(block: BlockSvg): boolean { function shouldRenderRootBlock(block: BlockSvg): boolean {

View File

@@ -75,8 +75,7 @@ export function load(
} }
// reverse() is destructive, so we have to re-reverse to correct the order. // reverse() is destructive, so we have to re-reverse to correct the order.
for (let [name, deserializer] of deserializers.reverse()) { for (const [name, deserializer] of deserializers.reverse()) {
name = name;
const pluginState = state[name]; const pluginState = state[name];
if (pluginState) { if (pluginState) {
(deserializer as ISerializer)?.load(state[name], workspace); (deserializer as ISerializer)?.load(state[name], workspace);

View File

@@ -287,7 +287,7 @@ export class ShortcutRegistry {
} }
} }
if (serializedKey !== '' && e.keyCode) { if (serializedKey !== '' && e.keyCode) {
serializedKey = serializedKey + '+' + e.keyCode; serializedKey += '+' + e.keyCode;
} else if (e.keyCode) { } else if (e.keyCode) {
serializedKey = String(e.keyCode); serializedKey = String(e.keyCode);
} }
@@ -335,7 +335,7 @@ export class ShortcutRegistry {
} }
if (serializedKey !== '' && keyCode) { if (serializedKey !== '' && keyCode) {
serializedKey = serializedKey + '+' + keyCode; serializedKey += '+' + keyCode;
} else if (keyCode) { } else if (keyCode) {
serializedKey = `${keyCode}`; serializedKey = `${keyCode}`;
} }

View File

@@ -87,8 +87,8 @@ export function getInjectionDivXY(element: Element): Coordinate {
let y = 0; let y = 0;
while (element) { while (element) {
const xy = getRelativeXY(element); const xy = getRelativeXY(element);
x = x + xy.x; x += xy.x;
y = y + xy.y; y += xy.y;
const classes = element.getAttribute('class') || ''; const classes = element.getAttribute('class') || '';
if ((' ' + classes + ' ').includes(' injectionDiv ')) { if ((' ' + classes + ' ').includes(' injectionDiv ')) {
break; break;

View File

@@ -57,14 +57,16 @@ export function testOnly_setDiv(newDiv: HTMLDivElement | null) {
* Create the widget div and inject it onto the page. * Create the widget div and inject it onto the page.
*/ */
export function createDom() { export function createDom() {
const container = common.getParentContainer() || document.body;
if (document.querySelector('.' + containerClassName)) { if (document.querySelector('.' + containerClassName)) {
return; // Already created. containerDiv = document.querySelector('.' + containerClassName);
} else {
containerDiv = document.createElement('div') as HTMLDivElement;
containerDiv.className = containerClassName;
} }
containerDiv = document.createElement('div') as HTMLDivElement; container.appendChild(containerDiv!);
containerDiv.className = containerClassName;
const container = common.getParentContainer() || document.body;
container.appendChild(containerDiv);
} }
/** /**

View File

@@ -946,7 +946,7 @@ function applyNextTagNodes(
* *
* @param xmlBlock XML block element. * @param xmlBlock XML block element.
* @param workspace The workspace. * @param workspace The workspace.
* @param parentConnection The parent connection to to connect this block to * @param parentConnection The parent connection to connect this block to
* after instantiating. * after instantiating.
* @param connectedToParentNext Whether the provided parent connection is a next * @param connectedToParentNext Whether the provided parent connection is a next
* connection, rather than output or statement. * connection, rather than output or statement.

View File

@@ -71,7 +71,7 @@ BlockDefinitionExtractor.newDomElement_ = function(name, opt_attrs, opt_text) {
* requested type. * requested type.
* *
* @param {string} type Type name of desired connection constraint. * @param {string} type Type name of desired connection constraint.
* @return {!Element} The <block> representing the the constraint type. * @return {!Element} The <block> representing the constraint type.
* @private * @private
*/ */
BlockDefinitionExtractor.buildBlockForType_ = function(type) { BlockDefinitionExtractor.buildBlockForType_ = function(type) {

View File

@@ -350,44 +350,6 @@
</block> </block>
<block type="lists_sort"></block> <block type="lists_sort"></block>
</category> </category>
<category name="%{BKY_CATCOLOUR}" colour="%{BKY_COLOUR_HUE}">
<block type="colour_picker"></block>
<block type="colour_random"></block>
<block type="colour_rgb">
<value name="RED">
<shadow type="math_number">
<field name="NUM">100</field>
</shadow>
</value>
<value name="GREEN">
<shadow type="math_number">
<field name="NUM">50</field>
</shadow>
</value>
<value name="BLUE">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
</block>
<block type="colour_blend">
<value name="COLOUR1">
<shadow type="colour_picker">
<field name="COLOUR">#ff0000</field>
</shadow>
</value>
<value name="COLOUR2">
<shadow type="colour_picker">
<field name="COLOUR">#3333ff</field>
</shadow>
</value>
<value name="RATIO">
<shadow type="math_number">
<field name="NUM">0.5</field>
</shadow>
</value>
</block>
</category>
<sep></sep> <sep></sep>
<category name="%{BKY_CATVARIABLES}" colour="%{BKY_VARIABLES_HUE}" custom="VARIABLE"></category> <category name="%{BKY_CATVARIABLES}" colour="%{BKY_VARIABLES_HUE}" custom="VARIABLE"></category>
<category name="%{BKY_CATFUNCTIONS}" colour="%{BKY_PROCEDURES_HUE}" custom="PROCEDURE"></category> <category name="%{BKY_CATFUNCTIONS}" colour="%{BKY_PROCEDURES_HUE}" custom="PROCEDURE"></category>

View File

@@ -35,8 +35,17 @@ export function procedures_defreturn(block: Block, generator: DartGenerator) {
generator.INDENT, generator.INDENT,
); );
} }
const branch = generator.statementToCode(block, 'STACK'); let branch = '';
let returnValue = generator.valueToCode(block, 'RETURN', Order.NONE) || ''; if (block.getInput('STACK')) {
// The 'procedures_defreturn' block might not have a STACK input.
branch = generator.statementToCode(block, 'STACK');
}
let returnValue = '';
if (block.getInput('RETURN')) {
// The 'procedures_defnoreturn' block (which shares this code)
// does not have a RETURN input.
returnValue = generator.valueToCode(block, 'RETURN', Order.NONE) || '';
}
let xfix2 = ''; let xfix2 = '';
if (branch && returnValue) { if (branch && returnValue) {
// After executing the function body, revisit this block for the return. // After executing the function body, revisit this block for the return.

View File

@@ -118,10 +118,12 @@ export function text_charAt(
return [code, Order.UNARY_POSTFIX]; return [code, Order.UNARY_POSTFIX];
} }
case 'LAST': case 'LAST':
at = 1;
// Fall through.
case 'FROM_END': { case 'FROM_END': {
at = generator.getAdjusted(block, 'AT', 1); if (where === 'LAST') {
at = 1;
} else {
at = generator.getAdjusted(block, 'AT', 1);
}
const functionName = generator.provideFunction_( const functionName = generator.provideFunction_(
'text_get_from_end', 'text_get_from_end',
` `
@@ -130,7 +132,7 @@ String ${generator.FUNCTION_NAME_PLACEHOLDER_}(String text, num x) {
} }
`, `,
); );
const code = functionName + '(' + text + ', ' + at + ')'; const code = `${functionName}(${text}, ${at})`;
return [code, Order.UNARY_POSTFIX]; return [code, Order.UNARY_POSTFIX];
} }
case 'RANDOM': { case 'RANDOM': {

View File

@@ -318,7 +318,7 @@ function ${generator.FUNCTION_NAME_PLACEHOLDER_}(values) {
} }
for (var j = 0; j < counts.length; j++) { for (var j = 0; j < counts.length; j++) {
if (counts[j][1] === maxCount) { if (counts[j][1] === maxCount) {
modes.push(counts[j][0]); modes.push(counts[j][0]);
} }
} }
return modes; return modes;
@@ -341,7 +341,7 @@ function ${generator.FUNCTION_NAME_PLACEHOLDER_}(numbers) {
for (var j = 0; j < n; j++) { for (var j = 0; j < n; j++) {
variance += Math.pow(numbers[j] - mean, 2); variance += Math.pow(numbers[j] - mean, 2);
} }
variance = variance / n; variance /= n;
return Math.sqrt(variance); return Math.sqrt(variance);
} }
`, `,

View File

@@ -38,8 +38,17 @@ export function procedures_defreturn(
generator.INDENT, generator.INDENT,
); );
} }
const branch = generator.statementToCode(block, 'STACK'); let branch = '';
let returnValue = generator.valueToCode(block, 'RETURN', Order.NONE) || ''; if (block.getInput('STACK')) {
// The 'procedures_defreturn' block might not have a STACK input.
branch = generator.statementToCode(block, 'STACK');
}
let returnValue = '';
if (block.getInput('RETURN')) {
// The 'procedures_defnoreturn' block (which shares this code)
// does not have a RETURN input.
returnValue = generator.valueToCode(block, 'RETURN', Order.NONE) || '';
}
let xfix2 = ''; let xfix2 = '';
if (branch && returnValue) { if (branch && returnValue) {
// After executing the function body, revisit this block for the return. // After executing the function body, revisit this block for the return.

View File

@@ -38,8 +38,17 @@ export function procedures_defreturn(
generator.INDENT, generator.INDENT,
); );
} }
let branch = generator.statementToCode(block, 'STACK'); let branch = '';
let returnValue = generator.valueToCode(block, 'RETURN', Order.NONE) || ''; if (block.getInput('STACK')) {
// The 'procedures_defreturn' block might not have a STACK input.
branch = generator.statementToCode(block, 'STACK');
}
let returnValue = '';
if (block.getInput('RETURN')) {
// The 'procedures_defnoreturn' block (which shares this code)
// does not have a RETURN input.
returnValue = generator.valueToCode(block, 'RETURN', Order.NONE) || '';
}
let xfix2 = ''; let xfix2 = '';
if (branch && returnValue) { if (branch && returnValue) {
// After executing the function body, revisit this block for the return. // After executing the function body, revisit this block for the return.

View File

@@ -122,8 +122,6 @@ export function text_charAt(
// Get letter at index. // Get letter at index.
// Note: Until January 2013 this block did not have the WHERE input. // Note: Until January 2013 this block did not have the WHERE input.
const where = block.getFieldValue('WHERE') || 'FROM_START'; const where = block.getFieldValue('WHERE') || 'FROM_START';
const atOrder = where === 'FROM_END' ? Order.UNARY : Order.NONE;
const at = generator.valueToCode(block, 'AT', atOrder) || '1';
const text = generator.valueToCode(block, 'VALUE', Order.NONE) || "''"; const text = generator.valueToCode(block, 'VALUE', Order.NONE) || "''";
let code; let code;
if (where === 'RANDOM') { if (where === 'RANDOM') {
@@ -144,6 +142,8 @@ end
} else if (where === 'LAST') { } else if (where === 'LAST') {
start = '-1'; start = '-1';
} else { } else {
const atOrder = where === 'FROM_END' ? Order.UNARY : Order.NONE;
const at = generator.valueToCode(block, 'AT', atOrder) || '1';
if (where === 'FROM_START') { if (where === 'FROM_START') {
start = at; start = at;
} else if (where === 'FROM_END') { } else if (where === 'FROM_END') {

View File

@@ -60,8 +60,17 @@ export function procedures_defreturn(block: Block, generator: PhpGenerator) {
generator.INDENT, generator.INDENT,
); );
} }
const branch = generator.statementToCode(block, 'STACK'); let branch = '';
let returnValue = generator.valueToCode(block, 'RETURN', Order.NONE) || ''; if (block.getInput('STACK')) {
// The 'procedures_defreturn' block might not have a STACK input.
branch = generator.statementToCode(block, 'STACK');
}
let returnValue = '';
if (block.getInput('RETURN')) {
// The 'procedures_defnoreturn' block (which shares this code)
// does not have a RETURN input.
returnValue = generator.valueToCode(block, 'RETURN', Order.NONE) || '';
}
let xfix2 = ''; let xfix2 = '';
if (branch && returnValue) { if (branch && returnValue) {
// After executing the function body, revisit this block for the return. // After executing the function body, revisit this block for the return.

View File

@@ -60,8 +60,17 @@ export function procedures_defreturn(block: Block, generator: PythonGenerator) {
generator.INDENT, generator.INDENT,
); );
} }
let branch = generator.statementToCode(block, 'STACK'); let branch = '';
let returnValue = generator.valueToCode(block, 'RETURN', Order.NONE) || ''; if (block.getInput('STACK')) {
// The 'procedures_defreturn' block might not have a STACK input.
branch = generator.statementToCode(block, 'STACK');
}
let returnValue = '';
if (block.getInput('RETURN')) {
// The 'procedures_defnoreturn' block (which shares this code)
// does not have a RETURN input.
returnValue = generator.valueToCode(block, 'RETURN', Order.NONE) || '';
}
let xfix2 = ''; let xfix2 = '';
if (branch && returnValue) { if (branch && returnValue) {
// After executing the function body, revisit this block for the return. // After executing the function body, revisit this block for the return.

573
package-lock.json generated
View File

@@ -19,7 +19,7 @@
"@hyperjump/json-schema": "^1.5.0", "@hyperjump/json-schema": "^1.5.0",
"@microsoft/api-documenter": "^7.22.4", "@microsoft/api-documenter": "^7.22.4",
"@microsoft/api-extractor": "^7.29.5", "@microsoft/api-extractor": "^7.29.5",
"@typescript-eslint/eslint-plugin": "^6.1.0", "@typescript-eslint/eslint-plugin": "^7.3.1",
"async-done": "^2.0.0", "async-done": "^2.0.0",
"chai": "^4.2.0", "chai": "^4.2.0",
"concurrently": "^8.0.1", "concurrently": "^8.0.1",
@@ -78,9 +78,9 @@
} }
}, },
"node_modules/@blockly/block-test": { "node_modules/@blockly/block-test": {
"version": "5.0.4", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/@blockly/block-test/-/block-test-5.0.4.tgz", "resolved": "https://registry.npmjs.org/@blockly/block-test/-/block-test-5.1.0.tgz",
"integrity": "sha512-3u7z9Xd+W1eCcknqVsmUYnDvS2FIzce2IdGuRC1lst2XIQQ59q2wkUqGg4+Z2Arr3hk/TpIlHn2YLrGPkvqkug==", "integrity": "sha512-beqBTJbrrDGECohJo6uczeLAvRxKgMFn9Ew1po6d8PBka/aNwSkT33jHRUAeasHnraBdFBx8pwYh7By2gVZURQ==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">=8.17.0" "node": ">=8.17.0"
@@ -90,14 +90,14 @@
} }
}, },
"node_modules/@blockly/dev-tools": { "node_modules/@blockly/dev-tools": {
"version": "7.1.5", "version": "7.1.7",
"resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-7.1.5.tgz", "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-7.1.7.tgz",
"integrity": "sha512-eNpi+yknoR2RXzYUOE4Owp5XiY9Qm/FH+BOGhd5WrDyK3/LGQ4Yp0NOBO1tWN+Kbjxe19k6yhA50kX7YkDad/w==", "integrity": "sha512-ar/6A7JyTSzhJ6ojEOzoCxnm4jRTQJeYn87g+iTEJrM9K8tk/Ccn4sZY34T+ULhy8A2MbFkbtmERCLx6HNrAkA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@blockly/block-test": "^5.0.4", "@blockly/block-test": "^5.1.0",
"@blockly/theme-dark": "^6.0.5", "@blockly/theme-dark": "^6.0.5",
"@blockly/theme-deuteranopia": "^5.0.5", "@blockly/theme-deuteranopia": "^5.0.6",
"@blockly/theme-highcontrast": "^5.0.5", "@blockly/theme-highcontrast": "^5.0.5",
"@blockly/theme-tritanopia": "^5.0.5", "@blockly/theme-tritanopia": "^5.0.5",
"chai": "^4.2.0", "chai": "^4.2.0",
@@ -127,9 +127,9 @@
} }
}, },
"node_modules/@blockly/theme-deuteranopia": { "node_modules/@blockly/theme-deuteranopia": {
"version": "5.0.5", "version": "5.0.6",
"resolved": "https://registry.npmjs.org/@blockly/theme-deuteranopia/-/theme-deuteranopia-5.0.5.tgz", "resolved": "https://registry.npmjs.org/@blockly/theme-deuteranopia/-/theme-deuteranopia-5.0.6.tgz",
"integrity": "sha512-Eqr3JbIch4Uyi3awWXq0vtGy5LL4cknkBH4VjUi73w9Xdiytt1LgoWJD23NBtKcP4M31iDWV+8fdPK4R1tUVcg==", "integrity": "sha512-bYQz2TrkbwPxYjZXlQGf6pMEnSBD/If4FtBqAavt/lutwib0awM0NbPWu8RP89z4aRcAlsByYYSzFQMNqYBaiA==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">=8.17.0" "node": ">=8.17.0"
@@ -579,23 +579,24 @@
} }
}, },
"node_modules/@microsoft/api-extractor": { "node_modules/@microsoft/api-extractor": {
"version": "7.38.5", "version": "7.43.0",
"resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.38.5.tgz", "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.43.0.tgz",
"integrity": "sha512-c/w2zfqBcBJxaCzpJNvFoouWewcYrUOfeu5ZkWCCIXTF9a/gXM85RGevEzlMAIEGM/kssAAZSXRJIZ3Q5vLFow==", "integrity": "sha512-GFhTcJpB+MI6FhvXEI9b2K0snulNLWHqC/BbcJtyNYcKUiw7l3Lgis5ApsYncJ0leALX7/of4XfmXk+maT111w==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@microsoft/api-extractor-model": "7.28.3", "@microsoft/api-extractor-model": "7.28.13",
"@microsoft/tsdoc": "0.14.2", "@microsoft/tsdoc": "0.14.2",
"@microsoft/tsdoc-config": "~0.16.1", "@microsoft/tsdoc-config": "~0.16.1",
"@rushstack/node-core-library": "3.62.0", "@rushstack/node-core-library": "4.0.2",
"@rushstack/rig-package": "0.5.1", "@rushstack/rig-package": "0.5.2",
"@rushstack/ts-command-line": "4.17.1", "@rushstack/terminal": "0.10.0",
"colors": "~1.2.1", "@rushstack/ts-command-line": "4.19.1",
"lodash": "~4.17.15", "lodash": "~4.17.15",
"minimatch": "~3.0.3",
"resolve": "~1.22.1", "resolve": "~1.22.1",
"semver": "~7.5.4", "semver": "~7.5.4",
"source-map": "~0.6.1", "source-map": "~0.6.1",
"typescript": "~5.0.4" "typescript": "5.4.2"
}, },
"bin": { "bin": {
"api-extractor": "bin/api-extractor" "api-extractor": "bin/api-extractor"
@@ -612,6 +613,72 @@
"@rushstack/node-core-library": "3.62.0" "@rushstack/node-core-library": "3.62.0"
} }
}, },
"node_modules/@microsoft/api-extractor/node_modules/@microsoft/api-extractor-model": {
"version": "7.28.13",
"resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.28.13.tgz",
"integrity": "sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw==",
"dev": true,
"dependencies": {
"@microsoft/tsdoc": "0.14.2",
"@microsoft/tsdoc-config": "~0.16.1",
"@rushstack/node-core-library": "4.0.2"
}
},
"node_modules/@microsoft/api-extractor/node_modules/@rushstack/node-core-library": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-4.0.2.tgz",
"integrity": "sha512-hyES82QVpkfQMeBMteQUnrhASL/KHPhd7iJ8euduwNJG4mu2GSOKybf0rOEjOm1Wz7CwJEUm9y0yD7jg2C1bfg==",
"dev": true,
"dependencies": {
"fs-extra": "~7.0.1",
"import-lazy": "~4.0.0",
"jju": "~1.4.0",
"resolve": "~1.22.1",
"semver": "~7.5.4",
"z-schema": "~5.0.2"
},
"peerDependencies": {
"@types/node": "*"
},
"peerDependenciesMeta": {
"@types/node": {
"optional": true
}
}
},
"node_modules/@microsoft/api-extractor/node_modules/@rushstack/ts-command-line": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.19.1.tgz",
"integrity": "sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg==",
"dev": true,
"dependencies": {
"@rushstack/terminal": "0.10.0",
"@types/argparse": "1.0.38",
"argparse": "~1.0.9",
"string-argv": "~0.3.1"
}
},
"node_modules/@microsoft/api-extractor/node_modules/argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"dependencies": {
"sprintf-js": "~1.0.2"
}
},
"node_modules/@microsoft/api-extractor/node_modules/minimatch": {
"version": "3.0.8",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz",
"integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"node_modules/@microsoft/api-extractor/node_modules/source-map": { "node_modules/@microsoft/api-extractor/node_modules/source-map": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -622,16 +689,16 @@
} }
}, },
"node_modules/@microsoft/api-extractor/node_modules/typescript": { "node_modules/@microsoft/api-extractor/node_modules/typescript": {
"version": "5.0.4", "version": "5.4.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz",
"integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==",
"dev": true, "dev": true,
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",
"tsserver": "bin/tsserver" "tsserver": "bin/tsserver"
}, },
"engines": { "engines": {
"node": ">=12.20" "node": ">=14.17"
} }
}, },
"node_modules/@microsoft/tsdoc": { "node_modules/@microsoft/tsdoc": {
@@ -795,15 +862,70 @@
} }
}, },
"node_modules/@rushstack/rig-package": { "node_modules/@rushstack/rig-package": {
"version": "0.5.1", "version": "0.5.2",
"resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.1.tgz", "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.2.tgz",
"integrity": "sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==", "integrity": "sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"resolve": "~1.22.1", "resolve": "~1.22.1",
"strip-json-comments": "~3.1.1" "strip-json-comments": "~3.1.1"
} }
}, },
"node_modules/@rushstack/terminal": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.10.0.tgz",
"integrity": "sha512-UbELbXnUdc7EKwfH2sb8ChqNgapUOdqcCIdQP4NGxBpTZV2sQyeekuK3zmfQSa/MN+/7b4kBogl2wq0vpkpYGw==",
"dev": true,
"dependencies": {
"@rushstack/node-core-library": "4.0.2",
"supports-color": "~8.1.1"
},
"peerDependencies": {
"@types/node": "*"
},
"peerDependenciesMeta": {
"@types/node": {
"optional": true
}
}
},
"node_modules/@rushstack/terminal/node_modules/@rushstack/node-core-library": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-4.0.2.tgz",
"integrity": "sha512-hyES82QVpkfQMeBMteQUnrhASL/KHPhd7iJ8euduwNJG4mu2GSOKybf0rOEjOm1Wz7CwJEUm9y0yD7jg2C1bfg==",
"dev": true,
"dependencies": {
"fs-extra": "~7.0.1",
"import-lazy": "~4.0.0",
"jju": "~1.4.0",
"resolve": "~1.22.1",
"semver": "~7.5.4",
"z-schema": "~5.0.2"
},
"peerDependencies": {
"@types/node": "*"
},
"peerDependenciesMeta": {
"@types/node": {
"optional": true
}
}
},
"node_modules/@rushstack/terminal/node_modules/supports-color": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"node_modules/@rushstack/ts-command-line": { "node_modules/@rushstack/ts-command-line": {
"version": "4.17.1", "version": "4.17.1",
"resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.17.1.tgz", "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.17.1.tgz",
@@ -946,9 +1068,9 @@
"dev": true "dev": true
}, },
"node_modules/@types/semver": { "node_modules/@types/semver": {
"version": "7.5.6", "version": "7.5.8",
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
"integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
"dev": true "dev": true
}, },
"node_modules/@types/vinyl": { "node_modules/@types/vinyl": {
@@ -987,16 +1109,16 @@
} }
}, },
"node_modules/@typescript-eslint/eslint-plugin": { "node_modules/@typescript-eslint/eslint-plugin": {
"version": "6.19.0", "version": "7.3.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.3.1.tgz",
"integrity": "sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==", "integrity": "sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@eslint-community/regexpp": "^4.5.1", "@eslint-community/regexpp": "^4.5.1",
"@typescript-eslint/scope-manager": "6.19.0", "@typescript-eslint/scope-manager": "7.3.1",
"@typescript-eslint/type-utils": "6.19.0", "@typescript-eslint/type-utils": "7.3.1",
"@typescript-eslint/utils": "6.19.0", "@typescript-eslint/utils": "7.3.1",
"@typescript-eslint/visitor-keys": "6.19.0", "@typescript-eslint/visitor-keys": "7.3.1",
"debug": "^4.3.4", "debug": "^4.3.4",
"graphemer": "^1.4.0", "graphemer": "^1.4.0",
"ignore": "^5.2.4", "ignore": "^5.2.4",
@@ -1005,15 +1127,15 @@
"ts-api-utils": "^1.0.1" "ts-api-utils": "^1.0.1"
}, },
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^18.18.0 || >=20.0.0"
}, },
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
"url": "https://opencollective.com/typescript-eslint" "url": "https://opencollective.com/typescript-eslint"
}, },
"peerDependencies": { "peerDependencies": {
"@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", "@typescript-eslint/parser": "^7.0.0",
"eslint": "^7.0.0 || ^8.0.0" "eslint": "^8.56.0"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
"typescript": { "typescript": {
@@ -1021,75 +1143,28 @@
} }
} }
}, },
"node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
"version": "6.19.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.0.tgz",
"integrity": "sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "6.19.0",
"@typescript-eslint/visitor-keys": "6.19.0"
},
"engines": {
"node": "^16.0.0 || >=18.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
}
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
"version": "6.19.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.0.tgz",
"integrity": "sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==",
"dev": true,
"engines": {
"node": "^16.0.0 || >=18.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
}
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
"version": "6.19.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.0.tgz",
"integrity": "sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "6.19.0",
"eslint-visitor-keys": "^3.4.1"
},
"engines": {
"node": "^16.0.0 || >=18.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
}
},
"node_modules/@typescript-eslint/parser": { "node_modules/@typescript-eslint/parser": {
"version": "6.1.0", "version": "7.3.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.1.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.3.1.tgz",
"integrity": "sha512-hIzCPvX4vDs4qL07SYzyomamcs2/tQYXg5DtdAfj35AyJ5PIUqhsLf4YrEIFzZcND7R2E8tpQIZKayxg8/6Wbw==", "integrity": "sha512-Rq49+pq7viTRCH48XAbTA+wdLRrB/3sRq4Lpk0oGDm0VmnjBrAOVXH/Laalmwsv2VpekiEfVFwJYVk6/e8uvQw==",
"dev": true, "dev": true,
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"@typescript-eslint/scope-manager": "6.1.0", "@typescript-eslint/scope-manager": "7.3.1",
"@typescript-eslint/types": "6.1.0", "@typescript-eslint/types": "7.3.1",
"@typescript-eslint/typescript-estree": "6.1.0", "@typescript-eslint/typescript-estree": "7.3.1",
"@typescript-eslint/visitor-keys": "6.1.0", "@typescript-eslint/visitor-keys": "7.3.1",
"debug": "^4.3.4" "debug": "^4.3.4"
}, },
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^18.18.0 || >=20.0.0"
}, },
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
"url": "https://opencollective.com/typescript-eslint" "url": "https://opencollective.com/typescript-eslint"
}, },
"peerDependencies": { "peerDependencies": {
"eslint": "^7.0.0 || ^8.0.0" "eslint": "^8.56.0"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
"typescript": { "typescript": {
@@ -1098,17 +1173,16 @@
} }
}, },
"node_modules/@typescript-eslint/scope-manager": { "node_modules/@typescript-eslint/scope-manager": {
"version": "6.1.0", "version": "7.3.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.1.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz",
"integrity": "sha512-AxjgxDn27hgPpe2rQe19k0tXw84YCOsjDJ2r61cIebq1t+AIxbgiXKvD4999Wk49GVaAcdJ/d49FYel+Pp3jjw==", "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.1.0", "@typescript-eslint/types": "7.3.1",
"@typescript-eslint/visitor-keys": "6.1.0" "@typescript-eslint/visitor-keys": "7.3.1"
}, },
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^18.18.0 || >=20.0.0"
}, },
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
@@ -1116,25 +1190,25 @@
} }
}, },
"node_modules/@typescript-eslint/type-utils": { "node_modules/@typescript-eslint/type-utils": {
"version": "6.19.0", "version": "7.3.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.3.1.tgz",
"integrity": "sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==", "integrity": "sha512-iFhaysxFsMDQlzJn+vr3OrxN8NmdQkHks4WaqD4QBnt5hsq234wcYdyQ9uquzJJIDAj5W4wQne3yEsYA6OmXGw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/typescript-estree": "6.19.0", "@typescript-eslint/typescript-estree": "7.3.1",
"@typescript-eslint/utils": "6.19.0", "@typescript-eslint/utils": "7.3.1",
"debug": "^4.3.4", "debug": "^4.3.4",
"ts-api-utils": "^1.0.1" "ts-api-utils": "^1.0.1"
}, },
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^18.18.0 || >=20.0.0"
}, },
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
"url": "https://opencollective.com/typescript-eslint" "url": "https://opencollective.com/typescript-eslint"
}, },
"peerDependencies": { "peerDependencies": {
"eslint": "^7.0.0 || ^8.0.0" "eslint": "^8.56.0"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
"typescript": { "typescript": {
@@ -1142,96 +1216,13 @@
} }
} }
}, },
"node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
"version": "6.19.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.0.tgz",
"integrity": "sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==",
"dev": true,
"engines": {
"node": "^16.0.0 || >=18.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
}
},
"node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
"version": "6.19.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.0.tgz",
"integrity": "sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "6.19.0",
"@typescript-eslint/visitor-keys": "6.19.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
"minimatch": "9.0.3",
"semver": "^7.5.4",
"ts-api-utils": "^1.0.1"
},
"engines": {
"node": "^16.0.0 || >=18.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
}
},
"node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
"version": "6.19.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.0.tgz",
"integrity": "sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "6.19.0",
"eslint-visitor-keys": "^3.4.1"
},
"engines": {
"node": "^16.0.0 || >=18.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
}
},
"node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/@typescript-eslint/type-utils/node_modules/minimatch": {
"version": "9.0.3",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
"integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/@typescript-eslint/types": { "node_modules/@typescript-eslint/types": {
"version": "6.1.0", "version": "7.3.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.1.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz",
"integrity": "sha512-+Gfd5NHCpDoHDOaU/yIF3WWRI2PcBRKKpP91ZcVbL0t5tQpqYWBs3z/GGhvU+EV1D0262g9XCnyqQh19prU0JQ==", "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==",
"dev": true, "dev": true,
"peer": true,
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^18.18.0 || >=20.0.0"
}, },
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
@@ -1239,96 +1230,13 @@
} }
}, },
"node_modules/@typescript-eslint/typescript-estree": { "node_modules/@typescript-eslint/typescript-estree": {
"version": "6.1.0", "version": "7.3.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.1.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz",
"integrity": "sha512-nUKAPWOaP/tQjU1IQw9sOPCDavs/iU5iYLiY/6u7gxS7oKQoi4aUxXS1nrrVGTyBBaGesjkcwwHkbkiD5eBvcg==", "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==",
"dev": true,
"peer": true,
"dependencies": {
"@typescript-eslint/types": "6.1.0",
"@typescript-eslint/visitor-keys": "6.1.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
"semver": "^7.5.4",
"ts-api-utils": "^1.0.1"
},
"engines": {
"node": "^16.0.0 || >=18.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
}
},
"node_modules/@typescript-eslint/utils": {
"version": "6.19.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.0.tgz",
"integrity": "sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/types": "7.3.1",
"@types/json-schema": "^7.0.12", "@typescript-eslint/visitor-keys": "7.3.1",
"@types/semver": "^7.5.0",
"@typescript-eslint/scope-manager": "6.19.0",
"@typescript-eslint/types": "6.19.0",
"@typescript-eslint/typescript-estree": "6.19.0",
"semver": "^7.5.4"
},
"engines": {
"node": "^16.0.0 || >=18.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
"eslint": "^7.0.0 || ^8.0.0"
}
},
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
"version": "6.19.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.0.tgz",
"integrity": "sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "6.19.0",
"@typescript-eslint/visitor-keys": "6.19.0"
},
"engines": {
"node": "^16.0.0 || >=18.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
}
},
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": {
"version": "6.19.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.0.tgz",
"integrity": "sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==",
"dev": true,
"engines": {
"node": "^16.0.0 || >=18.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
}
},
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
"version": "6.19.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.0.tgz",
"integrity": "sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "6.19.0",
"@typescript-eslint/visitor-keys": "6.19.0",
"debug": "^4.3.4", "debug": "^4.3.4",
"globby": "^11.1.0", "globby": "^11.1.0",
"is-glob": "^4.0.3", "is-glob": "^4.0.3",
@@ -1337,7 +1245,7 @@
"ts-api-utils": "^1.0.1" "ts-api-utils": "^1.0.1"
}, },
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^18.18.0 || >=20.0.0"
}, },
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
@@ -1349,24 +1257,7 @@
} }
} }
}, },
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
"version": "6.19.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.0.tgz",
"integrity": "sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "6.19.0",
"eslint-visitor-keys": "^3.4.1"
},
"engines": {
"node": "^16.0.0 || >=18.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
}
},
"node_modules/@typescript-eslint/utils/node_modules/brace-expansion": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
@@ -1375,7 +1266,7 @@
"balanced-match": "^1.0.0" "balanced-match": "^1.0.0"
} }
}, },
"node_modules/@typescript-eslint/utils/node_modules/minimatch": { "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
"version": "9.0.3", "version": "9.0.3",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
"integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
@@ -1390,18 +1281,42 @@
"url": "https://github.com/sponsors/isaacs" "url": "https://github.com/sponsors/isaacs"
} }
}, },
"node_modules/@typescript-eslint/visitor-keys": { "node_modules/@typescript-eslint/utils": {
"version": "6.1.0", "version": "7.3.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.1.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.3.1.tgz",
"integrity": "sha512-yQeh+EXhquh119Eis4k0kYhj9vmFzNpbhM3LftWQVwqVjipCkwHBQOZutcYW+JVkjtTG9k8nrZU1UoNedPDd1A==", "integrity": "sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.1.0", "@eslint-community/eslint-utils": "^4.4.0",
"@types/json-schema": "^7.0.12",
"@types/semver": "^7.5.0",
"@typescript-eslint/scope-manager": "7.3.1",
"@typescript-eslint/types": "7.3.1",
"@typescript-eslint/typescript-estree": "7.3.1",
"semver": "^7.5.4"
},
"engines": {
"node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
"eslint": "^8.56.0"
}
},
"node_modules/@typescript-eslint/visitor-keys": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz",
"integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "7.3.1",
"eslint-visitor-keys": "^3.4.1" "eslint-visitor-keys": "^3.4.1"
}, },
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^18.18.0 || >=20.0.0"
}, },
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
@@ -4464,9 +4379,9 @@
"dev": true "dev": true
}, },
"node_modules/fast-glob": { "node_modules/fast-glob": {
"version": "3.3.1", "version": "3.3.2",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
"integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.stat": "^2.0.2",
@@ -6717,9 +6632,9 @@
} }
}, },
"node_modules/ip": { "node_modules/ip": {
"version": "1.1.8", "version": "1.1.9",
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz",
"integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==",
"dev": true "dev": true
}, },
"node_modules/is-absolute": { "node_modules/is-absolute": {
@@ -10256,9 +10171,9 @@
} }
}, },
"node_modules/socks/node_modules/ip": { "node_modules/socks/node_modules/ip": {
"version": "2.0.0", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz",
"integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==",
"dev": true "dev": true
}, },
"node_modules/source-map": { "node_modules/source-map": {
@@ -10954,12 +10869,12 @@
} }
}, },
"node_modules/ts-api-utils": { "node_modules/ts-api-utils": {
"version": "1.0.1", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
"integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">=16.13.0" "node": ">=16"
}, },
"peerDependencies": { "peerDependencies": {
"typescript": ">=4.2.0" "typescript": ">=4.2.0"
@@ -11017,9 +10932,9 @@
"dev": true "dev": true
}, },
"node_modules/typescript": { "node_modules/typescript": {
"version": "5.4.2", "version": "5.4.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz",
"integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==",
"dev": true, "dev": true,
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",

View File

@@ -102,7 +102,7 @@
"@hyperjump/json-schema": "^1.5.0", "@hyperjump/json-schema": "^1.5.0",
"@microsoft/api-documenter": "^7.22.4", "@microsoft/api-documenter": "^7.22.4",
"@microsoft/api-extractor": "^7.29.5", "@microsoft/api-extractor": "^7.29.5",
"@typescript-eslint/eslint-plugin": "^6.1.0", "@typescript-eslint/eslint-plugin": "^7.3.1",
"async-done": "^2.0.0", "async-done": "^2.0.0",
"chai": "^4.2.0", "chai": "^4.2.0",
"concurrently": "^8.0.1", "concurrently": "^8.0.1",

View File

@@ -81,7 +81,7 @@ def main():
for line in infile: for line in infile:
if line.startswith('///'): if line.startswith('///'):
if description: if description:
description = description + ' ' + line[3:].strip() description += ' ' + line[3:].strip()
else: else:
description = line[3:].strip() description = line[3:].strip()
else: else:

View File

@@ -45,7 +45,7 @@
// The name that the export had before this version. // The name that the export had before this version.
// All of the properties on this object are optional. // All of the properties on this object are optional.
'oldExportName': { 'oldExportName': {
// The new module that the export is in in this version. If // The new module that the export is in this version. If
// this is not provided, the newModule is assumed to be the // this is not provided, the newModule is assumed to be the
// parent module's newPath. // parent module's newPath.
newModule: 'new.module.name', newModule: 'new.module.name',

View File

@@ -513,7 +513,7 @@ function mathModes(values) {
} }
for (var j = 0; j < counts.length; j++) { for (var j = 0; j < counts.length; j++) {
if (counts[j][1] === maxCount) { if (counts[j][1] === maxCount) {
modes.push(counts[j][0]); modes.push(counts[j][0]);
} }
} }
return modes; return modes;
@@ -527,7 +527,7 @@ function mathStandardDeviation(numbers) {
for (var j = 0; j < n; j++) { for (var j = 0; j < n; j++) {
variance += Math.pow(numbers[j] - mean, 2); variance += Math.pow(numbers[j] - mean, 2);
} }
variance = variance / n; variance /= n;
return Math.sqrt(variance); return Math.sqrt(variance);
} }

View File

@@ -154,7 +154,7 @@ dartGenerator.forBlock['unittest_adjustindex'] = function(block) {
return [Number(index) + 1, dartGenerator.ORDER_ATOMIC]; return [Number(index) + 1, dartGenerator.ORDER_ATOMIC];
} else { } else {
// If the index is dynamic, adjust it in code. // If the index is dynamic, adjust it in code.
index = index + ' + 1'; index += ' + 1';
} }
} else if (Blockly.utils.string.isNumber(index)) { } else if (Blockly.utils.string.isNumber(index)) {
return [index, dartGenerator.ORDER_ATOMIC]; return [index, dartGenerator.ORDER_ATOMIC];

View File

@@ -158,7 +158,7 @@ javascriptGenerator.forBlock['unittest_adjustindex'] = function(block) {
return [Number(index) + 1, javascriptGenerator.ORDER_ATOMIC]; return [Number(index) + 1, javascriptGenerator.ORDER_ATOMIC];
} else { } else {
// If the index is dynamic, adjust it in code. // If the index is dynamic, adjust it in code.
index = index + ' + 1'; index += ' + 1';
} }
} else if (Blockly.utils.string.isNumber(index)) { } else if (Blockly.utils.string.isNumber(index)) {
return [index, javascriptGenerator.ORDER_ATOMIC]; return [index, javascriptGenerator.ORDER_ATOMIC];

View File

@@ -145,7 +145,7 @@ phpGenerator.forBlock['unittest_adjustindex'] = function(block) {
return [Number(index) + 1, phpGenerator.ORDER_ATOMIC]; return [Number(index) + 1, phpGenerator.ORDER_ATOMIC];
} else { } else {
// If the index is dynamic, adjust it in code. // If the index is dynamic, adjust it in code.
index = index + ' + 1'; index += ' + 1';
} }
} else if (Blockly.utils.string.isNumber(index)) { } else if (Blockly.utils.string.isNumber(index)) {
return [index, phpGenerator.ORDER_ATOMIC]; return [index, phpGenerator.ORDER_ATOMIC];

View File

@@ -129,7 +129,7 @@ pythonGenerator.forBlock['unittest_adjustindex'] = function(block) {
return [Number(index) + 1, pythonGenerator.ORDER_ATOMIC]; return [Number(index) + 1, pythonGenerator.ORDER_ATOMIC];
} else { } else {
// If the index is dynamic, adjust it in code. // If the index is dynamic, adjust it in code.
index = index + ' + 1'; index += ' + 1';
} }
} else if (Blockly.utils.string.isNumber(index)) { } else if (Blockly.utils.string.isNumber(index)) {
return [index, pythonGenerator.ORDER_ATOMIC]; return [index, pythonGenerator.ORDER_ATOMIC];

View File

@@ -47,6 +47,15 @@ suite('Registry', function () {
test('Overwrite a Key', function () { test('Overwrite a Key', function () {
Blockly.registry.register('test', 'test_name', TestClass); Blockly.registry.register('test', 'test_name', TestClass);
chai.assert.throws(function () { chai.assert.throws(function () {
// Registers a different object under the same name
Blockly.registry.register('test', 'test_name', {});
}, 'already registered');
});
test('Register a Duplicate Item', function () {
Blockly.registry.register('test', 'test_name', TestClass);
chai.assert.doesNotThrow(function () {
// Registering the same object under the same name is allowed
Blockly.registry.register('test', 'test_name', TestClass); Blockly.registry.register('test', 'test_name', TestClass);
}, 'already registered'); }, 'already registered');
}); });

View File

@@ -68,7 +68,7 @@ export const COMPRESSED = compressed();
* *
* When loading in uncompressed mode, if scriptExports is a simple * When loading in uncompressed mode, if scriptExports is a simple
* variable name (e.g. 'Blockly') then globalThis[scriptExports] will * variable name (e.g. 'Blockly') then globalThis[scriptExports] will
* be set to the the chunk's Module object. This attempts to provide * be set to the chunk's Module object. This attempts to provide
* backward compatibility with loading the compressed chunk as a * backward compatibility with loading the compressed chunk as a
* script, where this is done by the compressed chunk's UMD wrapper. * script, where this is done by the compressed chunk's UMD wrapper.
* The compatibility is not complete, however: since Module objects * The compatibility is not complete, however: since Module objects