Skip to content

Commit e3d8da3

Browse files
authored
Revert "Automate script for paintWorklet environment (#325)" (#328)
1 parent e7c0453 commit e3d8da3

File tree

5 files changed

+150
-154
lines changed

5 files changed

+150
-154
lines changed

data/paintWorklet.mjs

Lines changed: 136 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,137 @@
1-
// This file is autogenerated by scripts
2-
// Do NOT modify this file manually
1+
import {sortObject} from '../utilities.mjs';
2+
import esBuiltinGlobals from './builtin.mjs';
33

4-
export default {
5-
AsyncDisposableStack: false,
6-
ByteLengthQueuingStrategy: false,
7-
console: false,
8-
CountQueuingStrategy: false,
9-
CSSImageValue: false,
10-
CSSKeywordValue: false,
11-
CSSMathClamp: false,
12-
CSSMathInvert: false,
13-
CSSMathMax: false,
14-
CSSMathMin: false,
15-
CSSMathNegate: false,
16-
CSSMathProduct: false,
17-
CSSMathSum: false,
18-
CSSMathValue: false,
19-
CSSMatrixComponent: false,
20-
CSSNumericArray: false,
21-
CSSNumericValue: false,
22-
CSSPerspective: false,
23-
CSSPositionValue: false,
24-
CSSRotate: false,
25-
CSSScale: false,
26-
CSSSkew: false,
27-
CSSSkewX: false,
28-
CSSSkewY: false,
29-
CSSStyleValue: false,
30-
CSSTransformComponent: false,
31-
CSSTransformValue: false,
32-
CSSTranslate: false,
33-
CSSUnitValue: false,
34-
CSSUnparsedValue: false,
35-
CSSVariableReferenceValue: false,
36-
devicePixelRatio: false,
37-
DisposableStack: false,
38-
PaintRenderingContext2D: false,
39-
PaintSize: false,
40-
PaintWorkletGlobalScope: false,
41-
Path2D: false,
42-
QuotaExceededError: false,
43-
ReadableByteStreamController: false,
44-
ReadableStream: false,
45-
ReadableStreamBYOBReader: false,
46-
ReadableStreamBYOBRequest: false,
47-
ReadableStreamDefaultController: false,
48-
ReadableStreamDefaultReader: false,
49-
registerPaint: false,
50-
StylePropertyMapReadOnly: false,
51-
SuppressedError: false,
52-
TransformStream: false,
53-
TransformStreamDefaultController: false,
54-
WebAssembly: false,
55-
WorkletGlobalScope: false,
56-
WritableStream: false,
57-
WritableStreamDefaultController: false,
58-
WritableStreamDefaultWriter: false,
59-
};
4+
/*
5+
Steps to update `paintWorklet` globals:
6+
7+
1. Start `node scripts/browser/start.mjs`
8+
1. Navigate to `http://127.0.0.1:3000` in browser
9+
1. Click `Get 'paintWorklet' globals` button
10+
1. Copy properties from console and paste to `globalProperties`
11+
1. Run `npm run build`
12+
*/
13+
14+
const globalProperties = [
15+
'Object',
16+
'Function',
17+
'Array',
18+
'Number',
19+
'parseFloat',
20+
'parseInt',
21+
'Infinity',
22+
'NaN',
23+
'undefined',
24+
'Boolean',
25+
'String',
26+
'Symbol',
27+
'Date',
28+
'Promise',
29+
'RegExp',
30+
'Error',
31+
'AggregateError',
32+
'EvalError',
33+
'RangeError',
34+
'ReferenceError',
35+
'SyntaxError',
36+
'TypeError',
37+
'URIError',
38+
'globalThis',
39+
'JSON',
40+
'Math',
41+
'Intl',
42+
'ArrayBuffer',
43+
'Atomics',
44+
'Uint8Array',
45+
'Int8Array',
46+
'Uint16Array',
47+
'Int16Array',
48+
'Uint32Array',
49+
'Int32Array',
50+
'BigUint64Array',
51+
'BigInt64Array',
52+
'Uint8ClampedArray',
53+
'Float32Array',
54+
'Float64Array',
55+
'DataView',
56+
'Map',
57+
'BigInt',
58+
'Set',
59+
'Iterator',
60+
'WeakMap',
61+
'WeakSet',
62+
'Proxy',
63+
'Reflect',
64+
'FinalizationRegistry',
65+
'WeakRef',
66+
'decodeURI',
67+
'decodeURIComponent',
68+
'encodeURI',
69+
'encodeURIComponent',
70+
'escape',
71+
'unescape',
72+
'eval',
73+
'isFinite',
74+
'isNaN',
75+
'console',
76+
'QuotaExceededError',
77+
'WritableStreamDefaultWriter',
78+
'WritableStreamDefaultController',
79+
'WritableStream',
80+
'WorkletGlobalScope',
81+
'TransformStreamDefaultController',
82+
'TransformStream',
83+
'StylePropertyMapReadOnly',
84+
'ReadableStreamDefaultReader',
85+
'ReadableStreamDefaultController',
86+
'ReadableStreamBYOBRequest',
87+
'ReadableStreamBYOBReader',
88+
'ReadableStream',
89+
'ReadableByteStreamController',
90+
'Path2D',
91+
'PaintWorkletGlobalScope',
92+
'PaintSize',
93+
'PaintRenderingContext2D',
94+
'CountQueuingStrategy',
95+
'CSSVariableReferenceValue',
96+
'CSSUnparsedValue',
97+
'CSSUnitValue',
98+
'CSSTranslate',
99+
'CSSTransformValue',
100+
'CSSTransformComponent',
101+
'CSSStyleValue',
102+
'CSSSkewY',
103+
'CSSSkewX',
104+
'CSSSkew',
105+
'CSSScale',
106+
'CSSRotate',
107+
'CSSPositionValue',
108+
'CSSPerspective',
109+
'CSSNumericValue',
110+
'CSSNumericArray',
111+
'CSSMatrixComponent',
112+
'CSSMathValue',
113+
'CSSMathSum',
114+
'CSSMathProduct',
115+
'CSSMathNegate',
116+
'CSSMathMin',
117+
'CSSMathMax',
118+
'CSSMathInvert',
119+
'CSSMathClamp',
120+
'CSSKeywordValue',
121+
'CSSImageValue',
122+
'ByteLengthQueuingStrategy',
123+
'devicePixelRatio',
124+
'registerPaint',
125+
'Temporal',
126+
'SuppressedError',
127+
'DisposableStack',
128+
'AsyncDisposableStack',
129+
'Float16Array',
130+
'WebAssembly',
131+
];
132+
133+
export default sortObject(Object.fromEntries(
134+
globalProperties
135+
.filter(name => !Object.hasOwn(esBuiltinGlobals, name))
136+
.map(name => [name, false]),
137+
));

scripts/browser.mjs

Lines changed: 7 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,15 @@ function downloadBrowser({browser}) {
4242
return browserInstallPromises.get(browser);
4343
}
4444

45-
async function _launchBrowser(options) {
45+
async function _launchBrowser({browser: browserName}) {
4646
const browser = await puppeteer.launch({
47-
headless: true,
47+
browser: browserName,
4848
enableExtensions: false,
4949
waitForInitialPage: false,
50-
...options,
5150
});
5251

5352
try {
5453
const version = await browser.version();
55-
const browserName = options.browser;
5654
assert.ok(
5755
version.toLowerCase().startsWith(`${browserName}/`),
5856
`Unexpected browser version: '${version}', expected '${browserName}'.`,
@@ -65,41 +63,13 @@ async function _launchBrowser(options) {
6563
return browser;
6664
}
6765

68-
async function launchBrowser(options) {
66+
async function launchBrowser({browser}) {
6967
try {
70-
return await _launchBrowser(options);
68+
return await _launchBrowser({browser});
7169
} catch {
72-
await downloadBrowser(options);
73-
return _launchBrowser(options);
70+
await downloadBrowser({browser});
71+
return _launchBrowser({browser});
7472
}
7573
}
7674

77-
async function getDevtoolsPanelOutput(target) {
78-
const page = await target.page();
79-
return page.evaluate(async () => {
80-
globalThis.DevToolsAPI.showPanel('console');
81-
82-
function waitFor(condition) {
83-
// eslint-disable-next-line no-use-extend-native/no-use-extend-native, n/no-unsupported-features/es-syntax
84-
const {promise, resolve} = Promise.withResolvers();
85-
const check = () => {
86-
const result = condition();
87-
if (result) {
88-
resolve(result);
89-
} else {
90-
setTimeout(check, 100);
91-
}
92-
};
93-
94-
check();
95-
96-
return promise;
97-
}
98-
99-
const consolePanel = await waitFor(() => globalThis.UI?.panels?.console);
100-
const {element} = consolePanel;
101-
return Array.from(element.querySelectorAll('.console-message-text'), element => element.textContent);
102-
});
103-
}
104-
105-
export {launchBrowser, getDevtoolsPanelOutput};
75+
export {launchBrowser};

scripts/browser/assets/main.mjs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -146,24 +146,21 @@ function initAudioWorklet() {
146146
}
147147

148148
const PAINT_WORKLET_PAINT_NAME = `${EXECUTE_COMMAND_SIGNAL}-paint`;
149-
function getPaintWorkletGlobals({isNodejsCall = false} = {}) {
149+
function getPaintWorkletGlobals() {
150150
CSS.paintWorklet.addModule('./assets/paint-worklet.mjs');
151151
Object.assign(document.body.style, {
152152
backgroundImage: `paint(${PAINT_WORKLET_PAINT_NAME})`,
153153
});
154-
if (isNodejsCall) {
155-
return;
156-
}
157-
158154
// eslint-disable-next-line no-alert
159155
alert('Open console to see the collected globals.');
160156
}
161157

162158
function initPaintWorklet() {
163159
globalThis.registerPaint(PAINT_WORKLET_PAINT_NAME, class PaintWorkletGetGlobalsPaint {
164160
paint(/* context, geom, properties */) {
165-
const properties = getGlobalThisProperties({expectSecureContext: false});
166-
console.log(`paintWorkletGlobals: ${JSON.stringify(properties)}`);
161+
console.log({
162+
paintWorkletGlobals: getGlobalThisProperties({expectSecureContext: false}),
163+
});
167164
}
168165
});
169166
}
@@ -172,8 +169,8 @@ function initPage() {
172169
// Exposed for Node.js to call
173170
Object.defineProperty(globalThis, '__getGlobals', {
174171
enumerable: false,
175-
value(environment, options) {
176-
return environments.find(({environment: name}) => name === environment).getGlobals(options);
172+
value(environment) {
173+
return environments.find(({environment: name}) => name === environment).getGlobals();
177174
},
178175
});
179176

scripts/get-browser-globals.mjs

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import process from 'node:process';
2-
import {launchBrowser, getDevtoolsPanelOutput} from './browser.mjs';
1+
import {launchBrowser} from './browser.mjs';
32
import {createGlobals} from './utilities.mjs';
43
import {startServer} from './browser/server.mjs';
54

@@ -160,53 +159,10 @@ async function getAudioWorkletGlobals() {
160159
return createGlobals(properties);
161160
}
162161

163-
async function getPaintWorkletGlobals() {
164-
if (process.platform !== 'win32') {
165-
console.warn('\'paintWorklet\' globals generate script currently only works on Windows.');
166-
return {};
167-
}
168-
169-
const browser = await launchBrowser({browser: 'chrome', devtools: true});
170-
const page = await browser.newPage();
171-
172-
let properties;
173-
let server;
174-
try {
175-
server = await startServer({silent: true});
176-
await page.goto(server.url);
177-
await page.evaluate('globalThis.__getGlobals(\'paintWorklet\', {isNodejsCall: true})');
178-
properties = JSON.parse(await getDevtoolsOutputWithPrefix(browser, 'paintWorkletGlobals: '));
179-
} finally {
180-
await browser.close();
181-
await server?.close();
182-
}
183-
184-
return createGlobals(properties);
185-
}
186-
187-
async function getDevtoolsOutputWithPrefix(browser, prefix) {
188-
for (const target of await browser.targets()) {
189-
const type = target.type();
190-
const url = target.url();
191-
if (type !== 'other' || !url.startsWith('devtools://')) {
192-
continue;
193-
}
194-
195-
// eslint-disable-next-line no-await-in-loop
196-
const logs = await getDevtoolsPanelOutput(target);
197-
for (const log of logs) {
198-
if (log.startsWith(prefix)) {
199-
return log.slice(prefix.length);
200-
}
201-
}
202-
}
203-
}
204-
205162
export {
206163
getBrowserGlobals,
207164
getWebWorkerGlobals,
208165
getServiceWorkerGlobals,
209166
getSharedWorkerGlobals,
210167
getAudioWorkletGlobals,
211-
getPaintWorkletGlobals,
212168
};

scripts/update.mjs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import {
99
getServiceWorkerGlobals,
1010
getSharedWorkerGlobals,
1111
getAudioWorkletGlobals,
12-
getPaintWorkletGlobals,
1312
} from './get-browser-globals.mjs';
1413
import getShelljsGlobals from './get-shelljs-globals.mjs';
1514
import getJestGlobals from './get-jest-globals.mjs';
@@ -60,10 +59,6 @@ const ALL_JOBS = [
6059
id: 'audioWorklet',
6160
build: createBuildFunction(getAudioWorkletGlobals),
6261
},
63-
{
64-
id: 'paintWorklet',
65-
build: createBuildFunction(getPaintWorkletGlobals),
66-
},
6762
{
6863
id: 'shelljs',
6964
build: createBuildFunction(getShelljsGlobals, {incremental: false}),

0 commit comments

Comments
 (0)