feat(build)!: Introduce exports section in package.json (#7822)

* fix(typings): Remove bogus .d.ts files; add new languages
  
  PR #3821 added .d.ts files for every file in msg/json/, but several
  of these are internal utility files rather than translations, and
  do not result in a langfile being output by create_messages.py
  when building langfiles.
  
  In the meantime we have added a few new languages that are being
  published but which have (until now) not had the corresponding
  type declarations.
  
* feat(build)!: Add exports section to package.json
  
  Add an exports stanza to package.json, enumerating existing
  entrypoints in a new format.
  
  - The original main entrypoint, index.js, is removed since the
    exports section can point directly at node.js or browser.js.
  - No change made (yet) to other entrypoints (core, blocks,
    generators); these will be dealt with in a subsequent PR.
  - The msg/en entrypoint is included in the top-level package.json
    as an example; entries for all other languages created as part
    of the packageJSON package task.
  
  BREAKING CHANGE: The introduction of an exports stanza means that
  correctly-behaved tools (node.js, bundlers like webpack, etc.)
  will only allow importing of the specified entrypoints.  Here
  is the full list of permitted entrypoints that can be imported
  or required:
  
  - blockly
  - blockly/core
  - blockly/blocks
  - blockly/dart
  - blockly/lua
  - blockly/javascript
  - blockly/php
  - blockly/python
  - blockly/msg/<lang>, for all supported language codes <lang>
    (e.g blockly/msg/en, blockly/msg/fr, blockly/msg/de, etc.)
  
  If you previously impored any other paths from the blockly package
  you will need to update your imports.  Here are the most common
  paths that may have been used, and their correct replacements:
  
  | If you previously imported:      | Import instead:            |
  | -------------------------------- | -------------------------- |
  | blockly/index.js                 | blockly                    |
  | blockly/node.js                  | blockly                    |
  | blockly/browser.js               | blockly                    |
  | blockly/blockly.min | This file should only be loaded as a <script>. |
  | blockly/core.js                  | blockly/core               |
  | blockly/core-browser.js          | blockly/core               |
  | blockly/blockly_compressed.js    | blockly/core               |
  | blockly/blocks.js                | blockly/blocks             |
  | blockly/blocks_compressed.js     | blockly/blocks             |
  | blockly/dart.js                  | blockly/dart               |
  | blockly/dart_compressed.js       | blockly/dart               |
  | blockly/lua.js                   | blockly/lua                |
  | blockly/lua_compressed.js        | blockly/lua                |
  | blockly/javascript.js            | blockly/javascript         |
  | blockly/javascript_compressed.js | blockly/javascript         |
  | blockly/php.js                   | blockly/php                |
  | blockly/php_compressed.js        | blockly/php                |
  | blockly/python.js                | blockly/python             |
  | blockly/python_compressed.js     | blockly/python             |
  | blockly/msg/en.js                | blockly/msg/en             |
  
* fix(build): Use package-paths (blockly/*) in wrapper imports
  
  Use 'blockly/core' instead of './core' when importing core into
  other wrappers (and similarly for other entries in package.json
  exports stanza), so that (e.g.) dist/javascript.js won't
  import dist/core.js (the node.js version that loads jsdom) when
  being loaded in a browser environment.
  
  This fixes an issue where blockly attempts to load jsdom even
  in browser environments because the browser stanza in
  package.json, which caused attempts to load core.js to load
  core-browser.js instead in browser environments, was removed
  in a previous commit.
  
* refactor(build): Remove unnecessray wrappers
  
  Remove pointless wrapper modules that no longer server any
  purpose; use exports stanza in package.json to point directly to
  compiled chunks where possible.
  
* refactor(build)!: Eliminate separate browser and node entrypoints
  
  Combine scripts/package/browser/index.js (becomes dist/browser.js)
  and scripts/package/node/index.js (becomes dist/node.js) into
  a single environment-agnostic index.js.
  
  BREAKING CHANGE: Historically, importing the main 'blockly' package
  would import 'blockly/core', 'blockly/blocks', 'blockly/en' and
  'blockly/javascript' - and additionally, in node.js, also import
  'blockly/dart', 'blockly/lua', 'blockly/php' and 'blockly/python'.
  
  Now the main 'blockly' package entrypoint never loads any of the
  generator modules.
  
  This change has been made because of changes to generator exports
  made in blockly v9.0.0 that make necessary to always separately
  import generator modules.
  
  Note that this change does not affect loading the blockly package
  via <script src="https://unpkg.com/blockly"; that continues to
  load to blockly.min.js, which includes javascript_compressed.js
  and (due to being loaded as a script) makes it available via
  Blockly.JavaScript.
  
* refactor(build): Simplify core entrypoint wrapper for node.js
  
  Move scripts/package/node/core.js to scripts/package/core-node.js,
  and have it packaged as dist/core-node.js rather than dist/core.js
  - without a UMD wrapper, since it will always be loaded as a CJS
  module.
  
* chore(build): Remove disused packageCommonJS helper
  
* refactor(build): Use subpath pattern (wildcard) for msg/* exports
  
  Use a subpath pattern (wildcard) for the msg/* entrypoints,
  obviating the need for special handling in packageJSON.
  
* fix(tests): Fix node tests
  
  run_node_test.js previously directly require()d the dist/blockly.js
  and dist/javascript.js wrapper module, which no longer exist.
  
  Change it to require('blockly-test') (and …blockly-test/javascript)
  and create a symlink ./node_modules/blocky-test -> dist/ to satisfy
  this.
  
* fix(build): Add types: and default: entries to exports['./core']
  
  In the 'blockly/core' export:
  
  - Replace the browser: entrypoint with a default: one.
  - Add a types: entrypoint for core.
This commit is contained in:
Christopher Allen
2024-03-15 23:09:41 +01:00
committed by GitHub
parent 8fc439f090
commit c97b13632c
27 changed files with 181 additions and 865 deletions

View File

@@ -54,14 +54,45 @@
"test:compile:advanced": "gulp buildAdvancedCompilationTest --debug",
"updateGithubPages": "npm ci && gulp gitUpdateGithubPages"
},
"main": "./index.js",
"umd": "./blockly.min.js",
"unpkg": "./blockly.min.js",
"types": "./index.d.ts",
"browser": {
"./node.js": "./browser.js",
"./core.js": "./core-browser.js",
"./blockly-node.js": "./blockly.js"
"exports": {
".": {
"types": "./index.d.ts",
"umd": "./blockly.min.js",
"default": "./index.js"
},
"./core": {
"types": "./core.d.ts",
"node": "./core-node.js",
"default": "./blockly_compressed.js"
},
"./blocks": {
"types": "./blocks.d.ts",
"default": "./blocks_compressed.js"
},
"./dart": {
"types": "./dart.d.ts",
"default": "./dart_compressed.js"
},
"./lua": {
"types": "./lua.d.ts",
"default": "./lua_compressed.js"
},
"./javascript": {
"types": "./javascript.d.ts",
"default": "./javascript_compressed.js"
},
"./php": {
"types": "./php.d.ts",
"default": "./php_compressed.js"
},
"./python": {
"types": "./python.d.ts",
"default": "./python_compressed.js"
},
"./msg/*": {
"types": "./msg/*.d.ts",
"default": "./msg/*.js"
}
},
"license": "Apache-2.0",
"devDependencies": {

View File

@@ -23,7 +23,7 @@ const closureCompiler = require('google-closure-compiler').gulp();
const argv = require('yargs').argv;
const {rimraf} = require('rimraf');
const {BUILD_DIR, RELEASE_DIR, TSC_OUTPUT_DIR, TYPINGS_BUILD_DIR} = require('./config');
const {BUILD_DIR, LANG_BUILD_DIR, RELEASE_DIR, TSC_OUTPUT_DIR, TYPINGS_BUILD_DIR} = require('./config');
const {getPackageJson} = require('./helper_tasks');
const {posixPath, quote} = require('../helpers');
@@ -350,8 +350,7 @@ this removal!
*/
function buildLangfiles(done) {
// Create output directory.
const outputDir = path.join(BUILD_DIR, 'msg');
fs.mkdirSync(outputDir, {recursive: true});
fs.mkdirSync(LANG_BUILD_DIR, {recursive: true});
// Run create_messages.py.
let json_files = fs.readdirSync(path.join('msg', 'json'));
@@ -364,7 +363,7 @@ function buildLangfiles(done) {
--source_synonym_file ${path.join('msg', 'json', 'synonyms.json')} \
--source_constants_file ${path.join('msg', 'json', 'constants.json')} \
--key_file ${path.join('msg', 'json', 'keys.json')} \
--output_dir ${outputDir} \
--output_dir ${LANG_BUILD_DIR} \
--quiet ${json_files.join(' ')}`;
execSync(createMessagesCmd, {stdio: 'inherit'});

View File

@@ -26,6 +26,9 @@ exports.BUILD_DIR = 'build';
// Directory to write typings output to.
exports.TYPINGS_BUILD_DIR = path.join(exports.BUILD_DIR, 'declarations');
// Directory to write langfile output to.
exports.LANG_BUILD_DIR = path.join(exports.BUILD_DIR, 'msg');
// Directory where typescript compiler output can be found.
// Matches the value in tsconfig.json: outDir
exports.TSC_OUTPUT_DIR = path.join(exports.BUILD_DIR, 'src');

View File

@@ -21,7 +21,7 @@ const fs = require('fs');
const {rimraf} = require('rimraf');
const build = require('./build_tasks');
const {getPackageJson} = require('./helper_tasks');
const {BUILD_DIR, RELEASE_DIR, TYPINGS_BUILD_DIR} = require('./config');
const {BUILD_DIR, LANG_BUILD_DIR, RELEASE_DIR, TYPINGS_BUILD_DIR} = require('./config');
// Path to template files for gulp-umd.
const TEMPLATE_DIR = 'scripts/package/templates';
@@ -40,244 +40,54 @@ function packageUMD(namespace, dependencies, template = 'umd.template') {
});
};
/**
* A helper method for wrapping a file into a CommonJS module for Node.js.
* @param {string} namespace The export namespace.
* @param {Array<Object>} dependencies An array of dependencies to inject.
*/
function packageCommonJS(namespace, dependencies) {
return gulp.umd({
dependencies: function () { return dependencies; },
namespace: function () { return namespace; },
exports: function () { return namespace; },
template: path.join(TEMPLATE_DIR, 'node.template')
});
};
/**
* This task wraps scripts/package/blockly.js into a UMD module.
* @example import 'blockly/blockly';
*/
function packageBlockly() {
return gulp.src('scripts/package/blockly.js')
.pipe(packageUMD('Blockly', [{
name: 'Blockly',
amd: './blockly_compressed',
cjs: './blockly_compressed',
}]))
.pipe(gulp.rename('blockly.js'))
.pipe(gulp.dest(RELEASE_DIR));
};
/**
* This task wraps scripts/package/blocks.js into a UMD module.
* @example import 'blockly/blocks';
*/
function packageBlocks() {
return gulp.src('scripts/package/blocks.js')
.pipe(packageUMD('BlocklyBlocks', [{
name: 'BlocklyBlocks',
amd: './blocks_compressed',
cjs: './blocks_compressed',
}]))
.pipe(gulp.rename('blocks.js'))
.pipe(gulp.dest(RELEASE_DIR));
};
/**
* This task wraps scripts/package/index.js into a UMD module.
* We implicitly require the Node entry point in CommonJS environments,
* and the Browser entry point for AMD environments.
* @example import * as Blockly from 'blockly';
*
* This module is the main entrypoint for the blockly package, and
* loads blockly/core, blockly/blocks and blockly/msg/en and then
* calls setLocale(en).
*/
function packageIndex() {
return gulp.src('scripts/package/index.js')
.pipe(packageUMD('Blockly', [{
name: 'Blockly',
amd: './browser',
cjs: './node',
amd: 'blockly/core',
cjs: 'blockly/core',
},{
name: 'en',
amd: 'blockly/msg/en',
cjs: 'blockly/msg/en',
global: 'Blockly.Msg',
},{
name: 'blocks',
amd: 'blockly/blocks',
cjs: 'blockly/blocks',
global: 'Blockly.Blocks',
}]))
.pipe(gulp.rename('index.js'))
.pipe(gulp.dest(RELEASE_DIR));
};
/**
* This task wraps scripts/package/browser/index.js into a UMD module.
* By default, the module includes Blockly core and built-in blocks,
* as well as the JavaScript code generator and the English block
* localization files.
* This module is configured (in package.json) to replaces the module
* built by package-node in browser environments.
* @example import * as Blockly from 'blockly/browser';
* This task copies scripts/package/core-node.js into into the
* package. This module will be the 'blockly/core' entrypoint for
* node.js environments.
*
* Note that, unlike index.js, this file does not get a UMD wrapper.
* This is because it is only used in node.js environments and so is
* guaranteed to be loaded as a CJS module.
*/
function packageBrowser() {
return gulp.src('scripts/package/browser/index.js')
.pipe(packageUMD('Blockly', [{
name: 'Blockly',
amd: './core-browser',
cjs: './core-browser',
},{
name: 'En',
amd: './msg/en',
cjs: './msg/en',
},{
name: 'BlocklyBlocks',
amd: './blocks',
cjs: './blocks',
},{
name: 'BlocklyJS',
amd: './javascript',
cjs: './javascript',
}]))
.pipe(gulp.rename('browser.js'))
function packageCoreNode() {
return gulp.src('scripts/package/core-node.js')
.pipe(gulp.dest(RELEASE_DIR));
};
/**
* This task wraps scripts/package/browser/core.js into a UMD module.
* By default, the module includes the Blockly core package and a
* helper method to set the locale.
* This module is configured (in package.json) to replaces the module
* built by package-node-core in browser environments.
* @example import * as Blockly from 'blockly/core';
*/
function packageCore() {
return gulp.src('scripts/package/browser/core.js')
.pipe(packageUMD('Blockly', [{
name: 'Blockly',
amd: './blockly',
cjs: './blockly',
}]))
.pipe(gulp.rename('core-browser.js'))
.pipe(gulp.dest(RELEASE_DIR));
};
/**
* This task wraps scripts/package/node/index.js into a CommonJS module for Node.js.
* By default, the module includes Blockly core and built-in blocks,
* as well as all the code generators and the English block localization files.
* This module is configured (in package.json) to be replaced by the module
* built by package-browser in browser environments.
* @example import * as Blockly from 'blockly/node';
*/
function packageNode() {
return gulp.src('scripts/package/node/index.js')
.pipe(packageCommonJS('Blockly', [{
name: 'Blockly',
cjs: './core',
},{
name: 'En',
cjs: './msg/en',
},{
name: 'BlocklyBlocks',
cjs: './blocks',
},{
name: 'BlocklyJS',
cjs: './javascript',
},{
name: 'BlocklyPython',
cjs: './python',
},{
name: 'BlocklyPHP',
cjs: './php',
},{
name: 'BlocklyLua',
cjs: './lua',
}, {
name: 'BlocklyDart',
cjs: './dart',
}]))
.pipe(gulp.rename('node.js'))
.pipe(gulp.dest(RELEASE_DIR));
};
/**
* This task wraps scripts/package/node/core.js into a CommonJS module for Node.js.
* By default, the module includes the Blockly core package for Node.js
* and a helper method to set the locale.
* This module is configured (in package.json) to be replaced by the module
* built by package-core in browser environments.
* @example import * as Blockly from 'blockly/core';
*/
function packageNodeCore() {
return gulp.src('scripts/package/node/core.js')
.pipe(packageCommonJS('Blockly', [{
name: 'Blockly',
amd: './blockly',
cjs: './blockly',
}]))
.pipe(gulp.rename('core.js'))
.pipe(gulp.dest(RELEASE_DIR));
};
/**
* A helper method for wrapping a generator file into a UMD module.
* @param {string} file Source file name.
* @param {string} rename Destination file name.
* @param {string} namespace Export namespace.
*/
function packageGenerator(file, rename, namespace) {
return gulp.src(`scripts/package/${rename}`)
.pipe(packageUMD(`Blockly${namespace}`, [{
name: 'Blockly',
amd: './core',
cjs: './core',
}, {
name: `Blockly${namespace}`,
amd: `./${file}`,
cjs: `./${file}`,
}]))
.pipe(gulp.rename(rename))
.pipe(gulp.dest(RELEASE_DIR));
};
/**
* This task wraps javascript_compressed.js into a UMD module.
* @example import 'blockly/javascript';
*/
function packageJavascript() {
return packageGenerator('javascript_compressed.js', 'javascript.js', 'JavaScript');
};
/**
* This task wraps python_compressed.js into a UMD module.
* @example import 'blockly/python';
*/
function packagePython() {
return packageGenerator('python_compressed.js', 'python.js', 'Python');
};
/**
* This task wraps lua_compressed.js into a UMD module.
* @example import 'blockly/lua';
*/
function packageLua() {
return packageGenerator('lua_compressed.js', 'lua.js', 'Lua');
};
/**
* This task wraps dart_compressed.js into a UMD module.
* @example import 'blockly/dart';
*/
function packageDart() {
return packageGenerator('dart_compressed.js', 'dart.js', 'Dart');
};
/**
* This task wraps php_compressed.js into a UMD module.
* @example import 'blockly/php';
*/
function packagePHP() {
return packageGenerator('php_compressed.js', 'php.js', 'PHP');
};
/**
* This task wraps each of the files in ${BUILD_DIR/msg/ into a UMD module.
* @example import * as En from 'blockly/msg/en';
*/
function packageLocales() {
// Remove references to goog.provide and goog.require.
return gulp.src(`${BUILD_DIR}/msg/*.js`)
return gulp.src(`${LANG_BUILD_DIR}/*.js`)
.pipe(gulp.replace(/goog\.[^\n]+/g, ''))
.pipe(packageUMD('Blockly.Msg', [], 'umd-msg.template'))
.pipe(gulp.dest(`${RELEASE_DIR}/msg`));
@@ -310,12 +120,19 @@ function packageMedia() {
};
/**
* This task copies the package.json file into the release directory.
* This task copies the package.json file into the release directory,
* with modifications:
*
* - The scripts section is removed.
*
* Prerequisite: buildLangfiles.
*/
function packageJSON(cb) {
const packageJson = getPackageJson();
const json = Object.assign({}, packageJson);
// Copy package.json, so we can safely modify it.
const json = JSON.parse(JSON.stringify(getPackageJson()));
// Remove unwanted entries.
delete json['scripts'];
// Write resulting package.json file to release directory.
if (!fs.existsSync(RELEASE_DIR)) {
fs.mkdirSync(RELEASE_DIR, {recursive: true});
}
@@ -377,17 +194,7 @@ const package = gulp.series(
build.build,
gulp.parallel(
packageIndex,
packageBrowser,
packageNode,
packageCore,
packageNodeCore,
packageBlockly,
packageBlocks,
packageJavascript,
packagePython,
packageLua,
packageDart,
packagePHP,
packageCoreNode,
packageMedia,
gulp.series(packageLocales, packageUMDBundle),
packageJSON,

View File

@@ -1,9 +0,0 @@
/**
* @license
* Copyright 2020 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @fileoverview Blockly module; just a wrapper for blockly_compressed.js.
*/

View File

@@ -1,9 +0,0 @@
/**
* @license
* Copyright 2020 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @fileoverview Blockly blocks module; just a wrapper for blocks_compressed.js.
*/

View File

@@ -1,13 +0,0 @@
/**
* @license
* Copyright 2019 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @fileoverview Blockly core module for the browser. It includes blockly.js
* and adds a helper method for setting the locale.
*/
/* eslint-disable */
'use strict';

View File

@@ -1,17 +0,0 @@
/**
* @license
* Copyright 2019 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @fileoverview Blockly module for the browser. This includes Blockly core
* and built in blocks, the JavaScript code generator and the English block
* localization files.
*/
/* eslint-disable */
'use strict';
// Include the EN Locale by default.
Blockly.setLocale(En);

View File

@@ -0,0 +1,31 @@
/**
* @license
* Copyright 2019 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @file Blockly core module wrapper for node.js. This module loads
* blockly_compressed.js and jsdom, then calls
* Blockly.utils.xml.injectDependencies to supply needed XML-handling
* functions to Blocky.
*
* Note that, unlike index.js, this file does not get a UMD wrapper.
* This is because it is only used in node.js environments and so is
* guaranteed to be loaded as a CJS module.
*/
/* eslint-disable */
'use strict';
const Blockly = require('./blockly_compressed.js');
const {JSDOM} = require('jsdom');
// Override textToDomDocument and provide node.js alternatives to
// DOMParser and XMLSerializer.
if (typeof globalThis.document !== 'object') {
const {window} = new JSDOM(`<!DOCTYPE html>`);
Blockly.utils.xml.injectDependencies(window);
}
module.exports = Blockly;

View File

@@ -1,9 +0,0 @@
/**
* @license
* Copyright 2020 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @fileoverview Dart generator module; just a wrapper for dart_compressed.js.
*/

View File

@@ -5,7 +5,19 @@
*/
/**
* @fileoverview Blockly module; this is a wrapper which selects
* either browser.js or node.js, depending on which environment we
* are running in.
* @file Main entrypoint for blockly package. Via its UMD wrapper,
* this module loads blockly/core, blockly/blocks and blockly/msg/en
* and then calls setLocale(en).
*
* This entrypoint previously also loaded one or more generators
* (JavaScript in browser, all five in node.js environments) but it no
* longer makes sense to do so because of changes to generators
* exports (they no longer have the side effect of defining
* Blockly.JavaScript, etc., when loaded as modules).
*/
/* eslint-disable */
'use strict';
// Include the EN Locale by default.
Blockly.setLocale(en);

View File

@@ -1,10 +0,0 @@
/**
* @license
* Copyright 2020 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @fileoverview JavaScript Generator module; just a wrapper for
* javascript_compressed.js.
*/

View File

@@ -1,9 +0,0 @@
/**
* @license
* Copyright 2020 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @fileoverview Lua generator module; just a wrapper for lua_compressed.js.
*/

View File

@@ -1,21 +0,0 @@
/**
* @license
* Copyright 2019 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @fileoverview Blockly core module for Node. It includes blockly-node.js
* and adds a helper method for setting the locale.
*/
/* eslint-disable */
'use strict';
// Override textToDomDocument and provide Node.js alternatives to DOMParser and
// XMLSerializer.
if (typeof globalThis.document !== 'object') {
const {JSDOM} = require('jsdom');
const {window} = new JSDOM(`<!DOCTYPE html>`);
Blockly.utils.xml.injectDependencies(window);
}

View File

@@ -1,16 +0,0 @@
/**
* @license
* Copyright 2019 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @fileoverview Blockly module for Node. It includes Blockly core,
* built-in blocks, all the generators and the English locale.
*/
/* eslint-disable */
'use strict';
// Include the EN Locale by default.
Blockly.setLocale(En);

View File

@@ -1,9 +0,0 @@
/**
* @license
* Copyright 2020 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @fileoverview PHP generator module; just a wrapper for php_compressed.js.
*/

View File

@@ -1,10 +0,0 @@
/**
* @license
* Copyright 2020 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @fileoverview Python generator module; just a wrapper for
* python_compressed.js.
*/

1
tests/node/node_modules/blockly-test generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../../../dist

View File

@@ -4,13 +4,27 @@
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @fileoverview Mocha tests that test Blockly in Node.
*/
/** @fileoverview Mocha tests that test Blockly in Node. */
console.log(process.cwd());
// N.B. the file ./node_modules/blockly-test should be a symlink to
// RELEASE_DIR (i.e. dist/) so that require will load the packaged
// version of blockly as if it were an external dependency.
//
// Moreover, (as with the typescript tests) this link has to be
// called something other than "blockly", because the node module
// resolution will favour loading the nearest enclosing package
// of the same name, which means that require('blockly') will load
// based on the exports section of the package.json in the repository
// root, but this fails because (at the time of writing) those paths
// are relative to RELEASE_DIR (dist/, into which package.json is
// copied when packaged), resulting in require() looking for the
// compressed bundles in the wrong place.
const assert = require('chai').assert;
const Blockly = require('../../dist/');
const {javascriptGenerator} = require('../../dist/javascript');
const Blockly = require('blockly-test');
const {javascriptGenerator} = require('blockly-test/javascript');
const xmlText =
'<xml xmlns="https://developers.google.com/blockly/xml">\n' +

8
typings/msg/ce.d.ts vendored Normal file
View File

@@ -0,0 +1,8 @@
/**
* @license
* Copyright 2023 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
export * from './msg';

View File

@@ -1,14 +0,0 @@
/**
* @license
* Copyright 2020 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* Type definitions for the Blockly constants locale.
*/
/// <reference path="msg.d.ts" />
import BlocklyMsg = Blockly.Msg;
export = BlocklyMsg;

8
typings/msg/dtp.d.ts vendored Normal file
View File

@@ -0,0 +1,8 @@
/**
* @license
* Copyright 2023 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
export * from './msg';

8
typings/msg/hsb.d.ts vendored Normal file
View File

@@ -0,0 +1,8 @@
/**
* @license
* Copyright 2023 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
export * from './msg';

440
typings/msg/msg.d.ts vendored
View File

@@ -1,440 +0,0 @@
/**
* @license
* Copyright 2019 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* Type definitions for Blockly Messages.
*/
export const ADD_COMMENT: string;
export const CANNOT_DELETE_VARIABLE_PROCEDURE: string;
export const CHANGE_VALUE_TITLE: string;
export const CLEAN_UP: string;
export const COLLAPSED_WARNINGS_WARNING: string;
export const COLLAPSE_ALL: string;
export const COLLAPSE_BLOCK: string;
export const COLOUR_BLEND_COLOUR1: string;
export const COLOUR_BLEND_COLOUR2: string;
export const COLOUR_BLEND_HELPURL: string;
export const COLOUR_BLEND_RATIO: string;
export const COLOUR_BLEND_TITLE: string;
export const COLOUR_BLEND_TOOLTIP: string;
export const COLOUR_HUE: string;
export const COLOUR_PICKER_HELPURL: string;
export const COLOUR_PICKER_TOOLTIP: string;
export const COLOUR_RANDOM_HELPURL: string;
export const COLOUR_RANDOM_TITLE: string;
export const COLOUR_RANDOM_TOOLTIP: string;
export const COLOUR_RGB_BLUE: string;
export const COLOUR_RGB_GREEN: string;
export const COLOUR_RGB_HELPURL: string;
export const COLOUR_RGB_RED: string;
export const COLOUR_RGB_TITLE: string;
export const COLOUR_RGB_TOOLTIP: string;
export const CONTROLS_FLOW_STATEMENTS_HELPURL: string;
export const CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK: string;
export const CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE: string;
export const CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK: string;
export const CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE: string;
export const CONTROLS_FLOW_STATEMENTS_WARNING: string;
export const CONTROLS_FOREACH_HELPURL: string;
export const CONTROLS_FOREACH_INPUT_DO: string;
export const CONTROLS_FOREACH_TITLE: string;
export const CONTROLS_FOREACH_TOOLTIP: string;
export const CONTROLS_FOR_HELPURL: string;
export const CONTROLS_FOR_INPUT_DO: string;
export const CONTROLS_FOR_TITLE: string;
export const CONTROLS_FOR_TOOLTIP: string;
export const CONTROLS_IF_ELSEIF_TITLE_ELSEIF: string;
export const CONTROLS_IF_ELSEIF_TOOLTIP: string;
export const CONTROLS_IF_ELSE_TITLE_ELSE: string;
export const CONTROLS_IF_ELSE_TOOLTIP: string;
export const CONTROLS_IF_HELPURL: string;
export const CONTROLS_IF_IF_TITLE_IF: string;
export const CONTROLS_IF_IF_TOOLTIP: string;
export const CONTROLS_IF_MSG_ELSE: string;
export const CONTROLS_IF_MSG_ELSEIF: string;
export const CONTROLS_IF_MSG_IF: string;
export const CONTROLS_IF_MSG_THEN: string;
export const CONTROLS_IF_TOOLTIP_1: string;
export const CONTROLS_IF_TOOLTIP_2: string;
export const CONTROLS_IF_TOOLTIP_3: string;
export const CONTROLS_IF_TOOLTIP_4: string;
export const CONTROLS_REPEAT_HELPURL: string;
export const CONTROLS_REPEAT_INPUT_DO: string;
export const CONTROLS_REPEAT_TITLE: string;
export const CONTROLS_REPEAT_TOOLTIP: string;
export const CONTROLS_WHILEUNTIL_HELPURL: string;
export const CONTROLS_WHILEUNTIL_INPUT_DO: string;
export const CONTROLS_WHILEUNTIL_OPERATOR_UNTIL: string;
export const CONTROLS_WHILEUNTIL_OPERATOR_WHILE: string;
export const CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL: string;
export const CONTROLS_WHILEUNTIL_TOOLTIP_WHILE: string;
export const DELETE_ALL_BLOCKS: string;
export const DELETE_BLOCK: string;
export const DELETE_VARIABLE: string;
export const DELETE_VARIABLE_CONFIRMATION: string;
export const DELETE_X_BLOCKS: string;
export const DISABLE_BLOCK: string;
export const DUPLICATE_BLOCK: string;
export const DUPLICATE_COMMENT: string;
export const ENABLE_BLOCK: string;
export const EXPAND_ALL: string;
export const EXPAND_BLOCK: string;
export const EXTERNAL_INPUTS: string;
export const HELP: string;
export const INLINE_INPUTS: string;
export const IOS_CANCEL: string;
export const IOS_ERROR: string;
export const IOS_OK: string;
export const IOS_PROCEDURES_ADD_INPUT: string;
export const IOS_PROCEDURES_ALLOW_STATEMENTS: string;
export const IOS_PROCEDURES_DUPLICATE_INPUTS_ERROR: string;
export const IOS_PROCEDURES_INPUTS: string;
export const IOS_VARIABLES_ADD_BUTTON: string;
export const IOS_VARIABLES_ADD_VARIABLE: string;
export const IOS_VARIABLES_DELETE_BUTTON: string;
export const IOS_VARIABLES_EMPTY_NAME_ERROR: string;
export const IOS_VARIABLES_RENAME_BUTTON: string;
export const IOS_VARIABLES_VARIABLE_NAME: string;
export const LISTS_CREATE_EMPTY_HELPURL: string;
export const LISTS_CREATE_EMPTY_TITLE: string;
export const LISTS_CREATE_EMPTY_TOOLTIP: string;
export const LISTS_CREATE_WITH_CONTAINER_TITLE_ADD: string;
export const LISTS_CREATE_WITH_CONTAINER_TOOLTIP: string;
export const LISTS_CREATE_WITH_HELPURL: string;
export const LISTS_CREATE_WITH_INPUT_WITH: string;
export const LISTS_CREATE_WITH_ITEM_TITLE: string;
export const LISTS_CREATE_WITH_ITEM_TOOLTIP: string;
export const LISTS_CREATE_WITH_TOOLTIP: string;
export const LISTS_GET_INDEX_FIRST: string;
export const LISTS_GET_INDEX_FROM_END: string;
export const LISTS_GET_INDEX_FROM_START: string;
export const LISTS_GET_INDEX_GET: string;
export const LISTS_GET_INDEX_GET_REMOVE: string;
export const LISTS_GET_INDEX_HELPURL: string;
export const LISTS_GET_INDEX_INPUT_IN_LIST: string;
export const LISTS_GET_INDEX_LAST: string;
export const LISTS_GET_INDEX_RANDOM: string;
export const LISTS_GET_INDEX_REMOVE: string;
export const LISTS_GET_INDEX_TAIL: string;
export const LISTS_GET_INDEX_TOOLTIP_GET_FIRST: string;
export const LISTS_GET_INDEX_TOOLTIP_GET_FROM: string;
export const LISTS_GET_INDEX_TOOLTIP_GET_LAST: string;
export const LISTS_GET_INDEX_TOOLTIP_GET_RANDOM: string;
export const LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST: string;
export const LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM: string;
export const LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST: string;
export const LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM: string;
export const LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST: string;
export const LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM: string;
export const LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST: string;
export const LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM: string;
export const LISTS_GET_SUBLIST_END_FROM_END: string;
export const LISTS_GET_SUBLIST_END_FROM_START: string;
export const LISTS_GET_SUBLIST_END_LAST: string;
export const LISTS_GET_SUBLIST_HELPURL: string;
export const LISTS_GET_SUBLIST_INPUT_IN_LIST: string;
export const LISTS_GET_SUBLIST_START_FIRST: string;
export const LISTS_GET_SUBLIST_START_FROM_END: string;
export const LISTS_GET_SUBLIST_START_FROM_START: string;
export const LISTS_GET_SUBLIST_TAIL: string;
export const LISTS_GET_SUBLIST_TOOLTIP: string;
export const LISTS_HUE: string;
export const LISTS_INDEX_FROM_END_TOOLTIP: string;
export const LISTS_INDEX_FROM_START_TOOLTIP: string;
export const LISTS_INDEX_OF_FIRST: string;
export const LISTS_INDEX_OF_HELPURL: string;
export const LISTS_INDEX_OF_INPUT_IN_LIST: string;
export const LISTS_INDEX_OF_LAST: string;
export const LISTS_INDEX_OF_TOOLTIP: string;
export const LISTS_INLIST: string;
export const LISTS_ISEMPTY_HELPURL: string;
export const LISTS_ISEMPTY_TITLE: string;
export const LISTS_ISEMPTY_TOOLTIP: string;
export const LISTS_LENGTH_HELPURL: string;
export const LISTS_LENGTH_TITLE: string;
export const LISTS_LENGTH_TOOLTIP: string;
export const LISTS_REPEAT_HELPURL: string;
export const LISTS_REPEAT_TITLE: string;
export const LISTS_REPEAT_TOOLTIP: string;
export const LISTS_REVERSE_HELPURL: string;
export const LISTS_REVERSE_MESSAGE0: string;
export const LISTS_REVERSE_TOOLTIP: string;
export const LISTS_SET_INDEX_HELPURL: string;
export const LISTS_SET_INDEX_INPUT_IN_LIST: string;
export const LISTS_SET_INDEX_INPUT_TO: string;
export const LISTS_SET_INDEX_INSERT: string;
export const LISTS_SET_INDEX_SET: string;
export const LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST: string;
export const LISTS_SET_INDEX_TOOLTIP_INSERT_FROM: string;
export const LISTS_SET_INDEX_TOOLTIP_INSERT_LAST: string;
export const LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM: string;
export const LISTS_SET_INDEX_TOOLTIP_SET_FIRST: string;
export const LISTS_SET_INDEX_TOOLTIP_SET_FROM: string;
export const LISTS_SET_INDEX_TOOLTIP_SET_LAST: string;
export const LISTS_SET_INDEX_TOOLTIP_SET_RANDOM: string;
export const LISTS_SORT_HELPURL: string;
export const LISTS_SORT_ORDER_ASCENDING: string;
export const LISTS_SORT_ORDER_DESCENDING: string;
export const LISTS_SORT_TITLE: string;
export const LISTS_SORT_TOOLTIP: string;
export const LISTS_SORT_TYPE_IGNORECASE: string;
export const LISTS_SORT_TYPE_NUMERIC: string;
export const LISTS_SORT_TYPE_TEXT: string;
export const LISTS_SPLIT_HELPURL: string;
export const LISTS_SPLIT_LIST_FROM_TEXT: string;
export const LISTS_SPLIT_TEXT_FROM_LIST: string;
export const LISTS_SPLIT_TOOLTIP_JOIN: string;
export const LISTS_SPLIT_TOOLTIP_SPLIT: string;
export const LISTS_SPLIT_WITH_DELIMITER: string;
export const LOGIC_BOOLEAN_FALSE: string;
export const LOGIC_BOOLEAN_HELPURL: string;
export const LOGIC_BOOLEAN_TOOLTIP: string;
export const LOGIC_BOOLEAN_TRUE: string;
export const LOGIC_COMPARE_HELPURL: string;
export const LOGIC_COMPARE_TOOLTIP_EQ: string;
export const LOGIC_COMPARE_TOOLTIP_GT: string;
export const LOGIC_COMPARE_TOOLTIP_GTE: string;
export const LOGIC_COMPARE_TOOLTIP_LT: string;
export const LOGIC_COMPARE_TOOLTIP_LTE: string;
export const LOGIC_COMPARE_TOOLTIP_NEQ: string;
export const LOGIC_HUE: string;
export const LOGIC_NEGATE_HELPURL: string;
export const LOGIC_NEGATE_TITLE: string;
export const LOGIC_NEGATE_TOOLTIP: string;
export const LOGIC_NULL: string;
export const LOGIC_NULL_HELPURL: string;
export const LOGIC_NULL_TOOLTIP: string;
export const LOGIC_OPERATION_AND: string;
export const LOGIC_OPERATION_HELPURL: string;
export const LOGIC_OPERATION_OR: string;
export const LOGIC_OPERATION_TOOLTIP_AND: string;
export const LOGIC_OPERATION_TOOLTIP_OR: string;
export const LOGIC_TERNARY_CONDITION: string;
export const LOGIC_TERNARY_HELPURL: string;
export const LOGIC_TERNARY_IF_FALSE: string;
export const LOGIC_TERNARY_IF_TRUE: string;
export const LOGIC_TERNARY_TOOLTIP: string;
export const LOOPS_HUE: string;
export const MATH_ADDITION_SYMBOL: string;
export const MATH_ARITHMETIC_HELPURL: string;
export const MATH_ARITHMETIC_TOOLTIP_ADD: string;
export const MATH_ARITHMETIC_TOOLTIP_DIVIDE: string;
export const MATH_ARITHMETIC_TOOLTIP_MINUS: string;
export const MATH_ARITHMETIC_TOOLTIP_MULTIPLY: string;
export const MATH_ARITHMETIC_TOOLTIP_POWER: string;
export const MATH_ATAN2_HELPURL: string;
export const MATH_ATAN2_TITLE: string;
export const MATH_ATAN2_TOOLTIP: string;
export const MATH_CHANGE_HELPURL: string;
export const MATH_CHANGE_TITLE: string;
export const MATH_CHANGE_TITLE_ITEM: string;
export const MATH_CHANGE_TOOLTIP: string;
export const MATH_CONSTANT_HELPURL: string;
export const MATH_CONSTANT_TOOLTIP: string;
export const MATH_CONSTRAIN_HELPURL: string;
export const MATH_CONSTRAIN_TITLE: string;
export const MATH_CONSTRAIN_TOOLTIP: string;
export const MATH_DIVISION_SYMBOL: string;
export const MATH_HUE: string;
export const MATH_IS_DIVISIBLE_BY: string;
export const MATH_IS_EVEN: string;
export const MATH_IS_NEGATIVE: string;
export const MATH_IS_ODD: string;
export const MATH_IS_POSITIVE: string;
export const MATH_IS_PRIME: string;
export const MATH_IS_TOOLTIP: string;
export const MATH_IS_WHOLE: string;
export const MATH_MODULO_HELPURL: string;
export const MATH_MODULO_TITLE: string;
export const MATH_MODULO_TOOLTIP: string;
export const MATH_MULTIPLICATION_SYMBOL: string;
export const MATH_NUMBER_HELPURL: string;
export const MATH_NUMBER_TOOLTIP: string;
export const MATH_ONLIST_HELPURL: string;
export const MATH_ONLIST_OPERATOR_AVERAGE: string;
export const MATH_ONLIST_OPERATOR_MAX: string;
export const MATH_ONLIST_OPERATOR_MEDIAN: string;
export const MATH_ONLIST_OPERATOR_MIN: string;
export const MATH_ONLIST_OPERATOR_MODE: string;
export const MATH_ONLIST_OPERATOR_RANDOM: string;
export const MATH_ONLIST_OPERATOR_STD_DEV: string;
export const MATH_ONLIST_OPERATOR_SUM: string;
export const MATH_ONLIST_TOOLTIP_AVERAGE: string;
export const MATH_ONLIST_TOOLTIP_MAX: string;
export const MATH_ONLIST_TOOLTIP_MEDIAN: string;
export const MATH_ONLIST_TOOLTIP_MIN: string;
export const MATH_ONLIST_TOOLTIP_MODE: string;
export const MATH_ONLIST_TOOLTIP_RANDOM: string;
export const MATH_ONLIST_TOOLTIP_STD_DEV: string;
export const MATH_ONLIST_TOOLTIP_SUM: string;
export const MATH_POWER_SYMBOL: string;
export const MATH_RANDOM_FLOAT_HELPURL: string;
export const MATH_RANDOM_FLOAT_TITLE_RANDOM: string;
export const MATH_RANDOM_FLOAT_TOOLTIP: string;
export const MATH_RANDOM_INT_HELPURL: string;
export const MATH_RANDOM_INT_TITLE: string;
export const MATH_RANDOM_INT_TOOLTIP: string;
export const MATH_ROUND_HELPURL: string;
export const MATH_ROUND_OPERATOR_ROUND: string;
export const MATH_ROUND_OPERATOR_ROUNDDOWN: string;
export const MATH_ROUND_OPERATOR_ROUNDUP: string;
export const MATH_ROUND_TOOLTIP: string;
export const MATH_SINGLE_HELPURL: string;
export const MATH_SINGLE_OP_ABSOLUTE: string;
export const MATH_SINGLE_OP_ROOT: string;
export const MATH_SINGLE_TOOLTIP_ABS: string;
export const MATH_SINGLE_TOOLTIP_EXP: string;
export const MATH_SINGLE_TOOLTIP_LN: string;
export const MATH_SINGLE_TOOLTIP_LOG10: string;
export const MATH_SINGLE_TOOLTIP_NEG: string;
export const MATH_SINGLE_TOOLTIP_POW10: string;
export const MATH_SINGLE_TOOLTIP_ROOT: string;
export const MATH_SUBTRACTION_SYMBOL: string;
export const MATH_TRIG_ACOS: string;
export const MATH_TRIG_ASIN: string;
export const MATH_TRIG_ATAN: string;
export const MATH_TRIG_COS: string;
export const MATH_TRIG_HELPURL: string;
export const MATH_TRIG_SIN: string;
export const MATH_TRIG_TAN: string;
export const MATH_TRIG_TOOLTIP_ACOS: string;
export const MATH_TRIG_TOOLTIP_ASIN: string;
export const MATH_TRIG_TOOLTIP_ATAN: string;
export const MATH_TRIG_TOOLTIP_COS: string;
export const MATH_TRIG_TOOLTIP_SIN: string;
export const MATH_TRIG_TOOLTIP_TAN: string;
export const NEW_COLOUR_VARIABLE: string;
export const NEW_NUMBER_VARIABLE: string;
export const NEW_STRING_VARIABLE: string;
export const NEW_VARIABLE: string;
export const NEW_VARIABLE_TITLE: string;
export const NEW_VARIABLE_TYPE_TITLE: string;
export const ORDINAL_NUMBER_SUFFIX: string;
export const PROCEDURES_ALLOW_STATEMENTS: string;
export const PROCEDURES_BEFORE_PARAMS: string;
export const PROCEDURES_CALLNORETURN_HELPURL: string;
export const PROCEDURES_CALLNORETURN_TOOLTIP: string;
export const PROCEDURES_CALLRETURN_HELPURL: string;
export const PROCEDURES_CALLRETURN_TOOLTIP: string;
export const PROCEDURES_CALL_BEFORE_PARAMS: string;
export const PROCEDURES_CREATE_DO: string;
export const PROCEDURES_DEFNORETURN_COMMENT: string;
export const PROCEDURES_DEFNORETURN_DO: string;
export const PROCEDURES_DEFNORETURN_HELPURL: string;
export const PROCEDURES_DEFNORETURN_PROCEDURE: string;
export const PROCEDURES_DEFNORETURN_TITLE: string;
export const PROCEDURES_DEFNORETURN_TOOLTIP: string;
export const PROCEDURES_DEFRETURN_COMMENT: string;
export const PROCEDURES_DEFRETURN_DO: string;
export const PROCEDURES_DEFRETURN_HELPURL: string;
export const PROCEDURES_DEFRETURN_PROCEDURE: string;
export const PROCEDURES_DEFRETURN_RETURN: string;
export const PROCEDURES_DEFRETURN_TITLE: string;
export const PROCEDURES_DEFRETURN_TOOLTIP: string;
export const PROCEDURES_DEF_DUPLICATE_WARNING: string;
export const PROCEDURES_HIGHLIGHT_DEF: string;
export const PROCEDURES_HUE: string;
export const PROCEDURES_IFRETURN_HELPURL: string;
export const PROCEDURES_IFRETURN_TOOLTIP: string;
export const PROCEDURES_IFRETURN_WARNING: string;
export const PROCEDURES_MUTATORARG_TITLE: string;
export const PROCEDURES_MUTATORARG_TOOLTIP: string;
export const PROCEDURES_MUTATORCONTAINER_TITLE: string;
export const PROCEDURES_MUTATORCONTAINER_TOOLTIP: string;
export const REDO: string;
export const REMOVE_COMMENT: string;
export const RENAME_VARIABLE: string;
export const RENAME_VARIABLE_TITLE: string;
export const TEXTS_HUE: string;
export const TEXT_APPEND_HELPURL: string;
export const TEXT_APPEND_TITLE: string;
export const TEXT_APPEND_TOOLTIP: string;
export const TEXT_APPEND_VARIABLE: string;
export const TEXT_CHANGECASE_HELPURL: string;
export const TEXT_CHANGECASE_OPERATOR_LOWERCASE: string;
export const TEXT_CHANGECASE_OPERATOR_TITLECASE: string;
export const TEXT_CHANGECASE_OPERATOR_UPPERCASE: string;
export const TEXT_CHANGECASE_TOOLTIP: string;
export const TEXT_CHARAT_FIRST: string;
export const TEXT_CHARAT_FROM_END: string;
export const TEXT_CHARAT_FROM_START: string;
export const TEXT_CHARAT_HELPURL: string;
export const TEXT_CHARAT_LAST: string;
export const TEXT_CHARAT_RANDOM: string;
export const TEXT_CHARAT_TAIL: string;
export const TEXT_CHARAT_TITLE: string;
export const TEXT_CHARAT_TOOLTIP: string;
export const TEXT_COUNT_HELPURL: string;
export const TEXT_COUNT_MESSAGE0: string;
export const TEXT_COUNT_TOOLTIP: string;
export const TEXT_CREATE_JOIN_ITEM_TITLE_ITEM: string;
export const TEXT_CREATE_JOIN_ITEM_TOOLTIP: string;
export const TEXT_CREATE_JOIN_TITLE_JOIN: string;
export const TEXT_CREATE_JOIN_TOOLTIP: string;
export const TEXT_GET_SUBSTRING_END_FROM_END: string;
export const TEXT_GET_SUBSTRING_END_FROM_START: string;
export const TEXT_GET_SUBSTRING_END_LAST: string;
export const TEXT_GET_SUBSTRING_HELPURL: string;
export const TEXT_GET_SUBSTRING_INPUT_IN_TEXT: string;
export const TEXT_GET_SUBSTRING_START_FIRST: string;
export const TEXT_GET_SUBSTRING_START_FROM_END: string;
export const TEXT_GET_SUBSTRING_START_FROM_START: string;
export const TEXT_GET_SUBSTRING_TAIL: string;
export const TEXT_GET_SUBSTRING_TOOLTIP: string;
export const TEXT_INDEXOF_HELPURL: string;
export const TEXT_INDEXOF_OPERATOR_FIRST: string;
export const TEXT_INDEXOF_OPERATOR_LAST: string;
export const TEXT_INDEXOF_TITLE: string;
export const TEXT_INDEXOF_TOOLTIP: string;
export const TEXT_ISEMPTY_HELPURL: string;
export const TEXT_ISEMPTY_TITLE: string;
export const TEXT_ISEMPTY_TOOLTIP: string;
export const TEXT_JOIN_HELPURL: string;
export const TEXT_JOIN_TITLE_CREATEWITH: string;
export const TEXT_JOIN_TOOLTIP: string;
export const TEXT_LENGTH_HELPURL: string;
export const TEXT_LENGTH_TITLE: string;
export const TEXT_LENGTH_TOOLTIP: string;
export const TEXT_PRINT_HELPURL: string;
export const TEXT_PRINT_TITLE: string;
export const TEXT_PRINT_TOOLTIP: string;
export const TEXT_PROMPT_HELPURL: string;
export const TEXT_PROMPT_TOOLTIP_NUMBER: string;
export const TEXT_PROMPT_TOOLTIP_TEXT: string;
export const TEXT_PROMPT_TYPE_NUMBER: string;
export const TEXT_PROMPT_TYPE_TEXT: string;
export const TEXT_REPLACE_HELPURL: string;
export const TEXT_REPLACE_MESSAGE0: string;
export const TEXT_REPLACE_TOOLTIP: string;
export const TEXT_REVERSE_HELPURL: string;
export const TEXT_REVERSE_MESSAGE0: string;
export const TEXT_REVERSE_TOOLTIP: string;
export const TEXT_TEXT_HELPURL: string;
export const TEXT_TEXT_TOOLTIP: string;
export const TEXT_TRIM_HELPURL: string;
export const TEXT_TRIM_OPERATOR_BOTH: string;
export const TEXT_TRIM_OPERATOR_LEFT: string;
export const TEXT_TRIM_OPERATOR_RIGHT: string;
export const TEXT_TRIM_TOOLTIP: string;
export const TODAY: string;
export const UNDO: string;
export const UNNAMED_KEY: string;
export const VARIABLES_DEFAULT_NAME: string;
export const VARIABLES_DYNAMIC_HUE: string;
export const VARIABLES_GET_CREATE_SET: string;
export const VARIABLES_GET_HELPURL: string;
export const VARIABLES_GET_TOOLTIP: string;
export const VARIABLES_HUE: string;
export const VARIABLES_SET: string;
export const VARIABLES_SET_CREATE_GET: string;
export const VARIABLES_SET_HELPURL: string;
export const VARIABLES_SET_TOOLTIP: string;
export const VARIABLE_ALREADY_EXISTS: string;
export const VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE: string;
export const WORKSPACE_ARIA_LABEL: string;
export const WORKSPACE_COMMENT_DEFAULT_TEXT: string;

14
typings/msg/qqq.d.ts vendored
View File

@@ -1,14 +0,0 @@
/**
* @license
* Copyright 2020 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* Type definitions for the Blockly qqq locale.
*/
/// <reference path="msg.d.ts" />
import BlocklyMsg = Blockly.Msg;
export = BlocklyMsg;

View File

@@ -1,14 +0,0 @@
/**
* @license
* Copyright 2020 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* Type definitions for the Blockly synonyms locale.
*/
/// <reference path="msg.d.ts" />
import BlocklyMsg = Blockly.Msg;
export = BlocklyMsg;

8
typings/msg/tdd.d.ts vendored Normal file
View File

@@ -0,0 +1,8 @@
/**
* @license
* Copyright 2023 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
export * from './msg';