summaryrefslogtreecommitdiffstats
path: root/remote/test/puppeteer/packages/puppeteer-core/tools/generate_sources.ts
diff options
context:
space:
mode:
Diffstat (limited to 'remote/test/puppeteer/packages/puppeteer-core/tools/generate_sources.ts')
-rw-r--r--remote/test/puppeteer/packages/puppeteer-core/tools/generate_sources.ts88
1 files changed, 88 insertions, 0 deletions
diff --git a/remote/test/puppeteer/packages/puppeteer-core/tools/generate_sources.ts b/remote/test/puppeteer/packages/puppeteer-core/tools/generate_sources.ts
new file mode 100644
index 0000000000..70922c6aad
--- /dev/null
+++ b/remote/test/puppeteer/packages/puppeteer-core/tools/generate_sources.ts
@@ -0,0 +1,88 @@
+#!/usr/bin/env node
+import {mkdir, mkdtemp, readFile, rm, writeFile} from 'fs/promises';
+import path, {join, resolve} from 'path';
+import {chdir} from 'process';
+
+import esbuild from 'esbuild';
+
+import {job} from '../../../tools/internal/job.js';
+
+const packageRoot = resolve(join(__dirname, '..'));
+chdir(packageRoot);
+
+(async () => {
+ await job('', async ({outputs}) => {
+ await Promise.all(
+ outputs.map(outputs => {
+ return mkdir(outputs, {recursive: true});
+ })
+ );
+ })
+ .outputs(['src/generated'])
+ .build();
+
+ const versionJob = job('', async ({inputs, outputs}) => {
+ const version = JSON.parse(await readFile(inputs[0]!, 'utf8')).version;
+ await writeFile(
+ outputs[0]!,
+ (await readFile(inputs[1]!, 'utf8')).replace('PACKAGE_VERSION', version)
+ );
+ })
+ .inputs(['package.json', 'src/templates/version.ts.tmpl'])
+ .outputs(['src/generated/version.ts'])
+ .build();
+
+ const injectedJob = job('', async ({name, inputs, outputs}) => {
+ const input = inputs.find(input => {
+ return input.endsWith('injected.ts');
+ })!;
+ const template = await readFile(
+ inputs.find(input => {
+ return input.includes('injected.ts.tmpl');
+ })!,
+ 'utf8'
+ );
+ const tmp = await mkdtemp(name);
+ await esbuild.build({
+ entryPoints: [input],
+ bundle: true,
+ outdir: tmp,
+ format: 'cjs',
+ platform: 'browser',
+ target: 'ES2022',
+ minify: true,
+ });
+ const baseName = path.basename(input);
+ const content = await readFile(
+ path.join(tmp, baseName.replace('.ts', '.js')),
+ 'utf-8'
+ );
+ const scriptContent = template.replace(
+ 'SOURCE_CODE',
+ JSON.stringify(content)
+ );
+ await writeFile(outputs[0]!, scriptContent);
+ await rm(tmp, {recursive: true, force: true});
+ })
+ .inputs(['src/templates/injected.ts.tmpl', 'src/injected/**/*.ts'])
+ .outputs(['src/generated/injected.ts'])
+ .build();
+
+ await Promise.all([versionJob, injectedJob]);
+
+ if (process.env['PUBLISH']) {
+ await job('', async ({inputs}) => {
+ const version = JSON.parse(await readFile(inputs[0]!, 'utf8')).version;
+ await writeFile(
+ inputs[1]!,
+ (
+ await readFile(inputs[1]!, {
+ encoding: 'utf-8',
+ })
+ ).replace("'NEXT'", `'v${version}'`)
+ );
+ })
+ .inputs(['package.json', '../../versions.js'])
+ .build();
+ }
+})();