tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

Herebyfile.mjs (3929B)


      1 /**
      2 * @license
      3 * Copyright 2024 Google Inc.
      4 * SPDX-License-Identifier: Apache-2.0
      5 */
      6 
      7 /* eslint-disable import/order */
      8 
      9 import {readFile, writeFile} from 'fs/promises';
     10 
     11 import versionData from './versions.json' with {type: 'json'};
     12 
     13 import {docgen, spliceIntoSection} from '@puppeteer/docgen';
     14 import {execa} from 'execa';
     15 import {task} from 'hereby';
     16 import semver from 'semver';
     17 
     18 function addNoTocHeader(markdown) {
     19  return `---
     20 hide_table_of_contents: true
     21 ---
     22 
     23 ${markdown}`;
     24 }
     25 
     26 /**
     27 * This logic should match the one in `website/docusaurus.config.js`.
     28 */
     29 function getApiUrl(version) {
     30  if (semver.gte(version, '19.3.0')) {
     31    return `https://github.com/puppeteer/puppeteer/blob/puppeteer-${version}/docs/api/index.md`;
     32  } else if (semver.gte(version, '15.3.0')) {
     33    return `https://github.com/puppeteer/puppeteer/blob/${version}/docs/api/index.md`;
     34  } else {
     35    return `https://github.com/puppeteer/puppeteer/blob/${version}/docs/api.md`;
     36  }
     37 }
     38 
     39 export const docsNgSchematicsTask = task({
     40  name: 'docs:ng-schematics',
     41  run: async () => {
     42    const readme = await readFile('packages/ng-schematics/README.md', 'utf-8');
     43    await writeFile('docs/guides/ng-schematics.md', readme);
     44  },
     45 });
     46 
     47 export const docsBrowserSupportTask = task({
     48  name: 'docs:supported-browsers',
     49  run: async () => {
     50    const content = await readFile('docs/supported-browsers.md', {
     51      encoding: 'utf8',
     52    });
     53    // Create table view
     54    const buffer = [
     55      '| Puppeteer | Chrome | Firefox |',
     56      '| --------- | ------ | ------- |',
     57    ];
     58    for (const [puppeteerVersion, browserVersions] of versionData.versions) {
     59      if (puppeteerVersion === 'NEXT') {
     60        continue;
     61      }
     62 
     63      const puppeteerVer = `[Puppeteer ${puppeteerVersion}](${getApiUrl(
     64        puppeteerVersion,
     65      )})`;
     66 
     67      let firefoxVer = '';
     68      if (semver.gte(puppeteerVersion, '23.0.0')) {
     69        // Firefox pin need a prefix of `stable_` to be downloaded
     70        // For the user that is not relaxant on this page
     71        firefoxVer = `[Firefox](https://www.mozilla.org/en-US/firefox/) ${browserVersions.firefox.split('_').at(-1)}`;
     72      } else if (semver.gte(puppeteerVersion, '2.1.0')) {
     73        firefoxVer = `Firefox Nightly (at the time)`;
     74      } else {
     75        firefoxVer = `Firefox not supported`;
     76      }
     77 
     78      let chromeVer = '';
     79      if (semver.gte(puppeteerVersion, '20.0.0')) {
     80        chromeVer = `[Chrome for Testing](https://developer.chrome.com/blog/chrome-for-testing/) ${browserVersions.chrome}`;
     81      } else {
     82        chromeVer = `Chromium ${browserVersions.chrome}`;
     83      }
     84 
     85      buffer.push(`| ${puppeteerVer} | ${chromeVer} | ${firefoxVer} |`);
     86    }
     87    await writeFile(
     88      'docs/supported-browsers.md',
     89      spliceIntoSection('version', content, buffer.join('\n')),
     90    );
     91  },
     92 });
     93 
     94 export const docsTask = task({
     95  name: 'docs',
     96  dependencies: [docsNgSchematicsTask, docsBrowserSupportTask],
     97  run: async () => {
     98    // Copy main page.
     99    const mainPage = await readFile('README.md', 'utf-8');
    100    await writeFile('docs/index.md', addNoTocHeader(mainPage));
    101 
    102    // Generate documentation
    103    for (const [name, folder] of [
    104      ['browsers', 'browsers-api'],
    105      ['puppeteer', 'api'],
    106    ]) {
    107      docgen(`docs/${name}.api.json`, `docs/${folder}`);
    108    }
    109 
    110    // Update main @puppeteer/browsers page.
    111    const readme = await readFile('packages/browsers/README.md', 'utf-8');
    112    const index = await readFile('docs/browsers-api/index.md', 'utf-8');
    113    await writeFile(
    114      'docs/browsers-api/index.md',
    115      index.replace('# API Reference', readme),
    116    );
    117 
    118    // Copy combined changelog.
    119    let changelog = await readFile('CHANGELOG.md', 'utf-8');
    120    // Escape for MDX.
    121    changelog = changelog.replaceAll('{', '\\{');
    122    await writeFile('docs/CHANGELOG.md', changelog);
    123 
    124    // Format everything.
    125    await execa('prettier', ['--ignore-path', 'none', '--write', 'docs']);
    126  },
    127 });