123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- /**
- * Copyright 2023 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- import fs from 'fs';
- import path from 'path';
- import { Browser } from './browser-data/browser-data.js';
- /**
- * The cache used by Puppeteer relies on the following structure:
- *
- * - rootDir
- * -- <browser1> | browserRoot(browser1)
- * ---- <platform>-<buildId> | installationDir()
- * ------ the browser-platform-buildId
- * ------ specific structure.
- * -- <browser2> | browserRoot(browser2)
- * ---- <platform>-<buildId> | installationDir()
- * ------ the browser-platform-buildId
- * ------ specific structure.
- * @internal
- */
- export class Cache {
- #rootDir;
- constructor(rootDir) {
- this.#rootDir = rootDir;
- }
- browserRoot(browser) {
- return path.join(this.#rootDir, browser);
- }
- installationDir(browser, platform, buildId) {
- return path.join(this.browserRoot(browser), `${platform}-${buildId}`);
- }
- clear() {
- fs.rmSync(this.#rootDir, {
- force: true,
- recursive: true,
- maxRetries: 10,
- retryDelay: 500,
- });
- }
- uninstall(browser, platform, buildId) {
- fs.rmSync(this.installationDir(browser, platform, buildId), {
- force: true,
- recursive: true,
- maxRetries: 10,
- retryDelay: 500,
- });
- }
- getInstalledBrowsers() {
- if (!fs.existsSync(this.#rootDir)) {
- return [];
- }
- const types = fs.readdirSync(this.#rootDir);
- const browsers = types.filter((t) => {
- return Object.values(Browser).includes(t);
- });
- return browsers.flatMap(browser => {
- const files = fs.readdirSync(this.browserRoot(browser));
- return files
- .map(file => {
- const result = parseFolderPath(path.join(this.browserRoot(browser), file));
- if (!result) {
- return null;
- }
- return {
- path: path.join(this.browserRoot(browser), file),
- browser,
- platform: result.platform,
- buildId: result.buildId,
- };
- })
- .filter((item) => {
- return item !== null;
- });
- });
- }
- }
- function parseFolderPath(folderPath) {
- const name = path.basename(folderPath);
- const splits = name.split('-');
- if (splits.length !== 2) {
- return;
- }
- const [platform, buildId] = splits;
- if (!buildId || !platform) {
- return;
- }
- return { platform, buildId };
- }
- //# sourceMappingURL=Cache.js.map
|