mirror of
https://github.com/google/blockly.git
synced 2026-01-06 08:30:13 +01:00
refactor(tests): Introduce loading shims, use in playgrounds (#7380)
* refactor(build): Simplify implementation of posixPath
* fix(closure): Make safe to import in node.js
Make the implementation declareModlueId safe to import and
execute in node.js, which does not provide a window global.
(N.B. because this is an ESM and therefore automatically
strict, using window?.goog?.declareModuleId doesn't work
because window being undefined is an early error.)
* feat(tests): Introduce chunk loading shims
- Add a buildShims task to build_tasks.js that, for each chunk,
creates a correspondingly-named build/<chunk>.mjs that will
either (in uncompressed mode) import and reexport that chunk's
entry point module (e.g. core/blockly.js) or (in compressed
mode) load dist/<chunk>_compressed.js using a <script> tag
and then export the corresponding properties on the chunk's
exports object.
- Provide helper methods used by these shims in
tests/scripts/loading.mjs, including code to detect whether
to load in compressed or uncompressed mode.
- Add a quote() function to scripts/helpers.js, used by
buildShims. This is copied from tests/bootstrap_helper.js,
which will be removed in a later commit.
* refactor(tests): Update playground.html to use new loading shims
* refactor(tests): Update advanced_playground.html to use new loading shims
* refactor(tests): Update multi_playground.html to use new loading shims
* chore(tests): Delete playgrounds/shared_procedures.html
Shared procedure support was moved to a plugin and this should
have been removed from core along with it.
* docs(tests): Typo corrections.
* chore(tests): Add ".loader" infix to shim filenames.
Per suggestion on PR #7380, have buildShims name the shims
${chunk.name}.loader.mjs instead of just `${chunk.name}.mjs`.
This commit is contained in:
committed by
GitHub
parent
86f3182b46
commit
5b5a56586c
@@ -11,25 +11,64 @@
|
||||
|
||||
const path = require('path');
|
||||
|
||||
/**
|
||||
* Escape regular expression pattern
|
||||
* @param {string} pattern regular expression pattern
|
||||
* @return {string} escaped regular expression pattern
|
||||
*/
|
||||
function escapeRegex(pattern) {
|
||||
return pattern.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&');
|
||||
}
|
||||
|
||||
/**
|
||||
* Replaces OS-specific path with POSIX style path.
|
||||
* Simplified implementation based on
|
||||
* https://stackoverflow.com/a/63251716/4969945
|
||||
*
|
||||
* @param {string} target target path
|
||||
* @return {string} posix path
|
||||
*/
|
||||
function posixPath(target) {
|
||||
const osSpecificSep = new RegExp(escapeRegex(path.sep), 'g');
|
||||
return target.replace(osSpecificSep, path.posix.sep);
|
||||
return target.split(path.sep).join(path.posix.sep);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a string into a string literal. Strictly speaking we
|
||||
* only need to escape backslash, \r, \n, \u2028 (line separator),
|
||||
* \u2029 (paragraph separator) and whichever quote character we're
|
||||
* using, but for simplicity we escape all the control characters.
|
||||
*
|
||||
* Based on https://github.com/google/CodeCity/blob/master/server/code.js
|
||||
*
|
||||
* @param {string} str The string to convert.
|
||||
* @return {string} The value s as a eval-able string literal.
|
||||
*/
|
||||
function quote(str) {
|
||||
/* eslint-disable no-control-regex, no-multi-spaces */
|
||||
/** Regexp for characters to be escaped in a single-quoted string. */
|
||||
const singleRE = /[\x00-\x1f\\\u2028\u2029']/g;
|
||||
|
||||
/** Map of control character replacements. */
|
||||
const replacements = {
|
||||
'\x00': '\\0',
|
||||
'\x01': '\\x01',
|
||||
'\x02': '\\x02',
|
||||
'\x03': '\\x03',
|
||||
'\x04': '\\x04',
|
||||
'\x05': '\\x05',
|
||||
'\x06': '\\x06',
|
||||
'\x07': '\\x07',
|
||||
'\x08': '\\b',
|
||||
'\x09': '\\t',
|
||||
'\x0a': '\\n',
|
||||
'\x0b': '\\v',
|
||||
'\x0c': '\\f',
|
||||
'\x0d': '\\r',
|
||||
'\x0e': '\\x0e',
|
||||
'\x0f': '\\x0f',
|
||||
'"': '\\"',
|
||||
"'": "\\'",
|
||||
'\\': '\\\\',
|
||||
'\u2028': '\\u2028',
|
||||
'\u2029': '\\u2029',
|
||||
};
|
||||
/* eslint-enable no-control-regex, no-multi-spaces */
|
||||
|
||||
return "'" + str.replace(singleRE, (c) => replacements[c]) + "'";
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
posixPath,
|
||||
quote,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user