Initial commit of 001code-html Scratch frontend project.

Includes scratch-gui, scratch-vm, scratch-blocks, scratch-render, scratch-l10n, and deployment config.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-16 15:37:45 +08:00
commit 6e0a1fbcbb
11350 changed files with 965674 additions and 0 deletions

View File

@@ -0,0 +1,64 @@
const AsyncLimiter = require('../../src/util/async-limiter');
const {test} = require('tap');
test('Runs callback', async t => {
/* eslint-disable-next-line require-await */
const callback = async (a, b) => a + b;
const limiter = new AsyncLimiter(callback, 2);
t.same(await Promise.all([
limiter.do(1, 2),
limiter.do(3, 4),
limiter.do(5, 6),
limiter.do(7, 8),
limiter.do(9, 10)
]), [
3,
7,
11,
15,
19
]);
t.end();
});
test('Errors', async t => {
t.plan(1);
const errorObject = new Error('Testing testing 123'); // want to get the same *exact* object back
const callback = () => Promise.reject(errorObject);
const limiter = new AsyncLimiter(callback, 10);
try {
await limiter.do();
} catch (e) {
t.equal(e, errorObject);
}
t.end();
});
test('Limit and queue', async t => {
const calls = [];
const callback = () => new Promise(resolve => {
calls.push({
resolve
});
});
const limiter = new AsyncLimiter(callback, 5);
for (let i = 0; i < 12; i++) {
limiter.do();
}
t.equal(calls.length, 5);
calls.forEach(i => i.resolve());
await Promise.resolve();
t.equal(calls.length, 10);
calls.forEach(i => i.resolve());
await Promise.resolve();
t.equal(calls.length, 12);
t.end();
});