"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExpandWildcard = void 0; const fs_1 = __importDefault(require("fs")); const jsonc_1 = __importDefault(require("../jsonc")); const utils_1 = require("../utils"); // Matches a negative filter surrounded by '(!' and ')'. const OMISSION = /\(!([^)]+)\)/; /** * Finds wildcards in 'npm/yarn/pnpm/bun run', 'node --run' and 'deno task' * commands and replaces them with all matching scripts in the NodeJS and Deno * configuration files of the current directory. */ class ExpandWildcard { readDeno; readPackage; static readDeno() { try { let json = '{}'; if (fs_1.default.existsSync('deno.json')) { json = fs_1.default.readFileSync('deno.json', { encoding: 'utf-8' }); } else if (fs_1.default.existsSync('deno.jsonc')) { json = fs_1.default.readFileSync('deno.jsonc', { encoding: 'utf-8' }); } return jsonc_1.default.parse(json); } catch { return {}; } } static readPackage() { try { const json = fs_1.default.readFileSync('package.json', { encoding: 'utf-8' }); return JSON.parse(json); } catch { return {}; } } packageScripts; denoTasks; constructor(readDeno = ExpandWildcard.readDeno, readPackage = ExpandWildcard.readPackage) { this.readDeno = readDeno; this.readPackage = readPackage; } relevantScripts(command) { if (!this.packageScripts) { this.packageScripts = Object.keys(this.readPackage().scripts || {}); } if (command === 'deno task') { if (!this.denoTasks) { // If Deno tries to run a task that doesn't exist, // it can fall back to running a script with the same name. // Therefore, the actual list of tasks is the union of the tasks and scripts. this.denoTasks = [ ...Object.keys(this.readDeno().tasks || {}), ...this.packageScripts, ]; } return this.denoTasks; } return this.packageScripts; } parse(commandInfo) { // We expect one of the following patterns: // - run