Skip to main content
Module

std/_tools/check_browser_compat.ts

The Deno Standard Library
Go to Latest
File
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
/** * Running this script provides a list of suggested files that might be browser-compatible. * It skips test code, benchmark code, internal code and `version.ts` at the root. * * Run using: deno run --allow-read --allow-run _tools/check_browser_compat.ts */
import { walk } from "../fs/walk.ts";import { COPYRIGHT } from "./check_licence.ts";
const ROOT = new URL("../", import.meta.url);const SKIP = [/(test|bench|\/_|\\_|testdata|version.ts)/];const DECLARATION = "// This module is browser compatible.";const CHECK = Deno.args.includes("--check");
function isBrowserCompatible(filePath: string): boolean { const command = new Deno.Command(Deno.execPath(), { args: [ "check", "--no-lock", "--config", "browser-compat.tsconfig.json", filePath, ], }); const { success } = command.outputSync(); return success;}
function hasBrowserCompatibleComment(source: string): boolean { return source.includes(DECLARATION);}
for await (const { path } of walk(ROOT, { exts: [".ts"], skip: SKIP })) { const source = await Deno.readTextFile(path); if (isBrowserCompatible(path) && !hasBrowserCompatibleComment(source)) { if (CHECK) { console.log( `${path} is likely browser-compatible and can have the "${DECLARATION}" comment added.`, ); } else { const index = source.indexOf(COPYRIGHT); await Deno.writeTextFile( path, source.slice(0, index + COPYRIGHT.length) + "\n" + DECLARATION + source.slice(index + COPYRIGHT.length), ); } }}