mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
107 lines
2.9 KiB
JavaScript
107 lines
2.9 KiB
JavaScript
#!/usr/bin/env node
|
|
import {createHash} from 'crypto';
|
|
import esbuild from 'esbuild';
|
|
import {mkdir, mkdtemp, readFile, rm, writeFile} from 'fs/promises';
|
|
import {sync as glob} from 'glob';
|
|
import path from 'path';
|
|
import {job} from './internal/job.js';
|
|
|
|
const INCLUDED_FOLDERS = ['common', 'node', 'generated', 'util', 'api'];
|
|
|
|
(async () => {
|
|
await job('', async ({outputs}) => {
|
|
await Promise.all(
|
|
outputs.map(outputs => {
|
|
return mkdir(outputs, {recursive: true});
|
|
})
|
|
);
|
|
})
|
|
.outputs(['src/generated'])
|
|
.build();
|
|
|
|
await 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',
|
|
});
|
|
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();
|
|
|
|
const sources = glob(
|
|
`src/{@(${INCLUDED_FOLDERS.join('|')})/*.ts,!(types|puppeteer-core).ts}`
|
|
);
|
|
await job('', async ({outputs}) => {
|
|
let types =
|
|
'// AUTOGENERATED - Use `npm run generate:sources` to regenerate.\n\n';
|
|
for (const input of sources.map(source => {
|
|
return `.${source.slice(3)}`;
|
|
})) {
|
|
types += `export * from '${input.replace('.ts', '.js')}';\n`;
|
|
}
|
|
await writeFile(outputs[0]!, types);
|
|
})
|
|
.value(
|
|
sources
|
|
.reduce((hmac, value) => {
|
|
return hmac.update(value);
|
|
}, createHash('sha256'))
|
|
.digest('hex')
|
|
)
|
|
.outputs(['src/types.ts'])
|
|
.build();
|
|
|
|
if (process.env['PUBLISH']) {
|
|
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();
|
|
}
|
|
|
|
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();
|
|
})();
|