mirror of
https://github.com/google/blockly.git
synced 2026-01-06 00:20:37 +01:00
* fix(build): Restore erroneously-deleted filter function This was deleted in PR #7406 as it was mainly being used to filter core/ vs. test/mocha/ deps into separate deps files - but it turns out also to be used for filtering error messages too. Oops. * refactor(tests): Migrate advanced compilation test to ES Modules * refactor(build): Migrate main.js to TypeScript This turns out to be pretty straight forward, even if it would cause crashing if one actually tried to import this module instead of just feeding it to Closure Compiler. * chore(build): Remove goog.declareModuleId calls Replace goog.declareModuleId calls with a comment recording the former module ID for posterity (or at least until we decide how to reformat the renamings file. * chore(tests): Delete closure/goog/* For the moment we still need something to serve as base.js for the benefit of closure-make-deps, so we keep a vestigial base.js around, containing only the @provideGoog declaration. * refactor(build): Remove vestigial base.js By changing slightly the command line arguments to closure-make-deps and closure-calculate-chunks the need to have any base.js is eliminated. * chore: Typo fix for PR #7415
71 lines
1.8 KiB
TypeScript
71 lines
1.8 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2019 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
// Former goog.module ID: Blockly.utils.idGenerator
|
|
|
|
/**
|
|
* Legal characters for the universally unique IDs. Should be all on
|
|
* a US keyboard. No characters that conflict with XML or JSON.
|
|
* Requests to remove additional 'problematic' characters from this
|
|
* soup will be denied. That's your failure to properly escape in
|
|
* your own environment. Issues #251, #625, #682, #1304.
|
|
*/
|
|
const soup =
|
|
'!#$%()*+,-./:;=?@[]^_`{|}~' +
|
|
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
|
|
/**
|
|
* Namespace object for internal implementations we want to be able to
|
|
* stub in tests. Do not use externally.
|
|
*
|
|
* @internal
|
|
*/
|
|
const internal = {
|
|
/**
|
|
* Generate a random unique ID. This should be globally unique.
|
|
* 87 characters ^ 20 length is greater than 128 bits (better than a UUID).
|
|
*
|
|
* @returns A globally unique ID string.
|
|
*/
|
|
genUid: () => {
|
|
const length = 20;
|
|
const soupLength = soup.length;
|
|
const id = [];
|
|
for (let i = 0; i < length; i++) {
|
|
id[i] = soup.charAt(Math.random() * soupLength);
|
|
}
|
|
return id.join('');
|
|
},
|
|
};
|
|
export const TEST_ONLY = internal;
|
|
|
|
/** Next unique ID to use. */
|
|
let nextId = 0;
|
|
|
|
/**
|
|
* Generate the next unique element IDs.
|
|
* IDs are compatible with the HTML4 'id' attribute restrictions:
|
|
* Use only ASCII letters, digits, '_', '-' and '.'
|
|
*
|
|
* For UUIDs use genUid (below) instead; this ID generator should
|
|
* primarily be used for IDs that end up in the DOM.
|
|
*
|
|
* @returns The next unique identifier.
|
|
*/
|
|
export function getNextUniqueId(): string {
|
|
return 'blockly-' + (nextId++).toString(36);
|
|
}
|
|
|
|
/**
|
|
* Generate a random unique ID.
|
|
*
|
|
* @see internal.genUid
|
|
* @returns A globally unique ID string.
|
|
*/
|
|
export function genUid(): string {
|
|
return internal.genUid();
|
|
}
|