enbu 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/README.md +164 -158
  2. package/dist/main.mjs +16252 -149
  3. package/dist/main.mjs.map +1 -1
  4. package/package.json +11 -12
package/dist/main.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.mjs","names":["flows: Flow[]","commandFormatters: Record<string, CommandFormatter>"],"sources":["../src/args-parser.ts","../src/output/formatter.ts","../src/utils/fs.ts","../src/commands/init.ts","../src/commands/run.ts","../src/output/exit-code.ts","../src/main.ts"],"sourcesContent":["import type { CliError, ParsedArgs } from './types';\nimport { type Result, err, ok } from 'neverthrow';\n\n/** デフォルトタイムアウト: 30秒 */\nconst DEFAULT_TIMEOUT_MS = 30000;\n\n/**\n * コマンドライン引数をパースする\n *\n * process.argvから渡された引数を解析し、ParsedArgs型に変換する。\n * バージョンフラグが指定されている場合は、他の引数に関わらずバージョンモードとして返す。\n * ヘルプフラグが指定されている場合は、他の引数に関わらずヘルプモードとして返す。\n * 最初の位置引数がinitの場合はinitコマンド、それ以外はrunコマンドとして扱う。\n *\n * @param argv - process.argv(インデックス2以降)\n * @returns パース済み引数、またはエラー\n */\nexport const parseArgs = (argv: string[]): Result<ParsedArgs, CliError> => {\n // バージョンフラグの確認\n if (argv.includes('-V') || argv.includes('--version')) {\n return ok({\n command: 'run',\n help: false,\n version: true,\n verbose: false,\n files: [],\n headed: false,\n env: {},\n timeout: DEFAULT_TIMEOUT_MS,\n screenshot: false,\n bail: false,\n });\n }\n\n // ヘルプフラグの確認\n if (argv.includes('-h') || argv.includes('--help')) {\n return ok({\n command: 'run',\n help: true,\n version: false,\n verbose: false,\n files: [],\n headed: false,\n env: {},\n timeout: DEFAULT_TIMEOUT_MS,\n screenshot: false,\n bail: false,\n });\n }\n\n // verboseフラグ\n const verbose = argv.includes('-v') || argv.includes('--verbose');\n\n // コマンド判定\n const firstArg = argv[0];\n if (firstArg === 'init') {\n return parseInitArgs(argv.slice(1), verbose);\n }\n\n // デフォルトはrunコマンド\n return parseRunArgs(argv, verbose);\n};\n\n/**\n * initコマンドの引数をパースする\n *\n * initコマンドで利用可能なオプション(--force)を解析する。\n * 未知のオプションが指定された場合はエラーを返す。\n *\n * @param argv - initコマンド以降の引数配列\n * @param verbose - verboseフラグが有効かどうか\n * @returns パース済みのinit引数、またはエラー\n */\nconst parseInitArgs = (argv: string[], verbose: boolean): Result<ParsedArgs, CliError> => {\n const force = argv.includes('--force');\n\n // 未知のオプションチェック\n for (const arg of argv) {\n if (arg.startsWith('--')) {\n if (arg !== '--force' && arg !== '--verbose') {\n return err({\n type: 'invalid_args',\n message: `Unknown option for init command: ${arg}`,\n });\n }\n } else if (arg.startsWith('-')) {\n if (arg !== '-v') {\n return err({\n type: 'invalid_args',\n message: `Unknown option for init command: ${arg}`,\n });\n }\n }\n }\n\n return ok({\n command: 'init',\n help: false,\n version: false,\n verbose,\n force,\n });\n};\n\n/**\n * runコマンドの引数をパースする\n *\n * runコマンドで利用可能なオプション(--headed, --env, --timeout等)を解析する。\n * --envは複数回指定可能で、KEY=VALUE形式でなければならない。\n * --timeoutは正の整数値でなければならない。\n * 位置引数(オプションフラグでない引数)は全てフローファイルパスとして扱う。\n *\n * @param argv - runコマンドの引数配列\n * @param verbose - verboseフラグが有効かどうか\n * @returns パース済みのrun引数、またはエラー\n */\nconst parseRunArgs = (argv: string[], verbose: boolean): Result<ParsedArgs, CliError> => {\n const files: string[] = [];\n const env: Record<string, string> = {};\n const state = {\n files,\n env,\n headed: false,\n timeout: DEFAULT_TIMEOUT_MS,\n screenshot: false,\n bail: false,\n session: undefined,\n };\n\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i];\n const processResult = processRunArg(arg, argv, i, state);\n\n const continueResult = processResult.match(\n (newIndex) => {\n // インデックスの更新(値を取る引数の場合)\n i = newIndex;\n return ok(undefined);\n },\n (error) => err(error),\n );\n\n if (continueResult.isErr()) {\n return continueResult;\n }\n }\n\n return ok({\n command: 'run',\n help: false,\n version: false,\n verbose,\n files: state.files,\n headed: state.headed,\n env: state.env,\n timeout: state.timeout,\n screenshot: state.screenshot,\n bail: state.bail,\n session: state.session,\n });\n};\n\n/**\n * runコマンドの単一引数を処理する\n *\n * 各オプションに応じた処理を行い、新しいインデックスを返す。\n * 値を取る引数(--env, --timeout, --session)の場合はインデックスを+1する。\n *\n * @param arg - 現在の引数\n * @param argv - 全引数配列\n * @param currentIndex - 現在のインデックス\n * @param state - パース状態を保持するオブジェクト\n * @returns 成功時: 新しいインデックス、失敗時: エラー\n */\nconst processRunArg = (\n arg: string,\n argv: string[],\n currentIndex: number,\n state: {\n files: string[];\n env: Record<string, string>;\n headed: boolean;\n timeout: number;\n screenshot: boolean;\n bail: boolean;\n session: string | undefined;\n },\n): Result<number, CliError> => {\n // 値を取るオプション\n switch (arg) {\n case '--env':\n return parseEnvOption(argv, currentIndex, state);\n case '--timeout':\n return parseTimeoutOption(argv, currentIndex, state);\n case '--session':\n return parseSessionOption(argv, currentIndex, state);\n default:\n // フラグオプション(値を取らない)\n return processFlagArg(arg, currentIndex, state);\n }\n};\n\n/**\n * フラグ引数を処理する(値を取らない引数)\n *\n * @param arg - 現在の引数\n * @param currentIndex - 現在のインデックス\n * @param state - パース状態を保持するオブジェクト\n * @returns 成功時: 現在のインデックス、失敗時: エラー\n */\nconst processFlagArg = (\n arg: string,\n currentIndex: number,\n state: {\n files: string[];\n headed: boolean;\n screenshot: boolean;\n bail: boolean;\n },\n): Result<number, CliError> => {\n if (arg === '--headed') {\n state.headed = true;\n return ok(currentIndex);\n }\n\n if (arg === '--screenshot') {\n state.screenshot = true;\n return ok(currentIndex);\n }\n\n if (arg === '--bail') {\n state.bail = true;\n return ok(currentIndex);\n }\n\n if (arg === '-v' || arg === '--verbose') {\n // 既に処理済み\n return ok(currentIndex);\n }\n\n if (arg.startsWith('--')) {\n return err({\n type: 'invalid_args',\n message: `Unknown option: ${arg}`,\n });\n }\n\n // 位置引数(フローファイル)\n state.files.push(arg);\n return ok(currentIndex);\n};\n\n/**\n * --env オプションをパースする\n */\nconst parseEnvOption = (\n argv: string[],\n currentIndex: number,\n state: { env: Record<string, string> },\n): Result<number, CliError> => {\n const nextArg = argv[currentIndex + 1];\n if (!nextArg) {\n return err({\n type: 'invalid_args',\n message: '--env requires KEY=VALUE argument',\n });\n }\n\n const envResult = parseEnvArg(nextArg);\n if (envResult.isErr()) {\n return err(envResult.error);\n }\n\n const [key, value] = envResult.value;\n state.env[key] = value;\n\n return ok(currentIndex + 1);\n};\n\n/**\n * --timeout オプションをパースする\n */\nconst parseTimeoutOption = (\n argv: string[],\n currentIndex: number,\n state: { timeout: number },\n): Result<number, CliError> => {\n const nextArg = argv[currentIndex + 1];\n if (!nextArg) {\n return err({\n type: 'invalid_args',\n message: '--timeout requires a number in milliseconds',\n });\n }\n\n const timeoutNum = Number.parseInt(nextArg, 10);\n if (Number.isNaN(timeoutNum) || timeoutNum <= 0) {\n return err({\n type: 'invalid_args',\n message: `--timeout must be a positive number, got: ${nextArg}`,\n });\n }\n\n state.timeout = timeoutNum;\n return ok(currentIndex + 1);\n};\n\n/**\n * --session オプションをパースする\n */\nconst parseSessionOption = (\n argv: string[],\n currentIndex: number,\n state: { session: string | undefined },\n): Result<number, CliError> => {\n const nextArg = argv[currentIndex + 1];\n if (!nextArg) {\n return err({\n type: 'invalid_args',\n message: '--session requires a session name',\n });\n }\n\n state.session = nextArg;\n return ok(currentIndex + 1);\n};\n\n/**\n * --env KEY=VALUE 引数をパースする\n *\n * 環境変数の設定値をKEY=VALUE形式から解析する。\n * =が含まれていない、またはKEYが空の場合はエラーを返す。\n * VALUEは空文字列でも許可される。\n *\n * @param arg - KEY=VALUE形式の文字列\n * @returns 成功時: [KEY, VALUE]のタプル、失敗時: エラー\n */\nconst parseEnvArg = (arg: string): Result<[string, string], CliError> => {\n const index = arg.indexOf('=');\n if (index === -1) {\n return err({\n type: 'invalid_args',\n message: `--env argument must be in KEY=VALUE format, got: ${arg}`,\n });\n }\n\n const key = arg.slice(0, index);\n const value = arg.slice(index + 1);\n\n if (key.length === 0) {\n return err({\n type: 'invalid_args',\n message: `--env KEY cannot be empty, got: ${arg}`,\n });\n }\n\n return ok([key, value]);\n};\n","import type { OutputTarget } from '../types';\n\n/**\n * 出力フォーマッター\n *\n * console.log禁止のため、process.stdout.write / process.stderr.write を使用する。\n * 進捗表示やメッセージの整形を担当するクラス。\n * 状態を持つため、classとして実装することが許可されている。\n */\nexport class OutputFormatter {\n /** 詳細ログ出力を行うかどうか */\n private verbose: boolean;\n /** スピナーのアニメーションフレーム */\n private spinnerFrames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n /** 現在表示中のスピナーフレームのインデックス */\n private spinnerIndex = 0;\n /** スピナーのsetIntervalのID(停止時にclearIntervalするため) */\n private spinnerIntervalId: NodeJS.Timeout | null = null;\n /** 現在表示中のスピナーメッセージ */\n private currentSpinnerMessage = '';\n\n /**\n * OutputFormatterのコンストラクタ\n *\n * @param verbose - 詳細ログ出力を行うかどうか\n */\n constructor(verbose: boolean) {\n this.verbose = verbose;\n }\n\n /**\n * 通常メッセージを出力\n *\n * 標準出力(stdout)にメッセージを出力します。\n * 一般的な情報や進捗状況を表示する際に使用します。\n *\n * @param message - 出力するメッセージ\n */\n info(message: string): void {\n this.write('stdout', message);\n }\n\n /**\n * エラーメッセージを出力\n *\n * 標準エラー出力(stderr)にメッセージを出力します。\n * エラーや警告メッセージを表示する際に使用します。\n *\n * @param message - 出力するエラーメッセージ\n */\n error(message: string): void {\n this.write('stderr', message);\n }\n\n /**\n * デバッグメッセージを出力(verboseモード時のみ)\n *\n * verboseフラグがtrueの場合のみ、標準エラー出力(stderr)に\n * デバッグメッセージを出力します。\n * \"[DEBUG]\"プレフィックスが自動的に付与されます。\n *\n * @param message - 出力するデバッグメッセージ\n */\n debug(message: string): void {\n if (this.verbose) {\n this.write('stderr', `[DEBUG] ${message}`);\n }\n }\n\n /**\n * 成功マーク付きメッセージ\n *\n * チェックマーク(✓)付きの成功メッセージを出力します。\n * オプションで実行時間(ミリ秒)を指定すると、秒単位で表示されます。\n *\n * @param message - 出力するメッセージ\n * @param durationMs - 実行時間(ミリ秒、省略可)\n */\n success(message: string, durationMs?: number): void {\n const duration = durationMs !== undefined ? ` (${(durationMs / 1000).toFixed(1)}s)` : '';\n this.info(` ✓ ${message}${duration}`);\n }\n\n /**\n * 失敗マーク付きメッセージ\n *\n * バツマーク(✗)付きの失敗メッセージを出力します。\n * オプションで実行時間(ミリ秒)を指定すると、秒単位で表示されます。\n *\n * @param message - 出力するメッセージ\n * @param durationMs - 実行時間(ミリ秒、省略可)\n */\n failure(message: string, durationMs?: number): void {\n const duration = durationMs !== undefined ? ` (${(durationMs / 1000).toFixed(1)}s)` : '';\n this.error(` ✗ ${message}${duration}`);\n }\n\n /**\n * インデント付きメッセージ(エラー詳細等)\n *\n * 指定されたレベル分のインデント(2スペース × レベル)を付けて\n * メッセージを標準エラー出力に出力します。\n * エラーの詳細情報や補足説明を階層的に表示する際に使用します。\n *\n * @param message - 出力するメッセージ\n * @param level - インデントレベル(デフォルト: 1)\n */\n indent(message: string, level = 1): void {\n const indent = ' '.repeat(level);\n this.error(`${indent}${message}`);\n }\n\n /**\n * スピナーを開始\n *\n * 指定されたメッセージと共にスピナーアニメーションを開始します。\n * スピナーは80msごとにフレームが更新されます。\n * 既に実行中のスピナーがある場合は、停止してから新しいスピナーを開始します。\n *\n * 注意: 必ずstopSpinner()を呼び出してスピナーを停止してください。\n * 停止しないとsetIntervalが残り続けます。\n *\n * @param message - スピナーと共に表示するメッセージ\n */\n startSpinner(message: string): void {\n this.currentSpinnerMessage = message;\n this.spinnerIndex = 0;\n\n // 既存のスピナーをクリア\n if (this.spinnerIntervalId !== null) {\n clearInterval(this.spinnerIntervalId);\n }\n\n // スピナーを表示\n this.renderSpinner();\n\n // 定期的に更新\n this.spinnerIntervalId = setInterval(() => {\n this.spinnerIndex = (this.spinnerIndex + 1) % this.spinnerFrames.length;\n this.renderSpinner();\n }, 80);\n }\n\n /**\n * スピナーを停止\n *\n * 実行中のスピナーを停止し、スピナー行をクリアします。\n * setIntervalを適切にクリアして、リソースリークを防ぎます。\n * スピナーが実行中でない場合は何もしません。\n */\n stopSpinner(): void {\n if (this.spinnerIntervalId !== null) {\n clearInterval(this.spinnerIntervalId);\n this.spinnerIntervalId = null;\n }\n\n // スピナー行をクリア\n this.clearLine();\n }\n\n /**\n * セクション区切り線\n *\n * 視覚的にセクションを区切るための水平線を出力します。\n * サマリー表示や大きな処理の区切りに使用します。\n */\n separator(): void {\n this.info('────────────────────────────────────────');\n }\n\n /**\n * 改行\n *\n * 空行を出力します。\n * メッセージ間に視覚的な余白を作る際に使用します。\n */\n newline(): void {\n this.write('stdout', '');\n }\n\n /**\n * 内部:書き込み処理\n *\n * 指定された出力先(stdout または stderr)にメッセージを書き込みます。\n * メッセージの末尾には自動的に改行文字が付与されます。\n *\n * @param target - 出力先('stdout' または 'stderr')\n * @param message - 出力するメッセージ\n */\n private write(target: OutputTarget, message: string): void {\n const output = target === 'stdout' ? process.stdout : process.stderr;\n output.write(`${message}\\n`);\n }\n\n /**\n * 内部:スピナーを描画\n *\n * 現在のスピナーフレームとメッセージを画面に描画します。\n * カーソルを行頭に戻してから描画することで、\n * 前のフレームを上書きしてアニメーション効果を実現します。\n */\n private renderSpinner(): void {\n const frame = this.spinnerFrames[this.spinnerIndex];\n this.clearLine();\n process.stdout.write(` ${frame} ${this.currentSpinnerMessage}`);\n }\n\n /**\n * 内部:現在行をクリア\n *\n * カーソルを行頭に戻し(\\r)、行全体をクリア(\\x1b[K)します。\n * スピナーのアニメーションや、前の出力を上書きする際に使用します。\n * ANSIエスケープシーケンスを使用しています。\n */\n private clearLine(): void {\n process.stdout.write('\\r\\x1b[K');\n }\n}\n\n/**\n * ヘルプメッセージを表示\n *\n * CLIの使用方法を標準出力に表示します。\n * コマンドラインオプション、サブコマンド、使用例などを含みます。\n * --help フラグまたは -h フラグが指定された際に呼び出されます。\n */\nexport const showHelp = (): void => {\n const helpText = `\nenbu - CLI for agent-browser workflow automation\n\nUSAGE:\n npx enbu [command] [options] [flow-files...]\n\nCOMMANDS:\n init Initialize a new project\n (default) Run flow files\n\nOPTIONS:\n -h, --help Show this help message\n -V, --version Show version number\n -v, --verbose Enable verbose logging\n --headed Show browser (disable headless mode)\n --env KEY=VALUE Set environment variable (can be used multiple times)\n --timeout <ms> Set timeout in milliseconds (default: 30000)\n --screenshot Save screenshot on failure\n --bail Stop on first failure\n --session <name> Set agent-browser session name\n\nEXAMPLES:\n npx enbu init\n npx enbu\n npx enbu login.flow.yaml\n npx enbu --headed --env USER=test login.flow.yaml\n npx enbu --bail login.flow.yaml checkout.flow.yaml\n\nFor more information, visit: https://github.com/9wick/enbu\n`;\n\n process.stdout.write(helpText);\n};\n\n/**\n * バージョン情報を表示\n *\n * CLIのバージョン番号を標準出力に表示します。\n * ビルド時に埋め込まれたバージョン情報(__VERSION__定数)を使用します。\n * --version フラグまたは -V フラグが指定された際に呼び出されます。\n *\n * 実装の詳細:\n * tsdown.config.tsのdefineオプションにより、__VERSION__定数が\n * ビルド時にpackage.jsonのバージョン情報で置換されます。\n * これにより、実行時のファイル読み込みオーバーヘッドがなく、\n * ビルド構造の変更にも影響を受けません。\n */\nexport const showVersion = (): void => {\n process.stdout.write(`${__VERSION__}\\n`);\n};\n","import { readFile, writeFile, mkdir, access } from 'node:fs/promises';\nimport { constants } from 'node:fs';\nimport { type ResultAsync, fromPromise } from 'neverthrow';\nimport type { CliError } from '../types';\n\n/**\n * ファイルが存在するか確認\n *\n * 指定されたパスにファイルまたはディレクトリが存在するかを確認する。\n * アクセス権限がない場合もfalseを返す。\n *\n * @param path - 確認対象のファイルまたはディレクトリのパス\n * @returns ファイルが存在する場合はtrue、存在しない場合またはアクセスできない場合はfalse\n */\nexport const fileExists = (path: string): Promise<boolean> => {\n return access(path, constants.F_OK)\n .then(() => true)\n .catch(() => false);\n};\n\n/**\n * ディレクトリを作成(存在しない場合のみ)\n *\n * 指定されたパスにディレクトリを作成する。\n * recursive オプションにより、親ディレクトリが存在しない場合も自動的に作成される。\n * 既にディレクトリが存在する場合はエラーにならず、成功として扱われる。\n *\n * @param path - 作成するディレクトリのパス\n * @returns 成功時: void、失敗時: CliError(type: 'execution_error')\n */\nexport const createDirectory = (path: string): ResultAsync<void, CliError> => {\n return fromPromise(\n mkdir(path, { recursive: true }),\n (error): CliError => ({\n type: 'execution_error',\n message: `Failed to create directory: ${path}`,\n cause: error,\n }),\n ).map(() => undefined);\n};\n\n/**\n * ファイルを書き込み\n *\n * 指定されたパスにテキストファイルを書き込む。\n * ファイルが既に存在する場合は上書きされる。\n * 親ディレクトリが存在しない場合はエラーとなるため、事前に createDirectory を実行すること。\n *\n * @param path - 書き込み先のファイルパス\n * @param content - 書き込むテキスト内容\n * @returns 成功時: void、失敗時: CliError(type: 'execution_error')\n */\nexport const writeFileContent = (path: string, content: string): ResultAsync<void, CliError> => {\n return fromPromise(\n writeFile(path, content, 'utf-8'),\n (error): CliError => ({\n type: 'execution_error',\n message: `Failed to write file: ${path}`,\n cause: error,\n }),\n ).map(() => undefined);\n};\n\n/**\n * ファイルを読み込み\n *\n * 指定されたパスからテキストファイルを読み込む。\n * ファイルが存在しない場合やアクセス権限がない場合はエラーを返す。\n * バイナリファイルの読み込みには対応していないため、UTF-8テキストファイルのみを対象とする。\n *\n * @param path - 読み込むファイルのパス\n * @returns 成功時: ファイルの内容(文字列)、失敗時: CliError(type: 'execution_error')\n */\nexport const readFileContent = (path: string): ResultAsync<string, CliError> => {\n return fromPromise(\n readFile(path, 'utf-8'),\n (error): CliError => ({\n type: 'execution_error',\n message: `Failed to read file: ${path}`,\n cause: error,\n }),\n );\n};\n","import { type Result, ok } from 'neverthrow';\nimport { createInterface } from 'node:readline';\nimport { resolve } from 'node:path';\nimport type { CliError } from '../types';\nimport { OutputFormatter } from '../output/formatter';\nimport { fileExists, createDirectory, writeFileContent, readFileContent } from '../utils/fs';\n\n/** 生成するディレクトリ */\nconst ABFLOW_DIR = '.abflow';\n\n/** サンプルフローファイルの内容 */\nconst SAMPLE_FLOW_YAML = `# enbuのサンプルフロー\nsteps:\n - open: https://example.com\n - click: \"More information...\"\n - assertVisible: \"Example Domain\"\n`;\n\n/**\n * initコマンドを実行\n *\n * プロジェクトの初期化を行い、以下の処理を実行する:\n * 1. .abflow/ ディレクトリを作成\n * 2. サンプルフローファイル example.enbu.yaml を生成\n * 3. .gitignore への追記を対話的に提案\n *\n * forceフラグがtrueの場合、既存ファイルを上書きする。\n * forceフラグがfalseの場合、既存ファイルはスキップされる。\n *\n * @param args - initコマンドの引数\n * @param args.force - 既存ファイルを強制的に上書きするかどうか\n * @param args.verbose - 詳細なログ出力を行うかどうか\n * @returns 成功時: void、失敗時: CliError\n */\nexport const runInitCommand = async (args: {\n force: boolean;\n verbose: boolean;\n}): Promise<Result<void, CliError>> => {\n const formatter = new OutputFormatter(args.verbose);\n\n formatter.info('Initializing enbu project...');\n\n // .abflow/ ディレクトリとサンプルファイルを作成\n const setupResult = await setupAbflowDirectory(args.force, formatter);\n if (setupResult.isErr()) {\n return setupResult;\n }\n\n // .gitignore への追記を提案\n await promptGitignoreUpdate(formatter);\n\n formatter.newline();\n formatter.info('Initialization complete!');\n formatter.info(`Try: npx enbu ${ABFLOW_DIR}/example.enbu.yaml`);\n\n return ok(undefined);\n};\n\n/**\n * .abflow/ ディレクトリとサンプルファイルを作成\n *\n * .abflow/ ディレクトリを作成し、その中にサンプルフローファイルを生成する。\n * forceフラグがfalseで既存ファイルが存在する場合はスキップする。\n *\n * @param force - 既存ファイルを強制的に上書きするかどうか\n * @param formatter - 出力フォーマッター\n * @returns 成功時: void、失敗時: CliError\n */\nconst setupAbflowDirectory = async (\n force: boolean,\n formatter: OutputFormatter,\n): Promise<Result<void, CliError>> => {\n // .abflow/ ディレクトリを作成\n const abflowPath = resolve(process.cwd(), ABFLOW_DIR);\n const abflowExists = await fileExists(abflowPath);\n\n if (abflowExists && !force) {\n formatter.success(`Directory already exists: ${ABFLOW_DIR}`);\n } else {\n const createDirResult = await createDirectory(abflowPath);\n if (createDirResult.isErr()) {\n return createDirResult;\n }\n formatter.success(`Created ${ABFLOW_DIR}/ directory`);\n }\n\n // example.enbu.yaml を生成\n const exampleFlowPath = resolve(abflowPath, 'example.enbu.yaml');\n const exampleFlowExists = await fileExists(exampleFlowPath);\n\n if (exampleFlowExists && !force) {\n formatter.success(`File already exists: ${ABFLOW_DIR}/example.enbu.yaml`);\n } else {\n const writeResult = await writeFileContent(exampleFlowPath, SAMPLE_FLOW_YAML);\n if (writeResult.isErr()) {\n return writeResult;\n }\n formatter.success(`Created ${ABFLOW_DIR}/example.enbu.yaml`);\n }\n\n return ok(undefined);\n};\n\n/**\n * .gitignore への追記を対話的に提案\n *\n * ユーザーに .gitignore への追記を提案し、了承された場合に .abflow/ を追記する。\n * .gitignore の更新に失敗した場合は、エラーメッセージと手動での追記方法を表示する。\n *\n * @param formatter - 出力フォーマッター\n */\nconst promptGitignoreUpdate = async (formatter: OutputFormatter): Promise<void> => {\n formatter.newline();\n const shouldUpdateGitignore = await askYesNo(\n 'Would you like to add .abflow/ to .gitignore? (y/N): ',\n );\n\n if (shouldUpdateGitignore) {\n const gitignorePath = resolve(process.cwd(), '.gitignore');\n const updateResult = await updateGitignore(gitignorePath);\n\n updateResult.match(\n () => formatter.success('Updated .gitignore'),\n (error) => {\n formatter.error(`Failed to update .gitignore: ${error.message}`);\n formatter.indent('You can manually add \".abflow/\" to your .gitignore file', 1);\n },\n );\n }\n};\n\n/**\n * Yes/No 質問を対話的に行う\n *\n * ユーザーに質問を表示し、標準入力から回答を受け取る。\n * 'y' または 'yes'(大文字小文字を区別しない)が入力された場合にtrueを返す。\n * それ以外の入力(空文字列を含む)の場合はfalseを返す。\n *\n * readlineのcreateInterfaceを使用して対話的な入力を実現している。\n * 入力完了後は必ずrl.close()を呼び出してリソースを解放する。\n *\n * @param question - ユーザーに表示する質問文\n * @returns ユーザーが 'y' または 'yes' を入力した場合はtrue、それ以外はfalse\n */\nconst askYesNo = (question: string): Promise<boolean> => {\n return new Promise((resolve) => {\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n rl.question(question, (answer) => {\n rl.close();\n const normalized = answer.trim().toLowerCase();\n resolve(normalized === 'y' || normalized === 'yes');\n });\n });\n};\n\n/**\n * .gitignore に .abflow/ を追記\n *\n * .gitignoreファイルに .abflow/ エントリを追加する。\n * 以下の条件に応じて処理が分岐する:\n *\n * 1. .gitignoreが存在しない場合:\n * - 新規に.gitignoreファイルを作成し、.abflow/を記述する\n *\n * 2. .gitignoreが存在し、既に.abflow/が含まれている場合:\n * - 何もせずに成功を返す(重複追記を防ぐ)\n *\n * 3. .gitignoreが存在し、.abflow/が含まれていない場合:\n * - ファイル末尾に.abflow/を追記する\n * - 元のファイルが改行で終わっていない場合は、改行を追加してから追記する\n *\n * @param path - .gitignoreファイルのパス\n * @returns 成功時: void、失敗時: CliError(type: 'execution_error')\n */\nconst updateGitignore = async (path: string): Promise<Result<void, CliError>> => {\n const exists = await fileExists(path);\n const entry = '.abflow/';\n\n if (!exists) {\n // .gitignore が存在しない場合、新規作成\n return writeFileContent(path, `${entry}\\n`);\n }\n\n // 既存の .gitignore を読み込み\n const readResult = await readFileContent(path);\n if (readResult.isErr()) {\n return readResult.andThen(() => ok(undefined));\n }\n\n const content = readResult.value;\n\n // 既に .abflow/ が含まれている場合はスキップ\n if (content.includes(entry)) {\n return ok(undefined);\n }\n\n // 追記\n const newContent = content.endsWith('\\n') ? `${content}${entry}\\n` : `${content}\\n${entry}\\n`;\n return writeFileContent(path, newContent);\n};\n","/**\n * runコマンドの実装\n *\n * フローファイルを読み込み、agent-browserで実行する。\n * 実行結果を表示し、終了コードを返す。\n */\n\nimport { type Result, ok, err, fromPromise } from 'neverthrow';\nimport { resolve } from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport { glob } from 'glob';\nimport type { CliError, FlowExecutionResult } from '../types';\nimport type { OutputFormatter } from '../output/formatter';\nimport {\n checkAgentBrowser,\n closeSession,\n type AgentBrowserError,\n} from '@packages/agent-browser-adapter';\nimport { parseFlowYaml, type Flow, executeFlow, type FlowResult } from '@packages/core';\n\n/**\n * runコマンドの引数\n */\ntype RunCommandArgs = {\n /** フローファイルパスの配列 */\n files: string[];\n /** ヘッドモードで実行するか */\n headed: boolean;\n /** 環境変数のマップ */\n env: Record<string, string>;\n /** タイムアウト時間(ミリ秒) */\n timeout: number;\n /** スクリーンショットを撮影するか */\n screenshot: boolean;\n /** 最初の失敗で停止するか */\n bail: boolean;\n /** セッション名 */\n session?: string;\n /** verboseモード */\n verbose: boolean;\n};\n\n/**\n * agent-browserのインストール状態を確認する\n *\n * @param formatter - 出力フォーマッター\n * @returns 成功時: void、失敗時: CliError\n */\nconst checkAgentBrowserInstallation = async (\n formatter: OutputFormatter,\n): Promise<Result<void, CliError>> => {\n formatter.info('Checking agent-browser...');\n formatter.debug('Checking agent-browser installation...');\n\n const checkResult = await checkAgentBrowser();\n\n return checkResult.match(\n () => {\n formatter.success('agent-browser is installed');\n formatter.newline();\n return ok(undefined);\n },\n (error) => {\n formatter.failure('agent-browser is not installed');\n formatter.newline();\n formatter.error('Error: agent-browser is not installed');\n formatter.error('Please install it with: npm install -g agent-browser');\n\n const errorMessage =\n error.type === 'not_installed'\n ? error.message\n : `${error.type}: ${error.type === 'command_failed' ? (error.errorMessage ?? error.stderr) : ''}`;\n\n return err({\n type: 'execution_error' as const,\n message: errorMessage,\n });\n },\n );\n};\n\n/**\n * フローファイルパスの配列を解決する\n *\n * ファイルが指定されていない場合、.abflow/ ディレクトリから検索する。\n *\n * @param files - 指定されたファイルパスの配列\n * @returns 成功時: 解決されたファイルパスの配列、失敗時: CliError\n */\nconst resolveFlowFiles = async (files: string[]): Promise<Result<string[], CliError>> => {\n if (files.length > 0) {\n // ファイルパスが指定されている場合、絶対パスに変換\n return ok(files.map((f) => resolve(process.cwd(), f)));\n }\n\n // 指定がない場合、.abflow/ 配下を検索\n const pattern = resolve(process.cwd(), '.abflow', '*.enbu.yaml');\n return fromPromise(\n glob(pattern),\n (error): CliError => ({\n type: 'execution_error' as const,\n message: 'Failed to search for flow files',\n cause: error,\n }),\n );\n};\n\n/**\n * ファイルパスからフローを読み込んでパースする\n *\n * @param filePath - フローファイルのパス\n * @returns 成功時: Flowオブジェクト、失敗時: CliError\n */\nconst loadFlowFromFile = async (filePath: string): Promise<Result<Flow, CliError>> => {\n // ファイル読み込み\n const readResult = await fromPromise<string, CliError>(\n readFile(filePath, 'utf-8'),\n (error): CliError => ({\n type: 'execution_error' as const,\n message: `Failed to read file: ${filePath}`,\n cause: error,\n }),\n );\n\n if (readResult.isErr()) {\n return err(readResult.error);\n }\n\n const yamlContent = readResult.value;\n\n // ファイル名を抽出(拡張子付き)\n const fileName = filePath.split('/').pop() ?? 'unknown.enbu.yaml';\n\n // YAMLをパース\n const parseResult = parseFlowYaml(yamlContent, fileName);\n return parseResult.mapErr(\n (parseError): CliError => ({\n type: 'execution_error' as const,\n message: `Failed to parse flow file: ${parseError.message}`,\n cause: parseError,\n }),\n );\n};\n\n/**\n * フローファイルを読み込む\n *\n * @param flowFiles - フローファイルパスの配列\n * @param formatter - 出力フォーマッター\n * @returns 成功時: Flowオブジェクトの配列、失敗時: CliError\n */\nconst loadFlows = async (\n flowFiles: string[],\n formatter: OutputFormatter,\n): Promise<Result<Flow[], CliError>> => {\n formatter.info('Loading flows...');\n formatter.debug(`Loading flows from: ${flowFiles.join(', ')}`);\n\n // 各ファイルを順次読み込み\n const flows: Flow[] = [];\n for (const filePath of flowFiles) {\n const loadResult = await loadFlowFromFile(filePath);\n if (loadResult.isErr()) {\n formatter.failure(`Failed to load flows: ${loadResult.error.message}`);\n return err(loadResult.error);\n }\n flows.push(loadResult.value);\n }\n\n formatter.success(`Loaded ${flows.length} flow(s)`);\n formatter.newline();\n\n return ok(flows);\n};\n\n/**\n * コマンド説明フォーマッター関数の型\n */\ntype CommandFormatter = (command: Flow['steps'][number]) => string;\n\n/**\n * コマンド説明のフォーマッター関数マップ\n */\nconst commandFormatters: Record<string, CommandFormatter> = {\n open: (cmd) => `open ${('url' in cmd && cmd.url) || ''}`,\n click: (cmd) =>\n 'selector' in cmd\n ? `click \"${cmd.selector}\"${'index' in cmd && cmd.index !== undefined ? ` [${cmd.index}]` : ''}`\n : 'click',\n type: (cmd) =>\n 'selector' in cmd && 'value' in cmd\n ? `type \"${cmd.selector}\" = \"${cmd.value}\"${'clear' in cmd && cmd.clear ? ' (clear)' : ''}`\n : 'type',\n fill: (cmd) =>\n 'selector' in cmd && 'value' in cmd ? `fill \"${cmd.selector}\" = \"${cmd.value}\"` : 'fill',\n press: (cmd) => `press ${'key' in cmd ? cmd.key : ''}`,\n hover: (cmd) => ('selector' in cmd ? `hover \"${cmd.selector}\"` : 'hover'),\n select: (cmd) =>\n 'selector' in cmd && 'value' in cmd ? `select \"${cmd.selector}\" = \"${cmd.value}\"` : 'select',\n scroll: (cmd) =>\n 'direction' in cmd && 'amount' in cmd ? `scroll ${cmd.direction} ${cmd.amount}px` : 'scroll',\n scrollIntoView: (cmd) =>\n 'selector' in cmd ? `scrollIntoView \"${cmd.selector}\"` : 'scrollIntoView',\n wait: (cmd) =>\n 'ms' in cmd ? `wait ${cmd.ms}ms` : 'target' in cmd ? `wait \"${cmd.target}\"` : 'wait',\n screenshot: (cmd) =>\n 'path' in cmd\n ? `screenshot ${cmd.path}${'fullPage' in cmd && cmd.fullPage ? ' (full page)' : ''}`\n : 'screenshot',\n snapshot: () => 'snapshot',\n eval: (cmd) =>\n 'script' in cmd\n ? `eval \"${cmd.script.substring(0, 50)}${cmd.script.length > 50 ? '...' : ''}\"`\n : 'eval',\n assertVisible: (cmd) => ('selector' in cmd ? `assertVisible \"${cmd.selector}\"` : 'assertVisible'),\n assertEnabled: (cmd) => ('selector' in cmd ? `assertEnabled \"${cmd.selector}\"` : 'assertEnabled'),\n assertChecked: (cmd) =>\n 'selector' in cmd\n ? `assertChecked \"${cmd.selector}\"${'checked' in cmd && cmd.checked === false ? ' (unchecked)' : ''}`\n : 'assertChecked',\n};\n\n/**\n * コマンドの説明を生成する\n *\n * @param command - コマンド\n * @returns コマンドの説明文字列\n */\nconst formatCommandDescription = (command: Flow['steps'][number]): string => {\n const formatter = commandFormatters[command.command];\n return formatter ? formatter(command) : 'unknown command';\n};\n\n/**\n * フローを実行しながら進捗を表示する\n *\n * @param flow - 実行するフロー\n * @param args - 実行オプション\n * @param sessionName - セッション名\n * @returns 成功時: FlowResult、失敗時: CliError\n */\nconst executeFlowWithProgress = async (\n flow: Flow,\n args: RunCommandArgs,\n sessionName: string,\n): Promise<Result<FlowResult, CliError>> => {\n // フロー実行\n const executeResult = await executeFlow(flow, {\n sessionName,\n headed: args.headed,\n env: args.env,\n commandTimeoutMs: args.timeout,\n screenshot: args.screenshot,\n bail: args.bail,\n });\n\n return executeResult.mapErr((agentError: AgentBrowserError): CliError => {\n const errorMessage =\n agentError.type === 'not_installed'\n ? agentError.message\n : agentError.type === 'parse_error'\n ? agentError.message\n : agentError.type === 'timeout'\n ? `Timeout: ${agentError.command} (${agentError.timeoutMs}ms)`\n : (agentError.errorMessage ?? agentError.stderr);\n\n return {\n type: 'execution_error' as const,\n message: errorMessage,\n cause: agentError,\n };\n });\n};\n\n/**\n * 各ステップの結果を表示する(verboseモードのみ)\n */\nconst displayStepResults = (steps: FlowResult['steps'], formatter: OutputFormatter): void => {\n formatter.newline();\n formatter.indent('Steps:', 1);\n for (const step of steps) {\n const stepDesc = formatCommandDescription(step.command);\n const statusIcon = step.status === 'passed' ? '✓' : '✗';\n formatter.indent(`${statusIcon} Step ${step.index + 1}: ${stepDesc} (${step.duration}ms)`, 2);\n if (step.error) {\n formatter.indent(`Error: ${step.error.message}`, 3);\n }\n }\n};\n\n/**\n * フロー実行結果を表示する\n *\n * @param flow - 実行したフロー\n * @param result - フロー実行結果\n * @param formatter - 出力フォーマッター\n * @param verbose - verboseモードフラグ\n */\nconst displayFlowResult = (\n flow: Flow,\n result: FlowResult,\n formatter: OutputFormatter,\n verbose: boolean,\n): void => {\n const duration = result.duration;\n\n formatter.newline();\n\n if (result.status === 'passed') {\n formatter.success(`PASSED: ${flow.name}.enbu.yaml`, duration);\n } else {\n formatter.failure(`FAILED: ${flow.name}.enbu.yaml`, duration);\n if (result.error) {\n formatter.indent(`Step ${result.error.stepIndex + 1} failed: ${result.error.message}`, 1);\n if (result.error.screenshot) {\n formatter.indent(`Screenshot: ${result.error.screenshot}`, 1);\n }\n }\n }\n\n // 各ステップの結果を表示(verboseモードのみ)\n if (verbose) {\n displayStepResults(result.steps, formatter);\n }\n\n formatter.newline();\n};\n\n/**\n * 全てのフローを実行する\n *\n * @param flows - 実行するフロー配列\n * @param args - 実行オプション\n * @param formatter - 出力フォーマッター\n * @returns フロー実行結果のサマリー\n */\nconst executeAllFlows = async (\n flows: Flow[],\n args: RunCommandArgs,\n formatter: OutputFormatter,\n): Promise<FlowExecutionResult> => {\n let passed = 0;\n let failed = 0;\n const startTime = Date.now();\n\n for (const flow of flows) {\n formatter.info(`Running: ${flow.name}.enbu.yaml`);\n formatter.debug(`Executing flow: ${flow.name} (${flow.steps.length} steps)`);\n\n const flowStartTime = Date.now();\n\n // セッション名を生成\n // args.sessionが指定されている場合でも、各フローごとにユニークなセッション名を生成する\n // これにより、複数フロー実行時に最初のフローがセッションをクローズしても\n // 2番目以降のフローが影響を受けないようにする\n const sessionName = `abf-${args.session || flow.name}-${Date.now()}`;\n\n // フロー実行\n const executeResult = await executeFlowWithProgress(flow, args, sessionName);\n\n await executeResult.match(\n async (result) => {\n displayFlowResult(flow, result, formatter, args.verbose);\n\n if (result.status === 'passed') {\n passed++;\n // 正常終了時はセッションをクローズ\n const closeResult = await closeSession(sessionName);\n closeResult.mapErr((error) => {\n formatter.debug(`Failed to close session: ${error.type}`);\n });\n } else {\n failed++;\n // 失敗時はデバッグ案内を表示\n formatter.info('💡 Debug: To inspect the browser state, run:');\n formatter.indent(`npx agent-browser snapshot --session ${sessionName}`, 1);\n }\n },\n async (error) => {\n failed++;\n const duration = Date.now() - flowStartTime;\n formatter.newline();\n formatter.failure(`FAILED: ${flow.name}.enbu.yaml`, duration);\n formatter.indent(error.message, 1);\n formatter.newline();\n // executeFlowWithProgressがerrを返した場合、初期化エラーなどで\n // セッションが作成されていない可能性があるため、デバッグ案内は表示しない\n // (result.status === 'failed'の場合のみセッションが確実に存在する)\n },\n );\n\n // --bail フラグが指定されていて、失敗した場合は中断\n if (args.bail && failed > 0) {\n formatter.error('Stopping due to --bail flag');\n formatter.newline();\n break;\n }\n }\n\n // サマリー表示\n formatter.separator();\n const totalDuration = Date.now() - startTime;\n const total = passed + failed;\n formatter.info(\n `Summary: ${passed}/${total} flows passed (${(totalDuration / 1000).toFixed(1)}s)`,\n );\n\n if (failed > 0) {\n formatter.newline();\n formatter.error('Exit code: 1');\n }\n\n return { passed, failed, total };\n};\n\n/**\n * runコマンドを実行する\n *\n * @param args - runコマンドの引数\n * @param formatter - 出力フォーマッター\n * @returns 成功時: 実行結果、失敗時: CliError\n */\nexport const runFlowCommand = async (\n args: RunCommandArgs,\n formatter: OutputFormatter,\n): Promise<Result<FlowExecutionResult, CliError>> => {\n formatter.debug(`Args: ${JSON.stringify(args)}`);\n\n // 1. agent-browserインストール確認\n const checkResult = await checkAgentBrowserInstallation(formatter);\n if (checkResult.isErr()) {\n return err(checkResult.error);\n }\n\n // 2. フローファイル解決\n const flowFilesResult = await resolveFlowFiles(args.files);\n if (flowFilesResult.isErr()) {\n return err(flowFilesResult.error);\n }\n\n const flowFiles = flowFilesResult.value;\n\n if (flowFiles.length === 0) {\n formatter.error('Error: No flow files found');\n formatter.error('Try: npx enbu init');\n return err({\n type: 'execution_error' as const,\n message: 'No flow files found',\n });\n }\n\n // 3. フローファイル読み込み\n const loadResult = await loadFlows(flowFiles, formatter);\n if (loadResult.isErr()) {\n return err(loadResult.error);\n }\n\n const flows = loadResult.value;\n\n // 4. フロー実行\n const executionResult = await executeAllFlows(flows, args, formatter);\n\n return ok(executionResult);\n};\n","/**\n * 終了コード定義\n */\nexport const EXIT_CODE = {\n /** 成功 */\n SUCCESS: 0,\n /** フロー実行失敗 */\n FLOW_FAILED: 1,\n /** 実行エラー(agent-browser未インストール等) */\n EXECUTION_ERROR: 2,\n} as const;\n\n/**\n * 終了コードで終了する\n *\n * @param code - 終了コード\n */\nexport const exitWithCode = (code: number): never => {\n process.exit(code);\n};\n","import { parseArgs } from './args-parser';\nimport { runInitCommand } from './commands/init';\nimport { runFlowCommand } from './commands/run';\nimport { showHelp, showVersion, OutputFormatter } from './output/formatter';\nimport { EXIT_CODE, exitWithCode } from './output/exit-code';\n\n/**\n * CLIエントリポイント\n *\n * コマンドライン引数をパースし、適切なコマンドを実行する。\n * 実行結果に基づいて終了コードを設定する。\n */\nconst main = async (): Promise<void> => {\n // 引数パース\n const argsResult = parseArgs(process.argv.slice(2));\n\n // neverthrowのmatchパターンで処理する\n await argsResult.match(\n async (args) => {\n // 引数のパースに成功した場合\n\n // バージョン表示\n if (args.version) {\n showVersion();\n exitWithCode(EXIT_CODE.SUCCESS);\n }\n\n // ヘルプ表示\n if (args.help) {\n showHelp();\n exitWithCode(EXIT_CODE.SUCCESS);\n }\n\n // コマンド実行\n if (args.command === 'init') {\n const result = await runInitCommand({\n force: args.force,\n verbose: args.verbose,\n });\n\n result.match(\n () => exitWithCode(EXIT_CODE.SUCCESS),\n (error) => {\n process.stderr.write(`Error: ${error.message}\\n`);\n exitWithCode(EXIT_CODE.EXECUTION_ERROR);\n },\n );\n } else {\n const formatter = new OutputFormatter(args.verbose);\n const result = await runFlowCommand(\n {\n files: args.files,\n headed: args.headed,\n env: args.env,\n timeout: args.timeout,\n screenshot: args.screenshot,\n bail: args.bail,\n session: args.session,\n verbose: args.verbose,\n },\n formatter,\n );\n\n result.match(\n (executionResult) => {\n const exitCode = executionResult.failed > 0 ? EXIT_CODE.FLOW_FAILED : EXIT_CODE.SUCCESS;\n exitWithCode(exitCode);\n },\n (error) => {\n process.stderr.write(`Error: ${error.message}\\n`);\n exitWithCode(EXIT_CODE.EXECUTION_ERROR);\n },\n );\n }\n },\n (error) => {\n // 引数のパースに失敗した場合\n process.stderr.write(`Error: ${error.message}\\n`);\n process.stderr.write('Try: npx enbu --help\\n');\n exitWithCode(EXIT_CODE.EXECUTION_ERROR);\n },\n );\n};\n\n// エントリポイント実行\nmain();\n"],"mappings":"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"}
1
+ {"version":3,"file":"main.mjs","names":["config","resolve","v","ok","err","fromPromise","fromThrowable","DEFAULT_TIMEOUT_MS","path","path","glob","regExpEscape","star","#hasMagic","#parent","#root","#options","#negs","#filledNegs","#parentIndex","#parts","#toString","#parseAST","i","acc","ext","#emptyExt","glob","hasMagic","#fillNegs","#parseGlob","#uflag","start","#partsToRegExp","ext","defaultPlatform","path","Minimatch","AST","set","#constructing","#perf","#starts","#ttls","#autopurgeTimers","#sizes","#keyMap","#keyList","#valList","#next","#prev","#head","#tail","#free","#isBackgroundFetch","#backgroundFetch","#moveToTail","#indexes","#rindexes","#isStale","#max","#maxSize","#calculatedSize","#size","#fetchMethod","#memoMethod","#dispose","#onInsert","#disposeAfter","#hasFetchMethod","#disposed","#hasDispose","#hasOnInsert","#hasDisposeAfter","#initializeSizeTracking","#initializeTTLTracking","#setItemTTL","#delete","#updateItemAge","#statusTTL","#removeItemSize","#requireSize","#addItemSize","#evict","#isValidIndex","v","bf","#connect","#clear","p","ret","resolve","res","realpathSync","rps","readdirCB","#dev","#mode","#nlink","#uid","#gid","#rdev","#blksize","#ino","#size","#blocks","#atimeMs","#mtimeMs","#ctimeMs","#birthtimeMs","#atime","#mtime","#ctime","#birthtime","#matchName","#type","#children","#fullpath","#relative","#relativePosix","#fs","#depth","path","#resolveParts","#fullpathPosix","p","#linkTarget","#realpath","#readlinkFail","#markENOENT","#markChildrenENOENT","#markENOTDIR","#readdirMaybePromoteChild","#readdirAddNewChild","#readdirPromoteChild","#applyStat","#lstatFail","#readdirCBInFlight","#onReaddirCB","#readdirFail","#readdirAddChild","#readdirSuccess","#callOnReaddirCB","#asyncReaddirInFlight","resolve","#markENOREALPATH","fs","#resolveCache","#resolvePosixCache","sep","filter","process","sync","#patternList","#globList","#index","#platform","#globString","#rest","#isAbsolute","#isUNC","#isDrive","#followGlobstar","defaultPlatform","path","rest","path","#sep","#ignore","#onResume","#ignored","abs","#childrenIgnored","target","set","proc","DEBUG","debugLog","isRecord$1","isRecord","SCALAR","isScalar","isCollection","identity","BREAK","SKIP","REMOVE","visit","path","identity","visit","tags","version","identity","visit","anchors","applyReviver","identity","toJS","res","applyReviver","identity","toJS","res","anchors","visit","identity","Node","toJS","Alias","identity","Node","toJS","Scalar","Alias","identity","Scalar","match","tags","createNode","map","schema","node","createNode","identity","path","Collection","schema","stringifyComment","foldFlowLines","i","end","Scalar","isBlock","tags","stringifyString","anchors","identity","stringifyComment","stringifyString","match","tags","anchors$1","stringify","identity","Scalar","stringify","stringifyComment","stringifyPair","node_process","identity","Scalar","merge","map","value","log","merge","stringify","identity","toJS","addPairToJSMap","map","createNode","addPairToJSMap","identity","Pair","schema","identity","stringify","stringifyComment","stringifyCollection","comment","str","stringifyCollection","Collection","identity","Pair","Scalar","YAMLMap","schema","map","identity","YAMLMap","map","schema","createNode","Collection","identity","Scalar","toJS","YAMLSeq","schema","seq","identity","YAMLSeq","seq","schema","stringifyString","string","Scalar","Scalar","stringifyNumber","Scalar","stringifyNumber","floatNaN","floatExp","float","stringifyNumber","intIdentify","intResolve","intStringify","intOct","int","intHex","map","_null","seq","string","bool","float","int","schema","Scalar","map","seq","intIdentify","schema","Scalar","stringifyString","binary","identity","Pair","Scalar","YAMLSeq","seq","pairs","schema","identity","toJS","YAMLMap","YAMLSeq","pairs","map","pairs$1","schema","omap","seq","Scalar","Scalar","stringifyNumber","float","stringifyNumber","n","int","identity","Pair","YAMLMap","schema","set","map","res","timestamp","match","map","_null","seq","string","binary","bool","float","int","merge","omap","pairs","set","timestamp","schema","map","seq","string","tags","identity","Schema","schema","merge","identity","stringify","stringifyDocument","Alias","identity","Pair","Schema","directives","Document","version","path","res","resolveProps","utilContainsNewline","identity","Pair","YAMLMap","resolveProps","utilContainsNewline","utilFlowIndentCheck","utilMapIncludes","resolveBlockMap","map","sep","composeNode","composeEmptyNode","YAMLSeq","resolveProps","resolveBlockSeq","seq","composeNode","composeEmptyNode","resolveEnd","sep","identity","Pair","YAMLMap","YAMLSeq","resolveEnd","resolveProps","resolveFlowCollection","isMap","sep","composeNode","composeEmptyNode","map","identity","Scalar","YAMLMap","YAMLSeq","CN","composeCollection","Scalar","resolveBlockScalar","value","end","sep","Scalar","resolveEnd","resolveFlowScalar","match","sep","identity","Scalar","resolveBlockScalar","resolveFlowScalar","composeScalar","range","schema","tag","directives","Alias","identity","resolveEnd","composeNode","Document","resolveEnd","composeDoc","directives","node_process","Document","errors","identity","errors","stringify","cst","sep","visit","cst","path","cst","i","ch","cst","lexer","sep","map","start","fs","seq","composer","Document","errors","identity","lineCounter","parser","parser$1","composer$1","parse","path","os","parse","match","err","debug","path$1","resolve","timestamp","match","flows: Flow[]","commandFormatters: Record<string, CommandFormatter>","duration"],"sources":["../../../node_modules/.pnpm/neverthrow@8.2.0/node_modules/neverthrow/dist/index.cjs.js","../src/args-parser.ts","../src/output/formatter.ts","../src/utils/fs.ts","../src/commands/init.ts","../../../node_modules/.pnpm/@isaacs+balanced-match@4.0.1/node_modules/@isaacs/balanced-match/dist/esm/index.js","../../../node_modules/.pnpm/@isaacs+brace-expansion@5.0.0/node_modules/@isaacs/brace-expansion/dist/esm/index.js","../../../node_modules/.pnpm/minimatch@10.1.1/node_modules/minimatch/dist/esm/assert-valid-pattern.js","../../../node_modules/.pnpm/minimatch@10.1.1/node_modules/minimatch/dist/esm/brace-expressions.js","../../../node_modules/.pnpm/minimatch@10.1.1/node_modules/minimatch/dist/esm/unescape.js","../../../node_modules/.pnpm/minimatch@10.1.1/node_modules/minimatch/dist/esm/ast.js","../../../node_modules/.pnpm/minimatch@10.1.1/node_modules/minimatch/dist/esm/escape.js","../../../node_modules/.pnpm/minimatch@10.1.1/node_modules/minimatch/dist/esm/index.js","../../../node_modules/.pnpm/lru-cache@11.2.4/node_modules/lru-cache/dist/esm/index.js","../../../node_modules/.pnpm/minipass@7.1.2/node_modules/minipass/dist/esm/index.js","../../../node_modules/.pnpm/path-scurry@2.0.1/node_modules/path-scurry/dist/esm/index.js","../../../node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/esm/pattern.js","../../../node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/esm/ignore.js","../../../node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/esm/processor.js","../../../node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/esm/walker.js","../../../node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/esm/glob.js","../../../node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/esm/has-magic.js","../../../node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/esm/index.js","../../../packages/agent-browser-adapter/dist/index.mjs","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/identity.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/visit.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/doc/directives.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/doc/anchors.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/doc/applyReviver.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/toJS.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/Node.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/Alias.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/Scalar.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/doc/createNode.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/Collection.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/stringify/stringifyComment.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/stringify/foldFlowLines.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/stringify/stringifyString.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/stringify/stringify.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/stringify/stringifyPair.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/log.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/merge.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/addPairToJSMap.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/Pair.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/stringify/stringifyCollection.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/YAMLMap.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/common/map.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/YAMLSeq.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/common/seq.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/common/string.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/common/null.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/core/bool.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/stringify/stringifyNumber.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/core/float.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/core/int.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/core/schema.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/json/schema.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/binary.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/pairs.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/omap.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/bool.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/float.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/int.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/set.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/schema.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/tags.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/Schema.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/stringify/stringifyDocument.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/doc/Document.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/errors.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/resolve-props.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/util-contains-newline.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/util-flow-indent-check.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/util-map-includes.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/resolve-block-map.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/resolve-block-seq.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/resolve-end.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/resolve-flow-collection.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/compose-collection.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/resolve-block-scalar.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/resolve-flow-scalar.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/compose-scalar.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/util-empty-scalar-position.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/compose-node.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/compose-doc.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/composer.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/parse/cst-scalar.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/parse/cst-stringify.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/parse/cst-visit.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/parse/cst.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/parse/lexer.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/parse/line-counter.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/parse/parser.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/public-api.js","../../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/index.js","../../../node_modules/.pnpm/dotenv@17.2.3/node_modules/dotenv/package.json","../../../node_modules/.pnpm/dotenv@17.2.3/node_modules/dotenv/lib/main.js","../../../packages/core/dist/index.mjs","../src/commands/run.ts","../src/output/exit-code.ts","../src/main.ts"],"sourcesContent":["'use strict';\n\nconst defaultErrorConfig = {\r\n withStackTrace: false,\r\n};\r\n// Custom error object\r\n// Context / discussion: https://github.com/supermacro/neverthrow/pull/215\r\nconst createNeverThrowError = (message, result, config = defaultErrorConfig) => {\r\n const data = result.isOk()\r\n ? { type: 'Ok', value: result.value }\r\n : { type: 'Err', value: result.error };\r\n const maybeStack = config.withStackTrace ? new Error().stack : undefined;\r\n return {\r\n data,\r\n message,\r\n stack: maybeStack,\r\n };\r\n};\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nfunction __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nfunction __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nfunction __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nfunction __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nfunction __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nclass ResultAsync {\r\n constructor(res) {\r\n this._promise = res;\r\n }\r\n static fromSafePromise(promise) {\r\n const newPromise = promise.then((value) => new Ok(value));\r\n return new ResultAsync(newPromise);\r\n }\r\n static fromPromise(promise, errorFn) {\r\n const newPromise = promise\r\n .then((value) => new Ok(value))\r\n .catch((e) => new Err(errorFn(e)));\r\n return new ResultAsync(newPromise);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n static fromThrowable(fn, errorFn) {\r\n return (...args) => {\r\n return new ResultAsync((() => __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n return new Ok(yield fn(...args));\r\n }\r\n catch (error) {\r\n return new Err(errorFn ? errorFn(error) : error);\r\n }\r\n }))());\r\n };\r\n }\r\n static combine(asyncResultList) {\r\n return combineResultAsyncList(asyncResultList);\r\n }\r\n static combineWithAllErrors(asyncResultList) {\r\n return combineResultAsyncListWithAllErrors(asyncResultList);\r\n }\r\n map(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isErr()) {\r\n return new Err(res.error);\r\n }\r\n return new Ok(yield f(res.value));\r\n })));\r\n }\r\n andThrough(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isErr()) {\r\n return new Err(res.error);\r\n }\r\n const newRes = yield f(res.value);\r\n if (newRes.isErr()) {\r\n return new Err(newRes.error);\r\n }\r\n return new Ok(res.value);\r\n })));\r\n }\r\n andTee(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isErr()) {\r\n return new Err(res.error);\r\n }\r\n try {\r\n yield f(res.value);\r\n }\r\n catch (e) {\r\n // Tee does not care about the error\r\n }\r\n return new Ok(res.value);\r\n })));\r\n }\r\n orTee(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isOk()) {\r\n return new Ok(res.value);\r\n }\r\n try {\r\n yield f(res.error);\r\n }\r\n catch (e) {\r\n // Tee does not care about the error\r\n }\r\n return new Err(res.error);\r\n })));\r\n }\r\n mapErr(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isOk()) {\r\n return new Ok(res.value);\r\n }\r\n return new Err(yield f(res.error));\r\n })));\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n andThen(f) {\r\n return new ResultAsync(this._promise.then((res) => {\r\n if (res.isErr()) {\r\n return new Err(res.error);\r\n }\r\n const newValue = f(res.value);\r\n return newValue instanceof ResultAsync ? newValue._promise : newValue;\r\n }));\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n orElse(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isErr()) {\r\n return f(res.error);\r\n }\r\n return new Ok(res.value);\r\n })));\r\n }\r\n match(ok, _err) {\r\n return this._promise.then((res) => res.match(ok, _err));\r\n }\r\n unwrapOr(t) {\r\n return this._promise.then((res) => res.unwrapOr(t));\r\n }\r\n /**\r\n * @deprecated will be removed in 9.0.0.\r\n *\r\n * You can use `safeTry` without this method.\r\n * @example\r\n * ```typescript\r\n * safeTry(async function* () {\r\n * const okValue = yield* yourResult\r\n * })\r\n * ```\r\n * Emulates Rust's `?` operator in `safeTry`'s body. See also `safeTry`.\r\n */\r\n safeUnwrap() {\r\n return __asyncGenerator(this, arguments, function* safeUnwrap_1() {\r\n return yield __await(yield __await(yield* __asyncDelegator(__asyncValues(yield __await(this._promise.then((res) => res.safeUnwrap()))))));\r\n });\r\n }\r\n // Makes ResultAsync implement PromiseLike<Result>\r\n then(successCallback, failureCallback) {\r\n return this._promise.then(successCallback, failureCallback);\r\n }\r\n [Symbol.asyncIterator]() {\r\n return __asyncGenerator(this, arguments, function* _a() {\r\n const result = yield __await(this._promise);\r\n if (result.isErr()) {\r\n // @ts-expect-error -- This is structurally equivalent and safe\r\n yield yield __await(errAsync(result.error));\r\n }\r\n // @ts-expect-error -- This is structurally equivalent and safe\r\n return yield __await(result.value);\r\n });\r\n }\r\n}\r\nfunction okAsync(value) {\r\n return new ResultAsync(Promise.resolve(new Ok(value)));\r\n}\r\nfunction errAsync(err) {\r\n return new ResultAsync(Promise.resolve(new Err(err)));\r\n}\r\nconst fromPromise = ResultAsync.fromPromise;\r\nconst fromSafePromise = ResultAsync.fromSafePromise;\r\nconst fromAsyncThrowable = ResultAsync.fromThrowable;\n\n/**\r\n * Short circuits on the FIRST Err value that we find\r\n */\r\nconst combineResultList = (resultList) => {\r\n let acc = ok([]);\r\n for (const result of resultList) {\r\n if (result.isErr()) {\r\n acc = err(result.error);\r\n break;\r\n }\r\n else {\r\n acc.map((list) => list.push(result.value));\r\n }\r\n }\r\n return acc;\r\n};\r\n/* This is the typesafe version of Promise.all\r\n *\r\n * Takes a list of ResultAsync<T, E> and success if all inner results are Ok values\r\n * or fails if one (or more) of the inner results are Err values\r\n */\r\nconst combineResultAsyncList = (asyncResultList) => ResultAsync.fromSafePromise(Promise.all(asyncResultList)).andThen(combineResultList);\r\n/**\r\n * Give a list of all the errors we find\r\n */\r\nconst combineResultListWithAllErrors = (resultList) => {\r\n let acc = ok([]);\r\n for (const result of resultList) {\r\n if (result.isErr() && acc.isErr()) {\r\n acc.error.push(result.error);\r\n }\r\n else if (result.isErr() && acc.isOk()) {\r\n acc = err([result.error]);\r\n }\r\n else if (result.isOk() && acc.isOk()) {\r\n acc.value.push(result.value);\r\n }\r\n // do nothing when result.isOk() && acc.isErr()\r\n }\r\n return acc;\r\n};\r\nconst combineResultAsyncListWithAllErrors = (asyncResultList) => ResultAsync.fromSafePromise(Promise.all(asyncResultList)).andThen(combineResultListWithAllErrors);\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\r\nexports.Result = void 0;\r\n(function (Result) {\r\n /**\r\n * Wraps a function with a try catch, creating a new function with the same\r\n * arguments but returning `Ok` if successful, `Err` if the function throws\r\n *\r\n * @param fn function to wrap with ok on success or err on failure\r\n * @param errorFn when an error is thrown, this will wrap the error result if provided\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n function fromThrowable(fn, errorFn) {\r\n return (...args) => {\r\n try {\r\n const result = fn(...args);\r\n return ok(result);\r\n }\r\n catch (e) {\r\n return err(errorFn ? errorFn(e) : e);\r\n }\r\n };\r\n }\r\n Result.fromThrowable = fromThrowable;\r\n function combine(resultList) {\r\n return combineResultList(resultList);\r\n }\r\n Result.combine = combine;\r\n function combineWithAllErrors(resultList) {\r\n return combineResultListWithAllErrors(resultList);\r\n }\r\n Result.combineWithAllErrors = combineWithAllErrors;\r\n})(exports.Result || (exports.Result = {}));\r\nfunction ok(value) {\r\n return new Ok(value);\r\n}\r\nfunction err(err) {\r\n return new Err(err);\r\n}\r\nfunction safeTry(body) {\r\n const n = body().next();\r\n if (n instanceof Promise) {\r\n return new ResultAsync(n.then((r) => r.value));\r\n }\r\n return n.value;\r\n}\r\nclass Ok {\r\n constructor(value) {\r\n this.value = value;\r\n }\r\n isOk() {\r\n return true;\r\n }\r\n isErr() {\r\n return !this.isOk();\r\n }\r\n map(f) {\r\n return ok(f(this.value));\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n mapErr(_f) {\r\n return ok(this.value);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n andThen(f) {\r\n return f(this.value);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n andThrough(f) {\r\n return f(this.value).map((_value) => this.value);\r\n }\r\n andTee(f) {\r\n try {\r\n f(this.value);\r\n }\r\n catch (e) {\r\n // Tee doesn't care about the error\r\n }\r\n return ok(this.value);\r\n }\r\n orTee(_f) {\r\n return ok(this.value);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n orElse(_f) {\r\n return ok(this.value);\r\n }\r\n asyncAndThen(f) {\r\n return f(this.value);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n asyncAndThrough(f) {\r\n return f(this.value).map(() => this.value);\r\n }\r\n asyncMap(f) {\r\n return ResultAsync.fromSafePromise(f(this.value));\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n unwrapOr(_v) {\r\n return this.value;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n match(ok, _err) {\r\n return ok(this.value);\r\n }\r\n safeUnwrap() {\r\n const value = this.value;\r\n /* eslint-disable-next-line require-yield */\r\n return (function* () {\r\n return value;\r\n })();\r\n }\r\n _unsafeUnwrap(_) {\r\n return this.value;\r\n }\r\n _unsafeUnwrapErr(config) {\r\n throw createNeverThrowError('Called `_unsafeUnwrapErr` on an Ok', this, config);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias, require-yield\r\n *[Symbol.iterator]() {\r\n return this.value;\r\n }\r\n}\r\nclass Err {\r\n constructor(error) {\r\n this.error = error;\r\n }\r\n isOk() {\r\n return false;\r\n }\r\n isErr() {\r\n return !this.isOk();\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n map(_f) {\r\n return err(this.error);\r\n }\r\n mapErr(f) {\r\n return err(f(this.error));\r\n }\r\n andThrough(_f) {\r\n return err(this.error);\r\n }\r\n andTee(_f) {\r\n return err(this.error);\r\n }\r\n orTee(f) {\r\n try {\r\n f(this.error);\r\n }\r\n catch (e) {\r\n // Tee doesn't care about the error\r\n }\r\n return err(this.error);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n andThen(_f) {\r\n return err(this.error);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n orElse(f) {\r\n return f(this.error);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n asyncAndThen(_f) {\r\n return errAsync(this.error);\r\n }\r\n asyncAndThrough(_f) {\r\n return errAsync(this.error);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n asyncMap(_f) {\r\n return errAsync(this.error);\r\n }\r\n unwrapOr(v) {\r\n return v;\r\n }\r\n match(_ok, err) {\r\n return err(this.error);\r\n }\r\n safeUnwrap() {\r\n const error = this.error;\r\n return (function* () {\r\n yield err(error);\r\n throw new Error('Do not use this generator out of `safeTry`');\r\n })();\r\n }\r\n _unsafeUnwrap(config) {\r\n throw createNeverThrowError('Called `_unsafeUnwrap` on an Err', this, config);\r\n }\r\n _unsafeUnwrapErr(_) {\r\n return this.error;\r\n }\r\n *[Symbol.iterator]() {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const self = this;\r\n // @ts-expect-error -- This is structurally equivalent and safe\r\n yield self;\r\n // @ts-expect-error -- This is structurally equivalent and safe\r\n return self;\r\n }\r\n}\r\nconst fromThrowable = exports.Result.fromThrowable;\r\n//#endregion\n\nexports.Err = Err;\nexports.Ok = Ok;\nexports.ResultAsync = ResultAsync;\nexports.err = err;\nexports.errAsync = errAsync;\nexports.fromAsyncThrowable = fromAsyncThrowable;\nexports.fromPromise = fromPromise;\nexports.fromSafePromise = fromSafePromise;\nexports.fromThrowable = fromThrowable;\nexports.ok = ok;\nexports.okAsync = okAsync;\nexports.safeTry = safeTry;\n","import type { CliError, ParsedArgs } from './types';\nimport { type Result, err, ok } from 'neverthrow';\n\n/** デフォルトタイムアウト: 30秒 */\nconst DEFAULT_TIMEOUT_MS = 30000;\n\n/**\n * コマンドライン引数をパースする\n *\n * process.argvから渡された引数を解析し、ParsedArgs型に変換する。\n * バージョンフラグが指定されている場合は、他の引数に関わらずバージョンモードとして返す。\n * ヘルプフラグが指定されている場合は、他の引数に関わらずヘルプモードとして返す。\n * 最初の位置引数がinitの場合はinitコマンド、それ以外はrunコマンドとして扱う。\n *\n * @param argv - process.argv(インデックス2以降)\n * @returns パース済み引数、またはエラー\n */\nexport const parseArgs = (argv: string[]): Result<ParsedArgs, CliError> => {\n // バージョンフラグの確認\n if (argv.includes('-V') || argv.includes('--version')) {\n return ok({\n command: 'run',\n help: false,\n version: true,\n verbose: false,\n files: [],\n headed: false,\n env: {},\n timeout: DEFAULT_TIMEOUT_MS,\n screenshot: false,\n bail: false,\n progressJson: false,\n });\n }\n\n // ヘルプフラグの確認\n if (argv.includes('-h') || argv.includes('--help')) {\n return ok({\n command: 'run',\n help: true,\n version: false,\n verbose: false,\n files: [],\n headed: false,\n env: {},\n timeout: DEFAULT_TIMEOUT_MS,\n screenshot: false,\n bail: false,\n progressJson: false,\n });\n }\n\n // verboseフラグ\n const verbose = argv.includes('-v') || argv.includes('--verbose');\n\n // コマンド判定\n const firstArg = argv[0];\n if (firstArg === 'init') {\n return parseInitArgs(argv.slice(1), verbose);\n }\n\n // デフォルトはrunコマンド\n return parseRunArgs(argv, verbose);\n};\n\n/**\n * initコマンドの引数をパースする\n *\n * initコマンドで利用可能なオプション(--force)を解析する。\n * 未知のオプションが指定された場合はエラーを返す。\n *\n * @param argv - initコマンド以降の引数配列\n * @param verbose - verboseフラグが有効かどうか\n * @returns パース済みのinit引数、またはエラー\n */\nconst parseInitArgs = (argv: string[], verbose: boolean): Result<ParsedArgs, CliError> => {\n const force = argv.includes('--force');\n\n // 未知のオプションチェック\n for (const arg of argv) {\n if (arg.startsWith('--')) {\n if (arg !== '--force' && arg !== '--verbose') {\n return err({\n type: 'invalid_args',\n message: `Unknown option for init command: ${arg}`,\n });\n }\n } else if (arg.startsWith('-')) {\n if (arg !== '-v') {\n return err({\n type: 'invalid_args',\n message: `Unknown option for init command: ${arg}`,\n });\n }\n }\n }\n\n return ok({\n command: 'init',\n help: false,\n version: false,\n verbose,\n force,\n });\n};\n\n/**\n * runコマンドの引数をパースする\n *\n * runコマンドで利用可能なオプション(--headed, --env, --timeout等)を解析する。\n * --envは複数回指定可能で、KEY=VALUE形式でなければならない。\n * --timeoutは正の整数値でなければならない。\n * 位置引数(オプションフラグでない引数)は全てフローファイルパスとして扱う。\n *\n * @param argv - runコマンドの引数配列\n * @param verbose - verboseフラグが有効かどうか\n * @returns パース済みのrun引数、またはエラー\n */\nconst parseRunArgs = (argv: string[], verbose: boolean): Result<ParsedArgs, CliError> => {\n const files: string[] = [];\n const env: Record<string, string> = {};\n const state = {\n files,\n env,\n headed: false,\n timeout: DEFAULT_TIMEOUT_MS,\n screenshot: false,\n bail: false,\n session: undefined,\n progressJson: false,\n };\n\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i];\n const processResult = processRunArg(arg, argv, i, state);\n\n const continueResult = processResult.match(\n (newIndex) => {\n // インデックスの更新(値を取る引数の場合)\n i = newIndex;\n return ok(undefined);\n },\n (error) => err(error),\n );\n\n if (continueResult.isErr()) {\n return continueResult;\n }\n }\n\n return ok({\n command: 'run',\n help: false,\n version: false,\n verbose,\n files: state.files,\n headed: state.headed,\n env: state.env,\n timeout: state.timeout,\n screenshot: state.screenshot,\n bail: state.bail,\n session: state.session,\n progressJson: state.progressJson,\n });\n};\n\n/**\n * runコマンドの単一引数を処理する\n *\n * 各オプションに応じた処理を行い、新しいインデックスを返す。\n * 値を取る引数(--env, --timeout, --session)の場合はインデックスを+1する。\n *\n * @param arg - 現在の引数\n * @param argv - 全引数配列\n * @param currentIndex - 現在のインデックス\n * @param state - パース状態を保持するオブジェクト\n * @returns 成功時: 新しいインデックス、失敗時: エラー\n */\nconst processRunArg = (\n arg: string,\n argv: string[],\n currentIndex: number,\n state: {\n files: string[];\n env: Record<string, string>;\n headed: boolean;\n timeout: number;\n screenshot: boolean;\n bail: boolean;\n session: string | undefined;\n progressJson: boolean;\n },\n): Result<number, CliError> => {\n // 値を取るオプション\n switch (arg) {\n case '--env':\n return parseEnvOption(argv, currentIndex, state);\n case '--timeout':\n return parseTimeoutOption(argv, currentIndex, state);\n case '--session':\n return parseSessionOption(argv, currentIndex, state);\n default:\n // フラグオプション(値を取らない)\n return processFlagArg(arg, currentIndex, state);\n }\n};\n\n/**\n * フラグ引数を処理する(値を取らない引数)\n *\n * @param arg - 現在の引数\n * @param currentIndex - 現在のインデックス\n * @param state - パース状態を保持するオブジェクト\n * @returns 成功時: 現在のインデックス、失敗時: エラー\n */\nconst processFlagArg = (\n arg: string,\n currentIndex: number,\n state: {\n files: string[];\n headed: boolean;\n screenshot: boolean;\n bail: boolean;\n progressJson: boolean;\n },\n): Result<number, CliError> => {\n // 既知のフラグオプションの処理を試行\n const flagResult = tryProcessKnownFlag(arg, currentIndex, state);\n if (flagResult !== null) {\n return flagResult;\n }\n\n // 位置引数またはエラー\n return processPositionalOrUnknown(arg, currentIndex, state);\n};\n\n/**\n * 既知のフラグオプションを処理する\n *\n * @param arg - 現在の引数\n * @param currentIndex - 現在のインデックス\n * @param state - パース状態を保持するオブジェクト\n * @returns 既知のフラグの場合は処理結果、それ以外はnull\n */\nconst tryProcessKnownFlag = (\n arg: string,\n currentIndex: number,\n state: {\n headed: boolean;\n screenshot: boolean;\n bail: boolean;\n progressJson: boolean;\n },\n): Result<number, CliError> | null => {\n // verboseは既に処理済みなのでスキップ\n if (arg === '-v' || arg === '--verbose') {\n return ok(currentIndex);\n }\n\n if (arg === '--headed') {\n state.headed = true;\n return ok(currentIndex);\n }\n\n if (arg === '--screenshot') {\n state.screenshot = true;\n return ok(currentIndex);\n }\n\n if (arg === '--bail') {\n state.bail = true;\n return ok(currentIndex);\n }\n\n if (arg === '--progress-json') {\n state.progressJson = true;\n return ok(currentIndex);\n }\n\n // 既知のフラグではない\n return null;\n};\n\n/**\n * 位置引数または未知のオプションを処理する\n *\n * @param arg - 現在の引数\n * @param currentIndex - 現在のインデックス\n * @param state - パース状態を保持するオブジェクト\n * @returns 成功時: 現在のインデックス、失敗時: エラー\n */\nconst processPositionalOrUnknown = (\n arg: string,\n currentIndex: number,\n state: { files: string[] },\n): Result<number, CliError> => {\n if (arg.startsWith('--')) {\n return err({\n type: 'invalid_args',\n message: `Unknown option: ${arg}`,\n });\n }\n\n // 位置引数(フローファイル)\n state.files.push(arg);\n return ok(currentIndex);\n};\n\n/**\n * --env オプションをパースする\n */\nconst parseEnvOption = (\n argv: string[],\n currentIndex: number,\n state: { env: Record<string, string> },\n): Result<number, CliError> => {\n const nextArg = argv[currentIndex + 1];\n if (!nextArg) {\n return err({\n type: 'invalid_args',\n message: '--env requires KEY=VALUE argument',\n });\n }\n\n const envResult = parseEnvArg(nextArg);\n if (envResult.isErr()) {\n return err(envResult.error);\n }\n\n const [key, value] = envResult.value;\n state.env[key] = value;\n\n return ok(currentIndex + 1);\n};\n\n/**\n * --timeout オプションをパースする\n */\nconst parseTimeoutOption = (\n argv: string[],\n currentIndex: number,\n state: { timeout: number },\n): Result<number, CliError> => {\n const nextArg = argv[currentIndex + 1];\n if (!nextArg) {\n return err({\n type: 'invalid_args',\n message: '--timeout requires a number in milliseconds',\n });\n }\n\n const timeoutNum = Number.parseInt(nextArg, 10);\n if (Number.isNaN(timeoutNum) || timeoutNum <= 0) {\n return err({\n type: 'invalid_args',\n message: `--timeout must be a positive number, got: ${nextArg}`,\n });\n }\n\n state.timeout = timeoutNum;\n return ok(currentIndex + 1);\n};\n\n/**\n * --session オプションをパースする\n */\nconst parseSessionOption = (\n argv: string[],\n currentIndex: number,\n state: { session: string | undefined },\n): Result<number, CliError> => {\n const nextArg = argv[currentIndex + 1];\n if (!nextArg) {\n return err({\n type: 'invalid_args',\n message: '--session requires a session name',\n });\n }\n\n state.session = nextArg;\n return ok(currentIndex + 1);\n};\n\n/**\n * --env KEY=VALUE 引数をパースする\n *\n * 環境変数の設定値をKEY=VALUE形式から解析する。\n * =が含まれていない、またはKEYが空の場合はエラーを返す。\n * VALUEは空文字列でも許可される。\n *\n * @param arg - KEY=VALUE形式の文字列\n * @returns 成功時: [KEY, VALUE]のタプル、失敗時: エラー\n */\nconst parseEnvArg = (arg: string): Result<[string, string], CliError> => {\n const index = arg.indexOf('=');\n if (index === -1) {\n return err({\n type: 'invalid_args',\n message: `--env argument must be in KEY=VALUE format, got: ${arg}`,\n });\n }\n\n const key = arg.slice(0, index);\n const value = arg.slice(index + 1);\n\n if (key.length === 0) {\n return err({\n type: 'invalid_args',\n message: `--env KEY cannot be empty, got: ${arg}`,\n });\n }\n\n return ok([key, value]);\n};\n","import type { OutputTarget } from '../types';\n\n/**\n * 出力フォーマッター\n *\n * console.log禁止のため、process.stdout.write / process.stderr.write を使用する。\n * 進捗表示やメッセージの整形を担当するクラス。\n * 状態を持つため、classとして実装することが許可されている。\n */\nexport class OutputFormatter {\n /** 詳細ログ出力を行うかどうか */\n private verbose: boolean;\n /** スピナーのアニメーションフレーム */\n private spinnerFrames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n /** 現在表示中のスピナーフレームのインデックス */\n private spinnerIndex = 0;\n /** スピナーのsetIntervalのID(停止時にclearIntervalするため) */\n private spinnerIntervalId: NodeJS.Timeout | null = null;\n /** 現在表示中のスピナーメッセージ */\n private currentSpinnerMessage = '';\n\n /**\n * OutputFormatterのコンストラクタ\n *\n * @param verbose - 詳細ログ出力を行うかどうか\n */\n constructor(verbose: boolean) {\n this.verbose = verbose;\n }\n\n /**\n * 通常メッセージを出力\n *\n * 標準出力(stdout)にメッセージを出力します。\n * 一般的な情報や進捗状況を表示する際に使用します。\n *\n * @param message - 出力するメッセージ\n */\n info(message: string): void {\n this.write('stdout', message);\n }\n\n /**\n * エラーメッセージを出力\n *\n * 標準エラー出力(stderr)にメッセージを出力します。\n * エラーや警告メッセージを表示する際に使用します。\n *\n * @param message - 出力するエラーメッセージ\n */\n error(message: string): void {\n this.write('stderr', message);\n }\n\n /**\n * デバッグメッセージを出力(verboseモード時のみ)\n *\n * verboseフラグがtrueの場合のみ、標準エラー出力(stderr)に\n * デバッグメッセージを出力します。\n * \"[DEBUG]\"プレフィックスが自動的に付与されます。\n *\n * @param message - 出力するデバッグメッセージ\n */\n debug(message: string): void {\n if (this.verbose) {\n this.write('stderr', `[DEBUG] ${message}`);\n }\n }\n\n /**\n * 成功マーク付きメッセージ\n *\n * チェックマーク(✓)付きの成功メッセージを出力します。\n * オプションで実行時間(ミリ秒)を指定すると、秒単位で表示されます。\n *\n * @param message - 出力するメッセージ\n * @param durationMs - 実行時間(ミリ秒、省略可)\n */\n success(message: string, durationMs?: number): void {\n const duration = durationMs !== undefined ? ` (${(durationMs / 1000).toFixed(1)}s)` : '';\n this.info(` ✓ ${message}${duration}`);\n }\n\n /**\n * 失敗マーク付きメッセージ\n *\n * バツマーク(✗)付きの失敗メッセージを出力します。\n * オプションで実行時間(ミリ秒)を指定すると、秒単位で表示されます。\n *\n * @param message - 出力するメッセージ\n * @param durationMs - 実行時間(ミリ秒、省略可)\n */\n failure(message: string, durationMs?: number): void {\n const duration = durationMs !== undefined ? ` (${(durationMs / 1000).toFixed(1)}s)` : '';\n this.error(` ✗ ${message}${duration}`);\n }\n\n /**\n * インデント付きメッセージ(エラー詳細等)\n *\n * 指定されたレベル分のインデント(2スペース × レベル)を付けて\n * メッセージを標準エラー出力に出力します。\n * エラーの詳細情報や補足説明を階層的に表示する際に使用します。\n *\n * @param message - 出力するメッセージ\n * @param level - インデントレベル(デフォルト: 1)\n */\n indent(message: string, level = 1): void {\n const indent = ' '.repeat(level);\n this.error(`${indent}${message}`);\n }\n\n /**\n * スピナーを開始\n *\n * 指定されたメッセージと共にスピナーアニメーションを開始します。\n * スピナーは80msごとにフレームが更新されます。\n * 既に実行中のスピナーがある場合は、停止してから新しいスピナーを開始します。\n *\n * 注意: 必ずstopSpinner()を呼び出してスピナーを停止してください。\n * 停止しないとsetIntervalが残り続けます。\n *\n * @param message - スピナーと共に表示するメッセージ\n */\n startSpinner(message: string): void {\n this.currentSpinnerMessage = message;\n this.spinnerIndex = 0;\n\n // 既存のスピナーをクリア\n if (this.spinnerIntervalId !== null) {\n clearInterval(this.spinnerIntervalId);\n }\n\n // スピナーを表示\n this.renderSpinner();\n\n // 定期的に更新\n this.spinnerIntervalId = setInterval(() => {\n this.spinnerIndex = (this.spinnerIndex + 1) % this.spinnerFrames.length;\n this.renderSpinner();\n }, 80);\n }\n\n /**\n * スピナーを停止\n *\n * 実行中のスピナーを停止し、スピナー行をクリアします。\n * setIntervalを適切にクリアして、リソースリークを防ぎます。\n * スピナーが実行中でない場合は何もしません。\n */\n stopSpinner(): void {\n if (this.spinnerIntervalId !== null) {\n clearInterval(this.spinnerIntervalId);\n this.spinnerIntervalId = null;\n }\n\n // スピナー行をクリア\n this.clearLine();\n }\n\n /**\n * セクション区切り線\n *\n * 視覚的にセクションを区切るための水平線を出力します。\n * サマリー表示や大きな処理の区切りに使用します。\n */\n separator(): void {\n this.info('────────────────────────────────────────');\n }\n\n /**\n * 改行\n *\n * 空行を出力します。\n * メッセージ間に視覚的な余白を作る際に使用します。\n */\n newline(): void {\n this.write('stdout', '');\n }\n\n /**\n * 内部:書き込み処理\n *\n * 指定された出力先(stdout または stderr)にメッセージを書き込みます。\n * メッセージの末尾には自動的に改行文字が付与されます。\n *\n * @param target - 出力先('stdout' または 'stderr')\n * @param message - 出力するメッセージ\n */\n private write(target: OutputTarget, message: string): void {\n const output = target === 'stdout' ? process.stdout : process.stderr;\n output.write(`${message}\\n`);\n }\n\n /**\n * 内部:スピナーを描画\n *\n * 現在のスピナーフレームとメッセージを画面に描画します。\n * カーソルを行頭に戻してから描画することで、\n * 前のフレームを上書きしてアニメーション効果を実現します。\n */\n private renderSpinner(): void {\n const frame = this.spinnerFrames[this.spinnerIndex];\n this.clearLine();\n process.stdout.write(` ${frame} ${this.currentSpinnerMessage}`);\n }\n\n /**\n * 内部:現在行をクリア\n *\n * カーソルを行頭に戻し(\\r)、行全体をクリア(\\x1b[K)します。\n * スピナーのアニメーションや、前の出力を上書きする際に使用します。\n * ANSIエスケープシーケンスを使用しています。\n */\n private clearLine(): void {\n process.stdout.write('\\r\\x1b[K');\n }\n}\n\n/**\n * ヘルプメッセージを表示\n *\n * CLIの使用方法を標準出力に表示します。\n * コマンドラインオプション、サブコマンド、使用例などを含みます。\n * --help フラグまたは -h フラグが指定された際に呼び出されます。\n */\nexport const showHelp = (): void => {\n const helpText = `\nenbu - CLI for agent-browser workflow automation\n\nUSAGE:\n npx enbu [command] [options] [flow-files...]\n\nCOMMANDS:\n init Initialize a new project\n (default) Run flow files\n\nOPTIONS:\n -h, --help Show this help message\n -V, --version Show version number\n -v, --verbose Enable verbose logging\n --headed Show browser (disable headless mode)\n --env KEY=VALUE Set environment variable (can be used multiple times)\n --timeout <ms> Set timeout in milliseconds (default: 30000)\n --screenshot Save screenshot on failure\n --bail Stop on first failure\n --session <name> Set agent-browser session name\n\nEXAMPLES:\n npx enbu init\n npx enbu\n npx enbu login.flow.yaml\n npx enbu --headed --env USER=test login.flow.yaml\n npx enbu --bail login.flow.yaml checkout.flow.yaml\n\nFor more information, visit: https://github.com/9wick/enbu\n`;\n\n process.stdout.write(helpText);\n};\n\n/**\n * バージョン情報を表示\n *\n * CLIのバージョン番号を標準出力に表示します。\n * ビルド時に埋め込まれたバージョン情報(__VERSION__定数)を使用します。\n * --version フラグまたは -V フラグが指定された際に呼び出されます。\n *\n * 実装の詳細:\n * tsdown.config.tsのdefineオプションにより、__VERSION__定数が\n * ビルド時にpackage.jsonのバージョン情報で置換されます。\n * これにより、実行時のファイル読み込みオーバーヘッドがなく、\n * ビルド構造の変更にも影響を受けません。\n */\nexport const showVersion = (): void => {\n process.stdout.write(`${__VERSION__}\\n`);\n};\n","import { readFile, writeFile, mkdir, access } from 'node:fs/promises';\nimport { constants } from 'node:fs';\nimport { type ResultAsync, fromPromise } from 'neverthrow';\nimport type { CliError } from '../types';\n\n/**\n * ファイルが存在するか確認\n *\n * 指定されたパスにファイルまたはディレクトリが存在するかを確認する。\n * アクセス権限がない場合もfalseを返す。\n *\n * @param path - 確認対象のファイルまたはディレクトリのパス\n * @returns ファイルが存在する場合はtrue、存在しない場合またはアクセスできない場合はfalse\n */\nexport const fileExists = (path: string): Promise<boolean> => {\n return access(path, constants.F_OK)\n .then(() => true)\n .catch(() => false);\n};\n\n/**\n * ディレクトリを作成(存在しない場合のみ)\n *\n * 指定されたパスにディレクトリを作成する。\n * recursive オプションにより、親ディレクトリが存在しない場合も自動的に作成される。\n * 既にディレクトリが存在する場合はエラーにならず、成功として扱われる。\n *\n * @param path - 作成するディレクトリのパス\n * @returns 成功時: void、失敗時: CliError(type: 'execution_error')\n */\nexport const createDirectory = (path: string): ResultAsync<void, CliError> => {\n return fromPromise(\n mkdir(path, { recursive: true }),\n (error): CliError => ({\n type: 'execution_error',\n message: `Failed to create directory: ${path}`,\n cause: error,\n }),\n ).map(() => undefined);\n};\n\n/**\n * ファイルを書き込み\n *\n * 指定されたパスにテキストファイルを書き込む。\n * ファイルが既に存在する場合は上書きされる。\n * 親ディレクトリが存在しない場合はエラーとなるため、事前に createDirectory を実行すること。\n *\n * @param path - 書き込み先のファイルパス\n * @param content - 書き込むテキスト内容\n * @returns 成功時: void、失敗時: CliError(type: 'execution_error')\n */\nexport const writeFileContent = (path: string, content: string): ResultAsync<void, CliError> => {\n return fromPromise(\n writeFile(path, content, 'utf-8'),\n (error): CliError => ({\n type: 'execution_error',\n message: `Failed to write file: ${path}`,\n cause: error,\n }),\n ).map(() => undefined);\n};\n\n/**\n * ファイルを読み込み\n *\n * 指定されたパスからテキストファイルを読み込む。\n * ファイルが存在しない場合やアクセス権限がない場合はエラーを返す。\n * バイナリファイルの読み込みには対応していないため、UTF-8テキストファイルのみを対象とする。\n *\n * @param path - 読み込むファイルのパス\n * @returns 成功時: ファイルの内容(文字列)、失敗時: CliError(type: 'execution_error')\n */\nexport const readFileContent = (path: string): ResultAsync<string, CliError> => {\n return fromPromise(\n readFile(path, 'utf-8'),\n (error): CliError => ({\n type: 'execution_error',\n message: `Failed to read file: ${path}`,\n cause: error,\n }),\n );\n};\n","import { type Result, ok } from 'neverthrow';\nimport { createInterface } from 'node:readline';\nimport { resolve } from 'node:path';\nimport type { CliError } from '../types';\nimport { OutputFormatter } from '../output/formatter';\nimport { fileExists, createDirectory, writeFileContent, readFileContent } from '../utils/fs';\n\n/** 生成するディレクトリ */\nconst ABFLOW_DIR = '.abflow';\n\n/** サンプルフローファイルの内容 */\nconst SAMPLE_FLOW_YAML = `# enbuのサンプルフロー\nsteps:\n - open: https://example.com\n - click: \"More information...\"\n - assertVisible: \"Example Domain\"\n`;\n\n/**\n * initコマンドを実行\n *\n * プロジェクトの初期化を行い、以下の処理を実行する:\n * 1. .abflow/ ディレクトリを作成\n * 2. サンプルフローファイル example.enbu.yaml を生成\n * 3. .gitignore への追記を対話的に提案\n *\n * forceフラグがtrueの場合、既存ファイルを上書きする。\n * forceフラグがfalseの場合、既存ファイルはスキップされる。\n *\n * @param args - initコマンドの引数\n * @param args.force - 既存ファイルを強制的に上書きするかどうか\n * @param args.verbose - 詳細なログ出力を行うかどうか\n * @returns 成功時: void、失敗時: CliError\n */\nexport const runInitCommand = async (args: {\n force: boolean;\n verbose: boolean;\n}): Promise<Result<void, CliError>> => {\n const formatter = new OutputFormatter(args.verbose);\n\n formatter.info('Initializing enbu project...');\n\n // .abflow/ ディレクトリとサンプルファイルを作成\n const setupResult = await setupAbflowDirectory(args.force, formatter);\n if (setupResult.isErr()) {\n return setupResult;\n }\n\n // .gitignore への追記を提案\n await promptGitignoreUpdate(formatter);\n\n formatter.newline();\n formatter.info('Initialization complete!');\n formatter.info(`Try: npx enbu ${ABFLOW_DIR}/example.enbu.yaml`);\n\n return ok(undefined);\n};\n\n/**\n * .abflow/ ディレクトリとサンプルファイルを作成\n *\n * .abflow/ ディレクトリを作成し、その中にサンプルフローファイルを生成する。\n * forceフラグがfalseで既存ファイルが存在する場合はスキップする。\n *\n * @param force - 既存ファイルを強制的に上書きするかどうか\n * @param formatter - 出力フォーマッター\n * @returns 成功時: void、失敗時: CliError\n */\nconst setupAbflowDirectory = async (\n force: boolean,\n formatter: OutputFormatter,\n): Promise<Result<void, CliError>> => {\n // .abflow/ ディレクトリを作成\n const abflowPath = resolve(process.cwd(), ABFLOW_DIR);\n const abflowExists = await fileExists(abflowPath);\n\n if (abflowExists && !force) {\n formatter.success(`Directory already exists: ${ABFLOW_DIR}`);\n } else {\n const createDirResult = await createDirectory(abflowPath);\n if (createDirResult.isErr()) {\n return createDirResult;\n }\n formatter.success(`Created ${ABFLOW_DIR}/ directory`);\n }\n\n // example.enbu.yaml を生成\n const exampleFlowPath = resolve(abflowPath, 'example.enbu.yaml');\n const exampleFlowExists = await fileExists(exampleFlowPath);\n\n if (exampleFlowExists && !force) {\n formatter.success(`File already exists: ${ABFLOW_DIR}/example.enbu.yaml`);\n } else {\n const writeResult = await writeFileContent(exampleFlowPath, SAMPLE_FLOW_YAML);\n if (writeResult.isErr()) {\n return writeResult;\n }\n formatter.success(`Created ${ABFLOW_DIR}/example.enbu.yaml`);\n }\n\n return ok(undefined);\n};\n\n/**\n * .gitignore への追記を対話的に提案\n *\n * ユーザーに .gitignore への追記を提案し、了承された場合に .abflow/ を追記する。\n * .gitignore の更新に失敗した場合は、エラーメッセージと手動での追記方法を表示する。\n *\n * @param formatter - 出力フォーマッター\n */\nconst promptGitignoreUpdate = async (formatter: OutputFormatter): Promise<void> => {\n formatter.newline();\n const shouldUpdateGitignore = await askYesNo(\n 'Would you like to add .abflow/ to .gitignore? (y/N): ',\n );\n\n if (shouldUpdateGitignore) {\n const gitignorePath = resolve(process.cwd(), '.gitignore');\n const updateResult = await updateGitignore(gitignorePath);\n\n updateResult.match(\n () => formatter.success('Updated .gitignore'),\n (error) => {\n formatter.error(`Failed to update .gitignore: ${error.message}`);\n formatter.indent('You can manually add \".abflow/\" to your .gitignore file', 1);\n },\n );\n }\n};\n\n/**\n * Yes/No 質問を対話的に行う\n *\n * ユーザーに質問を表示し、標準入力から回答を受け取る。\n * 'y' または 'yes'(大文字小文字を区別しない)が入力された場合にtrueを返す。\n * それ以外の入力(空文字列を含む)の場合はfalseを返す。\n *\n * readlineのcreateInterfaceを使用して対話的な入力を実現している。\n * 入力完了後は必ずrl.close()を呼び出してリソースを解放する。\n *\n * @param question - ユーザーに表示する質問文\n * @returns ユーザーが 'y' または 'yes' を入力した場合はtrue、それ以外はfalse\n */\nconst askYesNo = (question: string): Promise<boolean> => {\n return new Promise((resolve) => {\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n rl.question(question, (answer) => {\n rl.close();\n const normalized = answer.trim().toLowerCase();\n resolve(normalized === 'y' || normalized === 'yes');\n });\n });\n};\n\n/**\n * .gitignore に .abflow/ を追記\n *\n * .gitignoreファイルに .abflow/ エントリを追加する。\n * 以下の条件に応じて処理が分岐する:\n *\n * 1. .gitignoreが存在しない場合:\n * - 新規に.gitignoreファイルを作成し、.abflow/を記述する\n *\n * 2. .gitignoreが存在し、既に.abflow/が含まれている場合:\n * - 何もせずに成功を返す(重複追記を防ぐ)\n *\n * 3. .gitignoreが存在し、.abflow/が含まれていない場合:\n * - ファイル末尾に.abflow/を追記する\n * - 元のファイルが改行で終わっていない場合は、改行を追加してから追記する\n *\n * @param path - .gitignoreファイルのパス\n * @returns 成功時: void、失敗時: CliError(type: 'execution_error')\n */\nconst updateGitignore = async (path: string): Promise<Result<void, CliError>> => {\n const exists = await fileExists(path);\n const entry = '.abflow/';\n\n if (!exists) {\n // .gitignore が存在しない場合、新規作成\n return writeFileContent(path, `${entry}\\n`);\n }\n\n // 既存の .gitignore を読み込み\n const readResult = await readFileContent(path);\n if (readResult.isErr()) {\n return readResult.andThen(() => ok(undefined));\n }\n\n const content = readResult.value;\n\n // 既に .abflow/ が含まれている場合はスキップ\n if (content.includes(entry)) {\n return ok(undefined);\n }\n\n // 追記\n const newContent = content.endsWith('\\n') ? `${content}${entry}\\n` : `${content}\\n${entry}\\n`;\n return writeFileContent(path, newContent);\n};\n","export const balanced = (a, b, str) => {\n const ma = a instanceof RegExp ? maybeMatch(a, str) : a;\n const mb = b instanceof RegExp ? maybeMatch(b, str) : b;\n const r = ma !== null && mb != null && range(ma, mb, str);\n return (r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + ma.length, r[1]),\n post: str.slice(r[1] + mb.length),\n });\n};\nconst maybeMatch = (reg, str) => {\n const m = str.match(reg);\n return m ? m[0] : null;\n};\nexport const range = (a, b, str) => {\n let begs, beg, left, right = undefined, result;\n let ai = str.indexOf(a);\n let bi = str.indexOf(b, ai + 1);\n let i = ai;\n if (ai >= 0 && bi > 0) {\n if (a === b) {\n return [ai, bi];\n }\n begs = [];\n left = str.length;\n while (i >= 0 && !result) {\n if (i === ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n }\n else if (begs.length === 1) {\n const r = begs.pop();\n if (r !== undefined)\n result = [r, bi];\n }\n else {\n beg = begs.pop();\n if (beg !== undefined && beg < left) {\n left = beg;\n right = bi;\n }\n bi = str.indexOf(b, i + 1);\n }\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n if (begs.length && right !== undefined) {\n result = [left, right];\n }\n }\n return result;\n};\n//# sourceMappingURL=index.js.map","import { balanced } from '@isaacs/balanced-match';\nconst escSlash = '\\0SLASH' + Math.random() + '\\0';\nconst escOpen = '\\0OPEN' + Math.random() + '\\0';\nconst escClose = '\\0CLOSE' + Math.random() + '\\0';\nconst escComma = '\\0COMMA' + Math.random() + '\\0';\nconst escPeriod = '\\0PERIOD' + Math.random() + '\\0';\nconst escSlashPattern = new RegExp(escSlash, 'g');\nconst escOpenPattern = new RegExp(escOpen, 'g');\nconst escClosePattern = new RegExp(escClose, 'g');\nconst escCommaPattern = new RegExp(escComma, 'g');\nconst escPeriodPattern = new RegExp(escPeriod, 'g');\nconst slashPattern = /\\\\\\\\/g;\nconst openPattern = /\\\\{/g;\nconst closePattern = /\\\\}/g;\nconst commaPattern = /\\\\,/g;\nconst periodPattern = /\\\\./g;\nfunction numeric(str) {\n return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0);\n}\nfunction escapeBraces(str) {\n return str\n .replace(slashPattern, escSlash)\n .replace(openPattern, escOpen)\n .replace(closePattern, escClose)\n .replace(commaPattern, escComma)\n .replace(periodPattern, escPeriod);\n}\nfunction unescapeBraces(str) {\n return str\n .replace(escSlashPattern, '\\\\')\n .replace(escOpenPattern, '{')\n .replace(escClosePattern, '}')\n .replace(escCommaPattern, ',')\n .replace(escPeriodPattern, '.');\n}\n/**\n * Basically just str.split(\",\"), but handling cases\n * where we have nested braced sections, which should be\n * treated as individual members, like {a,{b,c},d}\n */\nfunction parseCommaParts(str) {\n if (!str) {\n return [''];\n }\n const parts = [];\n const m = balanced('{', '}', str);\n if (!m) {\n return str.split(',');\n }\n const { pre, body, post } = m;\n const p = pre.split(',');\n p[p.length - 1] += '{' + body + '}';\n const postParts = parseCommaParts(post);\n if (post.length) {\n ;\n p[p.length - 1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n parts.push.apply(parts, p);\n return parts;\n}\nexport function expand(str) {\n if (!str) {\n return [];\n }\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.slice(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.slice(2);\n }\n return expand_(escapeBraces(str), true).map(unescapeBraces);\n}\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\nfunction expand_(str, isTop) {\n /** @type {string[]} */\n const expansions = [];\n const m = balanced('{', '}', str);\n if (!m)\n return [str];\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n const pre = m.pre;\n const post = m.post.length ? expand_(m.post, false) : [''];\n if (/\\$$/.test(m.pre)) {\n for (let k = 0; k < post.length; k++) {\n const expansion = pre + '{' + m.body + '}' + post[k];\n expansions.push(expansion);\n }\n }\n else {\n const isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n const isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n const isSequence = isNumericSequence || isAlphaSequence;\n const isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,(?!,).*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand_(str);\n }\n return [str];\n }\n let n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n }\n else {\n n = parseCommaParts(m.body);\n if (n.length === 1 && n[0] !== undefined) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand_(n[0], false).map(embrace);\n //XXX is this necessary? Can't seem to hit it in tests.\n /* c8 ignore start */\n if (n.length === 1) {\n return post.map(p => m.pre + n[0] + p);\n }\n /* c8 ignore stop */\n }\n }\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n let N;\n if (isSequence && n[0] !== undefined && n[1] !== undefined) {\n const x = numeric(n[0]);\n const y = numeric(n[1]);\n const width = Math.max(n[0].length, n[1].length);\n let incr = n.length === 3 && n[2] !== undefined ? Math.abs(numeric(n[2])) : 1;\n let test = lte;\n const reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n const pad = n.some(isPadded);\n N = [];\n for (let i = x; test(i, y); i += incr) {\n let c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\') {\n c = '';\n }\n }\n else {\n c = String(i);\n if (pad) {\n const need = width - c.length;\n if (need > 0) {\n const z = new Array(need + 1).join('0');\n if (i < 0) {\n c = '-' + z + c.slice(1);\n }\n else {\n c = z + c;\n }\n }\n }\n }\n N.push(c);\n }\n }\n else {\n N = [];\n for (let j = 0; j < n.length; j++) {\n N.push.apply(N, expand_(n[j], false));\n }\n }\n for (let j = 0; j < N.length; j++) {\n for (let k = 0; k < post.length; k++) {\n const expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion) {\n expansions.push(expansion);\n }\n }\n }\n }\n return expansions;\n}\n//# sourceMappingURL=index.js.map","const MAX_PATTERN_LENGTH = 1024 * 64;\nexport const assertValidPattern = (pattern) => {\n if (typeof pattern !== 'string') {\n throw new TypeError('invalid pattern');\n }\n if (pattern.length > MAX_PATTERN_LENGTH) {\n throw new TypeError('pattern is too long');\n }\n};\n//# sourceMappingURL=assert-valid-pattern.js.map","// translate the various posix character classes into unicode properties\n// this works across all unicode locales\n// { <posix class>: [<translation>, /u flag required, negated]\nconst posixClasses = {\n '[:alnum:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}', true],\n '[:alpha:]': ['\\\\p{L}\\\\p{Nl}', true],\n '[:ascii:]': ['\\\\x' + '00-\\\\x' + '7f', false],\n '[:blank:]': ['\\\\p{Zs}\\\\t', true],\n '[:cntrl:]': ['\\\\p{Cc}', true],\n '[:digit:]': ['\\\\p{Nd}', true],\n '[:graph:]': ['\\\\p{Z}\\\\p{C}', true, true],\n '[:lower:]': ['\\\\p{Ll}', true],\n '[:print:]': ['\\\\p{C}', true],\n '[:punct:]': ['\\\\p{P}', true],\n '[:space:]': ['\\\\p{Z}\\\\t\\\\r\\\\n\\\\v\\\\f', true],\n '[:upper:]': ['\\\\p{Lu}', true],\n '[:word:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}\\\\p{Pc}', true],\n '[:xdigit:]': ['A-Fa-f0-9', false],\n};\n// only need to escape a few things inside of brace expressions\n// escapes: [ \\ ] -\nconst braceEscape = (s) => s.replace(/[[\\]\\\\-]/g, '\\\\$&');\n// escape all regexp magic characters\nconst regexpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n// everything has already been escaped, we just have to join\nconst rangesToString = (ranges) => ranges.join('');\n// takes a glob string at a posix brace expression, and returns\n// an equivalent regular expression source, and boolean indicating\n// whether the /u flag needs to be applied, and the number of chars\n// consumed to parse the character class.\n// This also removes out of order ranges, and returns ($.) if the\n// entire class just no good.\nexport const parseClass = (glob, position) => {\n const pos = position;\n /* c8 ignore start */\n if (glob.charAt(pos) !== '[') {\n throw new Error('not in a brace expression');\n }\n /* c8 ignore stop */\n const ranges = [];\n const negs = [];\n let i = pos + 1;\n let sawStart = false;\n let uflag = false;\n let escaping = false;\n let negate = false;\n let endPos = pos;\n let rangeStart = '';\n WHILE: while (i < glob.length) {\n const c = glob.charAt(i);\n if ((c === '!' || c === '^') && i === pos + 1) {\n negate = true;\n i++;\n continue;\n }\n if (c === ']' && sawStart && !escaping) {\n endPos = i + 1;\n break;\n }\n sawStart = true;\n if (c === '\\\\') {\n if (!escaping) {\n escaping = true;\n i++;\n continue;\n }\n // escaped \\ char, fall through and treat like normal char\n }\n if (c === '[' && !escaping) {\n // either a posix class, a collation equivalent, or just a [\n for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {\n if (glob.startsWith(cls, i)) {\n // invalid, [a-[] is fine, but not [a-[:alpha]]\n if (rangeStart) {\n return ['$.', false, glob.length - pos, true];\n }\n i += cls.length;\n if (neg)\n negs.push(unip);\n else\n ranges.push(unip);\n uflag = uflag || u;\n continue WHILE;\n }\n }\n }\n // now it's just a normal character, effectively\n escaping = false;\n if (rangeStart) {\n // throw this range away if it's not valid, but others\n // can still match.\n if (c > rangeStart) {\n ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c));\n }\n else if (c === rangeStart) {\n ranges.push(braceEscape(c));\n }\n rangeStart = '';\n i++;\n continue;\n }\n // now might be the start of a range.\n // can be either c-d or c-] or c<more...>] or c] at this point\n if (glob.startsWith('-]', i + 1)) {\n ranges.push(braceEscape(c + '-'));\n i += 2;\n continue;\n }\n if (glob.startsWith('-', i + 1)) {\n rangeStart = c;\n i += 2;\n continue;\n }\n // not the start of a range, just a single character\n ranges.push(braceEscape(c));\n i++;\n }\n if (endPos < i) {\n // didn't see the end of the class, not a valid class,\n // but might still be valid as a literal match.\n return ['', false, 0, false];\n }\n // if we got no ranges and no negates, then we have a range that\n // cannot possibly match anything, and that poisons the whole glob\n if (!ranges.length && !negs.length) {\n return ['$.', false, glob.length - pos, true];\n }\n // if we got one positive range, and it's a single character, then that's\n // not actually a magic pattern, it's just that one literal character.\n // we should not treat that as \"magic\", we should just return the literal\n // character. [_] is a perfectly valid way to escape glob magic chars.\n if (negs.length === 0 &&\n ranges.length === 1 &&\n /^\\\\?.$/.test(ranges[0]) &&\n !negate) {\n const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0];\n return [regexpEscape(r), false, endPos - pos, false];\n }\n const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']';\n const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']';\n const comb = ranges.length && negs.length\n ? '(' + sranges + '|' + snegs + ')'\n : ranges.length\n ? sranges\n : snegs;\n return [comb, uflag, endPos - pos, true];\n};\n//# sourceMappingURL=brace-expressions.js.map","/**\n * Un-escape a string that has been escaped with {@link escape}.\n *\n * If the {@link MinimatchOptions.windowsPathsNoEscape} option is used, then\n * square-bracket escapes are removed, but not backslash escapes.\n *\n * For example, it will turn the string `'[*]'` into `*`, but it will not\n * turn `'\\\\*'` into `'*'`, because `\\` is a path separator in\n * `windowsPathsNoEscape` mode.\n *\n * When `windowsPathsNoEscape` is not set, then both square-bracket escapes and\n * backslash escapes are removed.\n *\n * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped\n * or unescaped.\n *\n * When `magicalBraces` is not set, escapes of braces (`{` and `}`) will not be\n * unescaped.\n */\nexport const unescape = (s, { windowsPathsNoEscape = false, magicalBraces = true, } = {}) => {\n if (magicalBraces) {\n return windowsPathsNoEscape\n ? s.replace(/\\[([^\\/\\\\])\\]/g, '$1')\n : s\n .replace(/((?!\\\\).|^)\\[([^\\/\\\\])\\]/g, '$1$2')\n .replace(/\\\\([^\\/])/g, '$1');\n }\n return windowsPathsNoEscape\n ? s.replace(/\\[([^\\/\\\\{}])\\]/g, '$1')\n : s\n .replace(/((?!\\\\).|^)\\[([^\\/\\\\{}])\\]/g, '$1$2')\n .replace(/\\\\([^\\/{}])/g, '$1');\n};\n//# sourceMappingURL=unescape.js.map","// parse a single path portion\nimport { parseClass } from './brace-expressions.js';\nimport { unescape } from './unescape.js';\nconst types = new Set(['!', '?', '+', '*', '@']);\nconst isExtglobType = (c) => types.has(c);\n// Patterns that get prepended to bind to the start of either the\n// entire string, or just a single path portion, to prevent dots\n// and/or traversal patterns, when needed.\n// Exts don't need the ^ or / bit, because the root binds that already.\nconst startNoTraversal = '(?!(?:^|/)\\\\.\\\\.?(?:$|/))';\nconst startNoDot = '(?!\\\\.)';\n// characters that indicate a start of pattern needs the \"no dots\" bit,\n// because a dot *might* be matched. ( is not in the list, because in\n// the case of a child extglob, it will handle the prevention itself.\nconst addPatternStart = new Set(['[', '.']);\n// cases where traversal is A-OK, no dot prevention needed\nconst justDots = new Set(['..', '.']);\nconst reSpecials = new Set('().*{}+?[]^$\\\\!');\nconst regExpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n// any single thing other than /\nconst qmark = '[^/]';\n// * => any number of characters\nconst star = qmark + '*?';\n// use + when we need to ensure that *something* matches, because the * is\n// the only thing in the path portion.\nconst starNoEmpty = qmark + '+?';\n// remove the \\ chars that we added if we end up doing a nonmagic compare\n// const deslash = (s: string) => s.replace(/\\\\(.)/g, '$1')\nexport class AST {\n type;\n #root;\n #hasMagic;\n #uflag = false;\n #parts = [];\n #parent;\n #parentIndex;\n #negs;\n #filledNegs = false;\n #options;\n #toString;\n // set to true if it's an extglob with no children\n // (which really means one child of '')\n #emptyExt = false;\n constructor(type, parent, options = {}) {\n this.type = type;\n // extglobs are inherently magical\n if (type)\n this.#hasMagic = true;\n this.#parent = parent;\n this.#root = this.#parent ? this.#parent.#root : this;\n this.#options = this.#root === this ? options : this.#root.#options;\n this.#negs = this.#root === this ? [] : this.#root.#negs;\n if (type === '!' && !this.#root.#filledNegs)\n this.#negs.push(this);\n this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0;\n }\n get hasMagic() {\n /* c8 ignore start */\n if (this.#hasMagic !== undefined)\n return this.#hasMagic;\n /* c8 ignore stop */\n for (const p of this.#parts) {\n if (typeof p === 'string')\n continue;\n if (p.type || p.hasMagic)\n return (this.#hasMagic = true);\n }\n // note: will be undefined until we generate the regexp src and find out\n return this.#hasMagic;\n }\n // reconstructs the pattern\n toString() {\n if (this.#toString !== undefined)\n return this.#toString;\n if (!this.type) {\n return (this.#toString = this.#parts.map(p => String(p)).join(''));\n }\n else {\n return (this.#toString =\n this.type + '(' + this.#parts.map(p => String(p)).join('|') + ')');\n }\n }\n #fillNegs() {\n /* c8 ignore start */\n if (this !== this.#root)\n throw new Error('should only call on root');\n if (this.#filledNegs)\n return this;\n /* c8 ignore stop */\n // call toString() once to fill this out\n this.toString();\n this.#filledNegs = true;\n let n;\n while ((n = this.#negs.pop())) {\n if (n.type !== '!')\n continue;\n // walk up the tree, appending everthing that comes AFTER parentIndex\n let p = n;\n let pp = p.#parent;\n while (pp) {\n for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) {\n for (const part of n.#parts) {\n /* c8 ignore start */\n if (typeof part === 'string') {\n throw new Error('string part in extglob AST??');\n }\n /* c8 ignore stop */\n part.copyIn(pp.#parts[i]);\n }\n }\n p = pp;\n pp = p.#parent;\n }\n }\n return this;\n }\n push(...parts) {\n for (const p of parts) {\n if (p === '')\n continue;\n /* c8 ignore start */\n if (typeof p !== 'string' && !(p instanceof AST && p.#parent === this)) {\n throw new Error('invalid part: ' + p);\n }\n /* c8 ignore stop */\n this.#parts.push(p);\n }\n }\n toJSON() {\n const ret = this.type === null\n ? this.#parts.slice().map(p => (typeof p === 'string' ? p : p.toJSON()))\n : [this.type, ...this.#parts.map(p => p.toJSON())];\n if (this.isStart() && !this.type)\n ret.unshift([]);\n if (this.isEnd() &&\n (this === this.#root ||\n (this.#root.#filledNegs && this.#parent?.type === '!'))) {\n ret.push({});\n }\n return ret;\n }\n isStart() {\n if (this.#root === this)\n return true;\n // if (this.type) return !!this.#parent?.isStart()\n if (!this.#parent?.isStart())\n return false;\n if (this.#parentIndex === 0)\n return true;\n // if everything AHEAD of this is a negation, then it's still the \"start\"\n const p = this.#parent;\n for (let i = 0; i < this.#parentIndex; i++) {\n const pp = p.#parts[i];\n if (!(pp instanceof AST && pp.type === '!')) {\n return false;\n }\n }\n return true;\n }\n isEnd() {\n if (this.#root === this)\n return true;\n if (this.#parent?.type === '!')\n return true;\n if (!this.#parent?.isEnd())\n return false;\n if (!this.type)\n return this.#parent?.isEnd();\n // if not root, it'll always have a parent\n /* c8 ignore start */\n const pl = this.#parent ? this.#parent.#parts.length : 0;\n /* c8 ignore stop */\n return this.#parentIndex === pl - 1;\n }\n copyIn(part) {\n if (typeof part === 'string')\n this.push(part);\n else\n this.push(part.clone(this));\n }\n clone(parent) {\n const c = new AST(this.type, parent);\n for (const p of this.#parts) {\n c.copyIn(p);\n }\n return c;\n }\n static #parseAST(str, ast, pos, opt) {\n let escaping = false;\n let inBrace = false;\n let braceStart = -1;\n let braceNeg = false;\n if (ast.type === null) {\n // outside of a extglob, append until we find a start\n let i = pos;\n let acc = '';\n while (i < str.length) {\n const c = str.charAt(i++);\n // still accumulate escapes at this point, but we do ignore\n // starts that are escaped\n if (escaping || c === '\\\\') {\n escaping = !escaping;\n acc += c;\n continue;\n }\n if (inBrace) {\n if (i === braceStart + 1) {\n if (c === '^' || c === '!') {\n braceNeg = true;\n }\n }\n else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {\n inBrace = false;\n }\n acc += c;\n continue;\n }\n else if (c === '[') {\n inBrace = true;\n braceStart = i;\n braceNeg = false;\n acc += c;\n continue;\n }\n if (!opt.noext && isExtglobType(c) && str.charAt(i) === '(') {\n ast.push(acc);\n acc = '';\n const ext = new AST(c, ast);\n i = AST.#parseAST(str, ext, i, opt);\n ast.push(ext);\n continue;\n }\n acc += c;\n }\n ast.push(acc);\n return i;\n }\n // some kind of extglob, pos is at the (\n // find the next | or )\n let i = pos + 1;\n let part = new AST(null, ast);\n const parts = [];\n let acc = '';\n while (i < str.length) {\n const c = str.charAt(i++);\n // still accumulate escapes at this point, but we do ignore\n // starts that are escaped\n if (escaping || c === '\\\\') {\n escaping = !escaping;\n acc += c;\n continue;\n }\n if (inBrace) {\n if (i === braceStart + 1) {\n if (c === '^' || c === '!') {\n braceNeg = true;\n }\n }\n else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {\n inBrace = false;\n }\n acc += c;\n continue;\n }\n else if (c === '[') {\n inBrace = true;\n braceStart = i;\n braceNeg = false;\n acc += c;\n continue;\n }\n if (isExtglobType(c) && str.charAt(i) === '(') {\n part.push(acc);\n acc = '';\n const ext = new AST(c, part);\n part.push(ext);\n i = AST.#parseAST(str, ext, i, opt);\n continue;\n }\n if (c === '|') {\n part.push(acc);\n acc = '';\n parts.push(part);\n part = new AST(null, ast);\n continue;\n }\n if (c === ')') {\n if (acc === '' && ast.#parts.length === 0) {\n ast.#emptyExt = true;\n }\n part.push(acc);\n acc = '';\n ast.push(...parts, part);\n return i;\n }\n acc += c;\n }\n // unfinished extglob\n // if we got here, it was a malformed extglob! not an extglob, but\n // maybe something else in there.\n ast.type = null;\n ast.#hasMagic = undefined;\n ast.#parts = [str.substring(pos - 1)];\n return i;\n }\n static fromGlob(pattern, options = {}) {\n const ast = new AST(null, undefined, options);\n AST.#parseAST(pattern, ast, 0, options);\n return ast;\n }\n // returns the regular expression if there's magic, or the unescaped\n // string if not.\n toMMPattern() {\n // should only be called on root\n /* c8 ignore start */\n if (this !== this.#root)\n return this.#root.toMMPattern();\n /* c8 ignore stop */\n const glob = this.toString();\n const [re, body, hasMagic, uflag] = this.toRegExpSource();\n // if we're in nocase mode, and not nocaseMagicOnly, then we do\n // still need a regular expression if we have to case-insensitively\n // match capital/lowercase characters.\n const anyMagic = hasMagic ||\n this.#hasMagic ||\n (this.#options.nocase &&\n !this.#options.nocaseMagicOnly &&\n glob.toUpperCase() !== glob.toLowerCase());\n if (!anyMagic) {\n return body;\n }\n const flags = (this.#options.nocase ? 'i' : '') + (uflag ? 'u' : '');\n return Object.assign(new RegExp(`^${re}$`, flags), {\n _src: re,\n _glob: glob,\n });\n }\n get options() {\n return this.#options;\n }\n // returns the string match, the regexp source, whether there's magic\n // in the regexp (so a regular expression is required) and whether or\n // not the uflag is needed for the regular expression (for posix classes)\n // TODO: instead of injecting the start/end at this point, just return\n // the BODY of the regexp, along with the start/end portions suitable\n // for binding the start/end in either a joined full-path makeRe context\n // (where we bind to (^|/), or a standalone matchPart context (where\n // we bind to ^, and not /). Otherwise slashes get duped!\n //\n // In part-matching mode, the start is:\n // - if not isStart: nothing\n // - if traversal possible, but not allowed: ^(?!\\.\\.?$)\n // - if dots allowed or not possible: ^\n // - if dots possible and not allowed: ^(?!\\.)\n // end is:\n // - if not isEnd(): nothing\n // - else: $\n //\n // In full-path matching mode, we put the slash at the START of the\n // pattern, so start is:\n // - if first pattern: same as part-matching mode\n // - if not isStart(): nothing\n // - if traversal possible, but not allowed: /(?!\\.\\.?(?:$|/))\n // - if dots allowed or not possible: /\n // - if dots possible and not allowed: /(?!\\.)\n // end is:\n // - if last pattern, same as part-matching mode\n // - else nothing\n //\n // Always put the (?:$|/) on negated tails, though, because that has to be\n // there to bind the end of the negated pattern portion, and it's easier to\n // just stick it in now rather than try to inject it later in the middle of\n // the pattern.\n //\n // We can just always return the same end, and leave it up to the caller\n // to know whether it's going to be used joined or in parts.\n // And, if the start is adjusted slightly, can do the same there:\n // - if not isStart: nothing\n // - if traversal possible, but not allowed: (?:/|^)(?!\\.\\.?$)\n // - if dots allowed or not possible: (?:/|^)\n // - if dots possible and not allowed: (?:/|^)(?!\\.)\n //\n // But it's better to have a simpler binding without a conditional, for\n // performance, so probably better to return both start options.\n //\n // Then the caller just ignores the end if it's not the first pattern,\n // and the start always gets applied.\n //\n // But that's always going to be $ if it's the ending pattern, or nothing,\n // so the caller can just attach $ at the end of the pattern when building.\n //\n // So the todo is:\n // - better detect what kind of start is needed\n // - return both flavors of starting pattern\n // - attach $ at the end of the pattern when creating the actual RegExp\n //\n // Ah, but wait, no, that all only applies to the root when the first pattern\n // is not an extglob. If the first pattern IS an extglob, then we need all\n // that dot prevention biz to live in the extglob portions, because eg\n // +(*|.x*) can match .xy but not .yx.\n //\n // So, return the two flavors if it's #root and the first child is not an\n // AST, otherwise leave it to the child AST to handle it, and there,\n // use the (?:^|/) style of start binding.\n //\n // Even simplified further:\n // - Since the start for a join is eg /(?!\\.) and the start for a part\n // is ^(?!\\.), we can just prepend (?!\\.) to the pattern (either root\n // or start or whatever) and prepend ^ or / at the Regexp construction.\n toRegExpSource(allowDot) {\n const dot = allowDot ?? !!this.#options.dot;\n if (this.#root === this)\n this.#fillNegs();\n if (!this.type) {\n const noEmpty = this.isStart() &&\n this.isEnd() &&\n !this.#parts.some(s => typeof s !== 'string');\n const src = this.#parts\n .map(p => {\n const [re, _, hasMagic, uflag] = typeof p === 'string'\n ? AST.#parseGlob(p, this.#hasMagic, noEmpty)\n : p.toRegExpSource(allowDot);\n this.#hasMagic = this.#hasMagic || hasMagic;\n this.#uflag = this.#uflag || uflag;\n return re;\n })\n .join('');\n let start = '';\n if (this.isStart()) {\n if (typeof this.#parts[0] === 'string') {\n // this is the string that will match the start of the pattern,\n // so we need to protect against dots and such.\n // '.' and '..' cannot match unless the pattern is that exactly,\n // even if it starts with . or dot:true is set.\n const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]);\n if (!dotTravAllowed) {\n const aps = addPatternStart;\n // check if we have a possibility of matching . or ..,\n // and prevent that.\n const needNoTrav = \n // dots are allowed, and the pattern starts with [ or .\n (dot && aps.has(src.charAt(0))) ||\n // the pattern starts with \\., and then [ or .\n (src.startsWith('\\\\.') && aps.has(src.charAt(2))) ||\n // the pattern starts with \\.\\., and then [ or .\n (src.startsWith('\\\\.\\\\.') && aps.has(src.charAt(4)));\n // no need to prevent dots if it can't match a dot, or if a\n // sub-pattern will be preventing it anyway.\n const needNoDot = !dot && !allowDot && aps.has(src.charAt(0));\n start = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : '';\n }\n }\n }\n // append the \"end of path portion\" pattern to negation tails\n let end = '';\n if (this.isEnd() &&\n this.#root.#filledNegs &&\n this.#parent?.type === '!') {\n end = '(?:$|\\\\/)';\n }\n const final = start + src + end;\n return [\n final,\n unescape(src),\n (this.#hasMagic = !!this.#hasMagic),\n this.#uflag,\n ];\n }\n // We need to calculate the body *twice* if it's a repeat pattern\n // at the start, once in nodot mode, then again in dot mode, so a\n // pattern like *(?) can match 'x.y'\n const repeated = this.type === '*' || this.type === '+';\n // some kind of extglob\n const start = this.type === '!' ? '(?:(?!(?:' : '(?:';\n let body = this.#partsToRegExp(dot);\n if (this.isStart() && this.isEnd() && !body && this.type !== '!') {\n // invalid extglob, has to at least be *something* present, if it's\n // the entire path portion.\n const s = this.toString();\n this.#parts = [s];\n this.type = null;\n this.#hasMagic = undefined;\n return [s, unescape(this.toString()), false, false];\n }\n // XXX abstract out this map method\n let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot\n ? ''\n : this.#partsToRegExp(true);\n if (bodyDotAllowed === body) {\n bodyDotAllowed = '';\n }\n if (bodyDotAllowed) {\n body = `(?:${body})(?:${bodyDotAllowed})*?`;\n }\n // an empty !() is exactly equivalent to a starNoEmpty\n let final = '';\n if (this.type === '!' && this.#emptyExt) {\n final = (this.isStart() && !dot ? startNoDot : '') + starNoEmpty;\n }\n else {\n const close = this.type === '!'\n ? // !() must match something,but !(x) can match ''\n '))' +\n (this.isStart() && !dot && !allowDot ? startNoDot : '') +\n star +\n ')'\n : this.type === '@'\n ? ')'\n : this.type === '?'\n ? ')?'\n : this.type === '+' && bodyDotAllowed\n ? ')'\n : this.type === '*' && bodyDotAllowed\n ? `)?`\n : `)${this.type}`;\n final = start + body + close;\n }\n return [\n final,\n unescape(body),\n (this.#hasMagic = !!this.#hasMagic),\n this.#uflag,\n ];\n }\n #partsToRegExp(dot) {\n return this.#parts\n .map(p => {\n // extglob ASTs should only contain parent ASTs\n /* c8 ignore start */\n if (typeof p === 'string') {\n throw new Error('string type in extglob ast??');\n }\n /* c8 ignore stop */\n // can ignore hasMagic, because extglobs are already always magic\n const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot);\n this.#uflag = this.#uflag || uflag;\n return re;\n })\n .filter(p => !(this.isStart() && this.isEnd()) || !!p)\n .join('|');\n }\n static #parseGlob(glob, hasMagic, noEmpty = false) {\n let escaping = false;\n let re = '';\n let uflag = false;\n for (let i = 0; i < glob.length; i++) {\n const c = glob.charAt(i);\n if (escaping) {\n escaping = false;\n re += (reSpecials.has(c) ? '\\\\' : '') + c;\n continue;\n }\n if (c === '\\\\') {\n if (i === glob.length - 1) {\n re += '\\\\\\\\';\n }\n else {\n escaping = true;\n }\n continue;\n }\n if (c === '[') {\n const [src, needUflag, consumed, magic] = parseClass(glob, i);\n if (consumed) {\n re += src;\n uflag = uflag || needUflag;\n i += consumed - 1;\n hasMagic = hasMagic || magic;\n continue;\n }\n }\n if (c === '*') {\n re += noEmpty && glob === '*' ? starNoEmpty : star;\n hasMagic = true;\n continue;\n }\n if (c === '?') {\n re += qmark;\n hasMagic = true;\n continue;\n }\n re += regExpEscape(c);\n }\n return [re, unescape(glob), !!hasMagic, uflag];\n }\n}\n//# sourceMappingURL=ast.js.map","/**\n * Escape all magic characters in a glob pattern.\n *\n * If the {@link MinimatchOptions.windowsPathsNoEscape}\n * option is used, then characters are escaped by wrapping in `[]`, because\n * a magic character wrapped in a character class can only be satisfied by\n * that exact character. In this mode, `\\` is _not_ escaped, because it is\n * not interpreted as a magic character, but instead as a path separator.\n *\n * If the {@link MinimatchOptions.magicalBraces} option is used,\n * then braces (`{` and `}`) will be escaped.\n */\nexport const escape = (s, { windowsPathsNoEscape = false, magicalBraces = false, } = {}) => {\n // don't need to escape +@! because we escape the parens\n // that make those magic, and escaping ! as [!] isn't valid,\n // because [!]] is a valid glob class meaning not ']'.\n if (magicalBraces) {\n return windowsPathsNoEscape\n ? s.replace(/[?*()[\\]{}]/g, '[$&]')\n : s.replace(/[?*()[\\]\\\\{}]/g, '\\\\$&');\n }\n return windowsPathsNoEscape\n ? s.replace(/[?*()[\\]]/g, '[$&]')\n : s.replace(/[?*()[\\]\\\\]/g, '\\\\$&');\n};\n//# sourceMappingURL=escape.js.map","import { expand } from '@isaacs/brace-expansion';\nimport { assertValidPattern } from './assert-valid-pattern.js';\nimport { AST } from './ast.js';\nimport { escape } from './escape.js';\nimport { unescape } from './unescape.js';\nexport const minimatch = (p, pattern, options = {}) => {\n assertValidPattern(pattern);\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false;\n }\n return new Minimatch(pattern, options).match(p);\n};\n// Optimized checking for the most common glob patterns.\nconst starDotExtRE = /^\\*+([^+@!?\\*\\[\\(]*)$/;\nconst starDotExtTest = (ext) => (f) => !f.startsWith('.') && f.endsWith(ext);\nconst starDotExtTestDot = (ext) => (f) => f.endsWith(ext);\nconst starDotExtTestNocase = (ext) => {\n ext = ext.toLowerCase();\n return (f) => !f.startsWith('.') && f.toLowerCase().endsWith(ext);\n};\nconst starDotExtTestNocaseDot = (ext) => {\n ext = ext.toLowerCase();\n return (f) => f.toLowerCase().endsWith(ext);\n};\nconst starDotStarRE = /^\\*+\\.\\*+$/;\nconst starDotStarTest = (f) => !f.startsWith('.') && f.includes('.');\nconst starDotStarTestDot = (f) => f !== '.' && f !== '..' && f.includes('.');\nconst dotStarRE = /^\\.\\*+$/;\nconst dotStarTest = (f) => f !== '.' && f !== '..' && f.startsWith('.');\nconst starRE = /^\\*+$/;\nconst starTest = (f) => f.length !== 0 && !f.startsWith('.');\nconst starTestDot = (f) => f.length !== 0 && f !== '.' && f !== '..';\nconst qmarksRE = /^\\?+([^+@!?\\*\\[\\(]*)?$/;\nconst qmarksTestNocase = ([$0, ext = '']) => {\n const noext = qmarksTestNoExt([$0]);\n if (!ext)\n return noext;\n ext = ext.toLowerCase();\n return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestNocaseDot = ([$0, ext = '']) => {\n const noext = qmarksTestNoExtDot([$0]);\n if (!ext)\n return noext;\n ext = ext.toLowerCase();\n return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestDot = ([$0, ext = '']) => {\n const noext = qmarksTestNoExtDot([$0]);\n return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTest = ([$0, ext = '']) => {\n const noext = qmarksTestNoExt([$0]);\n return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTestNoExt = ([$0]) => {\n const len = $0.length;\n return (f) => f.length === len && !f.startsWith('.');\n};\nconst qmarksTestNoExtDot = ([$0]) => {\n const len = $0.length;\n return (f) => f.length === len && f !== '.' && f !== '..';\n};\n/* c8 ignore start */\nconst defaultPlatform = (typeof process === 'object' && process\n ? (typeof process.env === 'object' &&\n process.env &&\n process.env.__MINIMATCH_TESTING_PLATFORM__) ||\n process.platform\n : 'posix');\nconst path = {\n win32: { sep: '\\\\' },\n posix: { sep: '/' },\n};\n/* c8 ignore stop */\nexport const sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep;\nminimatch.sep = sep;\nexport const GLOBSTAR = Symbol('globstar **');\nminimatch.GLOBSTAR = GLOBSTAR;\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nconst qmark = '[^/]';\n// * => any number of characters\nconst star = qmark + '*?';\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nconst twoStarDot = '(?:(?!(?:\\\\/|^)(?:\\\\.{1,2})($|\\\\/)).)*?';\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nconst twoStarNoDot = '(?:(?!(?:\\\\/|^)\\\\.).)*?';\nexport const filter = (pattern, options = {}) => (p) => minimatch(p, pattern, options);\nminimatch.filter = filter;\nconst ext = (a, b = {}) => Object.assign({}, a, b);\nexport const defaults = (def) => {\n if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n return minimatch;\n }\n const orig = minimatch;\n const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options));\n return Object.assign(m, {\n Minimatch: class Minimatch extends orig.Minimatch {\n constructor(pattern, options = {}) {\n super(pattern, ext(def, options));\n }\n static defaults(options) {\n return orig.defaults(ext(def, options)).Minimatch;\n }\n },\n AST: class AST extends orig.AST {\n /* c8 ignore start */\n constructor(type, parent, options = {}) {\n super(type, parent, ext(def, options));\n }\n /* c8 ignore stop */\n static fromGlob(pattern, options = {}) {\n return orig.AST.fromGlob(pattern, ext(def, options));\n }\n },\n unescape: (s, options = {}) => orig.unescape(s, ext(def, options)),\n escape: (s, options = {}) => orig.escape(s, ext(def, options)),\n filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)),\n defaults: (options) => orig.defaults(ext(def, options)),\n makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)),\n braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)),\n match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)),\n sep: orig.sep,\n GLOBSTAR: GLOBSTAR,\n });\n};\nminimatch.defaults = defaults;\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nexport const braceExpand = (pattern, options = {}) => {\n assertValidPattern(pattern);\n // Thanks to Yeting Li <https://github.com/yetingli> for\n // improving this regexp to avoid a ReDOS vulnerability.\n if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n // shortcut. no need to expand.\n return [pattern];\n }\n return expand(pattern);\n};\nminimatch.braceExpand = braceExpand;\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nexport const makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe();\nminimatch.makeRe = makeRe;\nexport const match = (list, pattern, options = {}) => {\n const mm = new Minimatch(pattern, options);\n list = list.filter(f => mm.match(f));\n if (mm.options.nonull && !list.length) {\n list.push(pattern);\n }\n return list;\n};\nminimatch.match = match;\n// replace stuff like \\* with *\nconst globMagic = /[?*]|[+@!]\\(.*?\\)|\\[|\\]/;\nconst regExpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\nexport class Minimatch {\n options;\n set;\n pattern;\n windowsPathsNoEscape;\n nonegate;\n negate;\n comment;\n empty;\n preserveMultipleSlashes;\n partial;\n globSet;\n globParts;\n nocase;\n isWindows;\n platform;\n windowsNoMagicRoot;\n regexp;\n constructor(pattern, options = {}) {\n assertValidPattern(pattern);\n options = options || {};\n this.options = options;\n this.pattern = pattern;\n this.platform = options.platform || defaultPlatform;\n this.isWindows = this.platform === 'win32';\n this.windowsPathsNoEscape =\n !!options.windowsPathsNoEscape || options.allowWindowsEscape === false;\n if (this.windowsPathsNoEscape) {\n this.pattern = this.pattern.replace(/\\\\/g, '/');\n }\n this.preserveMultipleSlashes = !!options.preserveMultipleSlashes;\n this.regexp = null;\n this.negate = false;\n this.nonegate = !!options.nonegate;\n this.comment = false;\n this.empty = false;\n this.partial = !!options.partial;\n this.nocase = !!this.options.nocase;\n this.windowsNoMagicRoot =\n options.windowsNoMagicRoot !== undefined\n ? options.windowsNoMagicRoot\n : !!(this.isWindows && this.nocase);\n this.globSet = [];\n this.globParts = [];\n this.set = [];\n // make the set of regexps etc.\n this.make();\n }\n hasMagic() {\n if (this.options.magicalBraces && this.set.length > 1) {\n return true;\n }\n for (const pattern of this.set) {\n for (const part of pattern) {\n if (typeof part !== 'string')\n return true;\n }\n }\n return false;\n }\n debug(..._) { }\n make() {\n const pattern = this.pattern;\n const options = this.options;\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true;\n return;\n }\n if (!pattern) {\n this.empty = true;\n return;\n }\n // step 1: figure out negation, etc.\n this.parseNegate();\n // step 2: expand braces\n this.globSet = [...new Set(this.braceExpand())];\n if (options.debug) {\n this.debug = (...args) => console.error(...args);\n }\n this.debug(this.pattern, this.globSet);\n // step 3: now we have a set, so turn each one into a series of\n // path-portion matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n //\n // First, we preprocess to make the glob pattern sets a bit simpler\n // and deduped. There are some perf-killing patterns that can cause\n // problems with a glob walk, but we can simplify them down a bit.\n const rawGlobParts = this.globSet.map(s => this.slashSplit(s));\n this.globParts = this.preprocess(rawGlobParts);\n this.debug(this.pattern, this.globParts);\n // glob --> regexps\n let set = this.globParts.map((s, _, __) => {\n if (this.isWindows && this.windowsNoMagicRoot) {\n // check if it's a drive or unc path.\n const isUNC = s[0] === '' &&\n s[1] === '' &&\n (s[2] === '?' || !globMagic.test(s[2])) &&\n !globMagic.test(s[3]);\n const isDrive = /^[a-z]:/i.test(s[0]);\n if (isUNC) {\n return [...s.slice(0, 4), ...s.slice(4).map(ss => this.parse(ss))];\n }\n else if (isDrive) {\n return [s[0], ...s.slice(1).map(ss => this.parse(ss))];\n }\n }\n return s.map(ss => this.parse(ss));\n });\n this.debug(this.pattern, set);\n // filter out everything that didn't compile properly.\n this.set = set.filter(s => s.indexOf(false) === -1);\n // do not treat the ? in UNC paths as magic\n if (this.isWindows) {\n for (let i = 0; i < this.set.length; i++) {\n const p = this.set[i];\n if (p[0] === '' &&\n p[1] === '' &&\n this.globParts[i][2] === '?' &&\n typeof p[3] === 'string' &&\n /^[a-z]:$/i.test(p[3])) {\n p[2] = '?';\n }\n }\n }\n this.debug(this.pattern, this.set);\n }\n // various transforms to equivalent pattern sets that are\n // faster to process in a filesystem walk. The goal is to\n // eliminate what we can, and push all ** patterns as far\n // to the right as possible, even if it increases the number\n // of patterns that we have to process.\n preprocess(globParts) {\n // if we're not in globstar mode, then turn all ** into *\n if (this.options.noglobstar) {\n for (let i = 0; i < globParts.length; i++) {\n for (let j = 0; j < globParts[i].length; j++) {\n if (globParts[i][j] === '**') {\n globParts[i][j] = '*';\n }\n }\n }\n }\n const { optimizationLevel = 1 } = this.options;\n if (optimizationLevel >= 2) {\n // aggressive optimization for the purpose of fs walking\n globParts = this.firstPhasePreProcess(globParts);\n globParts = this.secondPhasePreProcess(globParts);\n }\n else if (optimizationLevel >= 1) {\n // just basic optimizations to remove some .. parts\n globParts = this.levelOneOptimize(globParts);\n }\n else {\n // just collapse multiple ** portions into one\n globParts = this.adjascentGlobstarOptimize(globParts);\n }\n return globParts;\n }\n // just get rid of adjascent ** portions\n adjascentGlobstarOptimize(globParts) {\n return globParts.map(parts => {\n let gs = -1;\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let i = gs;\n while (parts[i + 1] === '**') {\n i++;\n }\n if (i !== gs) {\n parts.splice(gs, i - gs);\n }\n }\n return parts;\n });\n }\n // get rid of adjascent ** and resolve .. portions\n levelOneOptimize(globParts) {\n return globParts.map(parts => {\n parts = parts.reduce((set, part) => {\n const prev = set[set.length - 1];\n if (part === '**' && prev === '**') {\n return set;\n }\n if (part === '..') {\n if (prev && prev !== '..' && prev !== '.' && prev !== '**') {\n set.pop();\n return set;\n }\n }\n set.push(part);\n return set;\n }, []);\n return parts.length === 0 ? [''] : parts;\n });\n }\n levelTwoFileOptimize(parts) {\n if (!Array.isArray(parts)) {\n parts = this.slashSplit(parts);\n }\n let didSomething = false;\n do {\n didSomething = false;\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i];\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '')\n continue;\n if (p === '.' || p === '') {\n didSomething = true;\n parts.splice(i, 1);\n i--;\n }\n }\n if (parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')) {\n didSomething = true;\n parts.pop();\n }\n }\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd = 0;\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1];\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true;\n parts.splice(dd - 1, 2);\n dd -= 2;\n }\n }\n } while (didSomething);\n return parts.length === 0 ? [''] : parts;\n }\n // First phase: single-pattern processing\n // <pre> is 1 or more portions\n // <rest> is 1 or more portions\n // <p> is any portion other than ., .., '', or **\n // <e> is . or ''\n //\n // **/.. is *brutal* for filesystem walking performance, because\n // it effectively resets the recursive walk each time it occurs,\n // and ** cannot be reduced out by a .. pattern part like a regexp\n // or most strings (other than .., ., and '') can be.\n //\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n // <pre>/<e>/<rest> -> <pre>/<rest>\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n // **/**/<rest> -> **/<rest>\n //\n // **/*/<rest> -> */**/<rest> <== not valid because ** doesn't follow\n // this WOULD be allowed if ** did follow symlinks, or * didn't\n firstPhasePreProcess(globParts) {\n let didSomething = false;\n do {\n didSomething = false;\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n for (let parts of globParts) {\n let gs = -1;\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let gss = gs;\n while (parts[gss + 1] === '**') {\n // <pre>/**/**/<rest> -> <pre>/**/<rest>\n gss++;\n }\n // eg, if gs is 2 and gss is 4, that means we have 3 **\n // parts, and can remove 2 of them.\n if (gss > gs) {\n parts.splice(gs + 1, gss - gs);\n }\n let next = parts[gs + 1];\n const p = parts[gs + 2];\n const p2 = parts[gs + 3];\n if (next !== '..')\n continue;\n if (!p ||\n p === '.' ||\n p === '..' ||\n !p2 ||\n p2 === '.' ||\n p2 === '..') {\n continue;\n }\n didSomething = true;\n // edit parts in place, and push the new one\n parts.splice(gs, 1);\n const other = parts.slice(0);\n other[gs] = '**';\n globParts.push(other);\n gs--;\n }\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i];\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '')\n continue;\n if (p === '.' || p === '') {\n didSomething = true;\n parts.splice(i, 1);\n i--;\n }\n }\n if (parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')) {\n didSomething = true;\n parts.pop();\n }\n }\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd = 0;\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1];\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true;\n const needDot = dd === 1 && parts[dd + 1] === '**';\n const splin = needDot ? ['.'] : [];\n parts.splice(dd - 1, 2, ...splin);\n if (parts.length === 0)\n parts.push('');\n dd -= 2;\n }\n }\n }\n } while (didSomething);\n return globParts;\n }\n // second phase: multi-pattern dedupes\n // {<pre>/*/<rest>,<pre>/<p>/<rest>} -> <pre>/*/<rest>\n // {<pre>/<rest>,<pre>/<rest>} -> <pre>/<rest>\n // {<pre>/**/<rest>,<pre>/<rest>} -> <pre>/**/<rest>\n //\n // {<pre>/**/<rest>,<pre>/**/<p>/<rest>} -> <pre>/**/<rest>\n // ^-- not valid because ** doens't follow symlinks\n secondPhasePreProcess(globParts) {\n for (let i = 0; i < globParts.length - 1; i++) {\n for (let j = i + 1; j < globParts.length; j++) {\n const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);\n if (matched) {\n globParts[i] = [];\n globParts[j] = matched;\n break;\n }\n }\n }\n return globParts.filter(gs => gs.length);\n }\n partsMatch(a, b, emptyGSMatch = false) {\n let ai = 0;\n let bi = 0;\n let result = [];\n let which = '';\n while (ai < a.length && bi < b.length) {\n if (a[ai] === b[bi]) {\n result.push(which === 'b' ? b[bi] : a[ai]);\n ai++;\n bi++;\n }\n else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) {\n result.push(a[ai]);\n ai++;\n }\n else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) {\n result.push(b[bi]);\n bi++;\n }\n else if (a[ai] === '*' &&\n b[bi] &&\n (this.options.dot || !b[bi].startsWith('.')) &&\n b[bi] !== '**') {\n if (which === 'b')\n return false;\n which = 'a';\n result.push(a[ai]);\n ai++;\n bi++;\n }\n else if (b[bi] === '*' &&\n a[ai] &&\n (this.options.dot || !a[ai].startsWith('.')) &&\n a[ai] !== '**') {\n if (which === 'a')\n return false;\n which = 'b';\n result.push(b[bi]);\n ai++;\n bi++;\n }\n else {\n return false;\n }\n }\n // if we fall out of the loop, it means they two are identical\n // as long as their lengths match\n return a.length === b.length && result;\n }\n parseNegate() {\n if (this.nonegate)\n return;\n const pattern = this.pattern;\n let negate = false;\n let negateOffset = 0;\n for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {\n negate = !negate;\n negateOffset++;\n }\n if (negateOffset)\n this.pattern = pattern.slice(negateOffset);\n this.negate = negate;\n }\n // set partial to true to test if, for example,\n // \"/a/b\" matches the start of \"/*/b/*/d\"\n // Partial means, if you run out of file before you run\n // out of pattern, then that's fine, as long as all\n // the parts match.\n matchOne(file, pattern, partial = false) {\n const options = this.options;\n // UNC paths like //?/X:/... can match X:/... and vice versa\n // Drive letters in absolute drive or unc paths are always compared\n // case-insensitively.\n if (this.isWindows) {\n const fileDrive = typeof file[0] === 'string' && /^[a-z]:$/i.test(file[0]);\n const fileUNC = !fileDrive &&\n file[0] === '' &&\n file[1] === '' &&\n file[2] === '?' &&\n /^[a-z]:$/i.test(file[3]);\n const patternDrive = typeof pattern[0] === 'string' && /^[a-z]:$/i.test(pattern[0]);\n const patternUNC = !patternDrive &&\n pattern[0] === '' &&\n pattern[1] === '' &&\n pattern[2] === '?' &&\n typeof pattern[3] === 'string' &&\n /^[a-z]:$/i.test(pattern[3]);\n const fdi = fileUNC ? 3 : fileDrive ? 0 : undefined;\n const pdi = patternUNC ? 3 : patternDrive ? 0 : undefined;\n if (typeof fdi === 'number' && typeof pdi === 'number') {\n const [fd, pd] = [file[fdi], pattern[pdi]];\n if (fd.toLowerCase() === pd.toLowerCase()) {\n pattern[pdi] = fd;\n if (pdi > fdi) {\n pattern = pattern.slice(pdi);\n }\n else if (fdi > pdi) {\n file = file.slice(fdi);\n }\n }\n }\n }\n // resolve and reduce . and .. portions in the file as well.\n // don't need to do the second phase, because it's only one string[]\n const { optimizationLevel = 1 } = this.options;\n if (optimizationLevel >= 2) {\n file = this.levelTwoFileOptimize(file);\n }\n this.debug('matchOne', this, { file, pattern });\n this.debug('matchOne', file.length, pattern.length);\n for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {\n this.debug('matchOne loop');\n var p = pattern[pi];\n var f = file[fi];\n this.debug(pattern, p, f);\n // should be impossible.\n // some invalid regexp stuff in the set.\n /* c8 ignore start */\n if (p === false) {\n return false;\n }\n /* c8 ignore stop */\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f]);\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi;\n var pr = pi + 1;\n if (pr === pl) {\n this.debug('** at the end');\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' ||\n file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.'))\n return false;\n }\n return true;\n }\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr];\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee);\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee);\n // found a match.\n return true;\n }\n else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' ||\n swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr);\n break;\n }\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue');\n fr++;\n }\n }\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n /* c8 ignore start */\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr);\n if (fr === fl) {\n return true;\n }\n }\n /* c8 ignore stop */\n return false;\n }\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n let hit;\n if (typeof p === 'string') {\n hit = f === p;\n this.debug('string match', p, f, hit);\n }\n else {\n hit = p.test(f);\n this.debug('pattern match', p, f, hit);\n }\n if (!hit)\n return false;\n }\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true;\n }\n else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial;\n }\n else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n return fi === fl - 1 && file[fi] === '';\n /* c8 ignore start */\n }\n else {\n // should be unreachable.\n throw new Error('wtf?');\n }\n /* c8 ignore stop */\n }\n braceExpand() {\n return braceExpand(this.pattern, this.options);\n }\n parse(pattern) {\n assertValidPattern(pattern);\n const options = this.options;\n // shortcuts\n if (pattern === '**')\n return GLOBSTAR;\n if (pattern === '')\n return '';\n // far and away, the most common glob pattern parts are\n // *, *.*, and *.<ext> Add a fast check method for those.\n let m;\n let fastTest = null;\n if ((m = pattern.match(starRE))) {\n fastTest = options.dot ? starTestDot : starTest;\n }\n else if ((m = pattern.match(starDotExtRE))) {\n fastTest = (options.nocase\n ? options.dot\n ? starDotExtTestNocaseDot\n : starDotExtTestNocase\n : options.dot\n ? starDotExtTestDot\n : starDotExtTest)(m[1]);\n }\n else if ((m = pattern.match(qmarksRE))) {\n fastTest = (options.nocase\n ? options.dot\n ? qmarksTestNocaseDot\n : qmarksTestNocase\n : options.dot\n ? qmarksTestDot\n : qmarksTest)(m);\n }\n else if ((m = pattern.match(starDotStarRE))) {\n fastTest = options.dot ? starDotStarTestDot : starDotStarTest;\n }\n else if ((m = pattern.match(dotStarRE))) {\n fastTest = dotStarTest;\n }\n const re = AST.fromGlob(pattern, this.options).toMMPattern();\n if (fastTest && typeof re === 'object') {\n // Avoids overriding in frozen environments\n Reflect.defineProperty(re, 'test', { value: fastTest });\n }\n return re;\n }\n makeRe() {\n if (this.regexp || this.regexp === false)\n return this.regexp;\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n const set = this.set;\n if (!set.length) {\n this.regexp = false;\n return this.regexp;\n }\n const options = this.options;\n const twoStar = options.noglobstar\n ? star\n : options.dot\n ? twoStarDot\n : twoStarNoDot;\n const flags = new Set(options.nocase ? ['i'] : []);\n // regexpify non-globstar patterns\n // if ** is only item, then we just do one twoStar\n // if ** is first, and there are more, prepend (\\/|twoStar\\/)? to next\n // if ** is last, append (\\/twoStar|) to previous\n // if ** is in the middle, append (\\/|\\/twoStar\\/) to previous\n // then filter out GLOBSTAR symbols\n let re = set\n .map(pattern => {\n const pp = pattern.map(p => {\n if (p instanceof RegExp) {\n for (const f of p.flags.split(''))\n flags.add(f);\n }\n return typeof p === 'string'\n ? regExpEscape(p)\n : p === GLOBSTAR\n ? GLOBSTAR\n : p._src;\n });\n pp.forEach((p, i) => {\n const next = pp[i + 1];\n const prev = pp[i - 1];\n if (p !== GLOBSTAR || prev === GLOBSTAR) {\n return;\n }\n if (prev === undefined) {\n if (next !== undefined && next !== GLOBSTAR) {\n pp[i + 1] = '(?:\\\\/|' + twoStar + '\\\\/)?' + next;\n }\n else {\n pp[i] = twoStar;\n }\n }\n else if (next === undefined) {\n pp[i - 1] = prev + '(?:\\\\/|\\\\/' + twoStar + ')?';\n }\n else if (next !== GLOBSTAR) {\n pp[i - 1] = prev + '(?:\\\\/|\\\\/' + twoStar + '\\\\/)' + next;\n pp[i + 1] = GLOBSTAR;\n }\n });\n const filtered = pp.filter(p => p !== GLOBSTAR);\n // For partial matches, we need to make the pattern match\n // any prefix of the full path. We do this by generating\n // alternative patterns that match progressively longer prefixes.\n if (this.partial && filtered.length >= 1) {\n const prefixes = [];\n for (let i = 1; i <= filtered.length; i++) {\n prefixes.push(filtered.slice(0, i).join('/'));\n }\n return '(?:' + prefixes.join('|') + ')';\n }\n return filtered.join('/');\n })\n .join('|');\n // need to wrap in parens if we had more than one thing with |,\n // otherwise only the first will be anchored to ^ and the last to $\n const [open, close] = set.length > 1 ? ['(?:', ')'] : ['', ''];\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^' + open + re + close + '$';\n // In partial mode, '/' should always match as it's a valid prefix for any pattern\n if (this.partial) {\n re = '^(?:\\\\/|' + open + re.slice(1, -1) + close + ')$';\n }\n // can match anything, as long as it's not this.\n if (this.negate)\n re = '^(?!' + re + ').+$';\n try {\n this.regexp = new RegExp(re, [...flags].join(''));\n /* c8 ignore start */\n }\n catch (ex) {\n // should be impossible\n this.regexp = false;\n }\n /* c8 ignore stop */\n return this.regexp;\n }\n slashSplit(p) {\n // if p starts with // on windows, we preserve that\n // so that UNC paths aren't broken. Otherwise, any number of\n // / characters are coalesced into one, unless\n // preserveMultipleSlashes is set to true.\n if (this.preserveMultipleSlashes) {\n return p.split('/');\n }\n else if (this.isWindows && /^\\/\\/[^\\/]+/.test(p)) {\n // add an extra '' for the one we lose\n return ['', ...p.split(/\\/+/)];\n }\n else {\n return p.split(/\\/+/);\n }\n }\n match(f, partial = this.partial) {\n this.debug('match', f, this.pattern);\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) {\n return false;\n }\n if (this.empty) {\n return f === '';\n }\n if (f === '/' && partial) {\n return true;\n }\n const options = this.options;\n // windows: need to use /, not \\\n if (this.isWindows) {\n f = f.split('\\\\').join('/');\n }\n // treat the test path as a set of pathparts.\n const ff = this.slashSplit(f);\n this.debug(this.pattern, 'split', ff);\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n const set = this.set;\n this.debug(this.pattern, 'set', set);\n // Find the basename of the path by looking for the last non-empty segment\n let filename = ff[ff.length - 1];\n if (!filename) {\n for (let i = ff.length - 2; !filename && i >= 0; i--) {\n filename = ff[i];\n }\n }\n for (let i = 0; i < set.length; i++) {\n const pattern = set[i];\n let file = ff;\n if (options.matchBase && pattern.length === 1) {\n file = [filename];\n }\n const hit = this.matchOne(file, pattern, partial);\n if (hit) {\n if (options.flipNegate) {\n return true;\n }\n return !this.negate;\n }\n }\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) {\n return false;\n }\n return this.negate;\n }\n static defaults(def) {\n return minimatch.defaults(def).Minimatch;\n }\n}\n/* c8 ignore start */\nexport { AST } from './ast.js';\nexport { escape } from './escape.js';\nexport { unescape } from './unescape.js';\n/* c8 ignore stop */\nminimatch.AST = AST;\nminimatch.Minimatch = Minimatch;\nminimatch.escape = escape;\nminimatch.unescape = unescape;\n//# sourceMappingURL=index.js.map","/**\n * @module LRUCache\n */\nconst defaultPerf = (typeof performance === 'object' &&\n performance &&\n typeof performance.now === 'function') ?\n performance\n : Date;\nconst warned = new Set();\n/* c8 ignore start */\nconst PROCESS = (typeof process === 'object' && !!process ?\n process\n : {});\n/* c8 ignore start */\nconst emitWarning = (msg, type, code, fn) => {\n typeof PROCESS.emitWarning === 'function' ?\n PROCESS.emitWarning(msg, type, code, fn)\n : console.error(`[${code}] ${type}: ${msg}`);\n};\nlet AC = globalThis.AbortController;\nlet AS = globalThis.AbortSignal;\n/* c8 ignore start */\nif (typeof AC === 'undefined') {\n //@ts-ignore\n AS = class AbortSignal {\n onabort;\n _onabort = [];\n reason;\n aborted = false;\n addEventListener(_, fn) {\n this._onabort.push(fn);\n }\n };\n //@ts-ignore\n AC = class AbortController {\n constructor() {\n warnACPolyfill();\n }\n signal = new AS();\n abort(reason) {\n if (this.signal.aborted)\n return;\n //@ts-ignore\n this.signal.reason = reason;\n //@ts-ignore\n this.signal.aborted = true;\n //@ts-ignore\n for (const fn of this.signal._onabort) {\n fn(reason);\n }\n this.signal.onabort?.(reason);\n }\n };\n let printACPolyfillWarning = PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1';\n const warnACPolyfill = () => {\n if (!printACPolyfillWarning)\n return;\n printACPolyfillWarning = false;\n emitWarning('AbortController is not defined. If using lru-cache in ' +\n 'node 14, load an AbortController polyfill from the ' +\n '`node-abort-controller` package. A minimal polyfill is ' +\n 'provided for use by LRUCache.fetch(), but it should not be ' +\n 'relied upon in other contexts (eg, passing it to other APIs that ' +\n 'use AbortController/AbortSignal might have undesirable effects). ' +\n 'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.', 'NO_ABORT_CONTROLLER', 'ENOTSUP', warnACPolyfill);\n };\n}\n/* c8 ignore stop */\nconst shouldWarn = (code) => !warned.has(code);\nconst TYPE = Symbol('type');\nconst isPosInt = (n) => n && n === Math.floor(n) && n > 0 && isFinite(n);\n/* c8 ignore start */\n// This is a little bit ridiculous, tbh.\n// The maximum array length is 2^32-1 or thereabouts on most JS impls.\n// And well before that point, you're caching the entire world, I mean,\n// that's ~32GB of just integers for the next/prev links, plus whatever\n// else to hold that many keys and values. Just filling the memory with\n// zeroes at init time is brutal when you get that big.\n// But why not be complete?\n// Maybe in the future, these limits will have expanded.\nconst getUintArray = (max) => !isPosInt(max) ? null\n : max <= Math.pow(2, 8) ? Uint8Array\n : max <= Math.pow(2, 16) ? Uint16Array\n : max <= Math.pow(2, 32) ? Uint32Array\n : max <= Number.MAX_SAFE_INTEGER ? ZeroArray\n : null;\n/* c8 ignore stop */\nclass ZeroArray extends Array {\n constructor(size) {\n super(size);\n this.fill(0);\n }\n}\nclass Stack {\n heap;\n length;\n // private constructor\n static #constructing = false;\n static create(max) {\n const HeapCls = getUintArray(max);\n if (!HeapCls)\n return [];\n Stack.#constructing = true;\n const s = new Stack(max, HeapCls);\n Stack.#constructing = false;\n return s;\n }\n constructor(max, HeapCls) {\n /* c8 ignore start */\n if (!Stack.#constructing) {\n throw new TypeError('instantiate Stack using Stack.create(n)');\n }\n /* c8 ignore stop */\n this.heap = new HeapCls(max);\n this.length = 0;\n }\n push(n) {\n this.heap[this.length++] = n;\n }\n pop() {\n return this.heap[--this.length];\n }\n}\n/**\n * Default export, the thing you're using this module to get.\n *\n * The `K` and `V` types define the key and value types, respectively. The\n * optional `FC` type defines the type of the `context` object passed to\n * `cache.fetch()` and `cache.memo()`.\n *\n * Keys and values **must not** be `null` or `undefined`.\n *\n * All properties from the options object (with the exception of `max`,\n * `maxSize`, `fetchMethod`, `memoMethod`, `dispose` and `disposeAfter`) are\n * added as normal public members. (The listed options are read-only getters.)\n *\n * Changing any of these will alter the defaults for subsequent method calls.\n */\nexport class LRUCache {\n // options that cannot be changed without disaster\n #max;\n #maxSize;\n #dispose;\n #onInsert;\n #disposeAfter;\n #fetchMethod;\n #memoMethod;\n #perf;\n /**\n * {@link LRUCache.OptionsBase.perf}\n */\n get perf() {\n return this.#perf;\n }\n /**\n * {@link LRUCache.OptionsBase.ttl}\n */\n ttl;\n /**\n * {@link LRUCache.OptionsBase.ttlResolution}\n */\n ttlResolution;\n /**\n * {@link LRUCache.OptionsBase.ttlAutopurge}\n */\n ttlAutopurge;\n /**\n * {@link LRUCache.OptionsBase.updateAgeOnGet}\n */\n updateAgeOnGet;\n /**\n * {@link LRUCache.OptionsBase.updateAgeOnHas}\n */\n updateAgeOnHas;\n /**\n * {@link LRUCache.OptionsBase.allowStale}\n */\n allowStale;\n /**\n * {@link LRUCache.OptionsBase.noDisposeOnSet}\n */\n noDisposeOnSet;\n /**\n * {@link LRUCache.OptionsBase.noUpdateTTL}\n */\n noUpdateTTL;\n /**\n * {@link LRUCache.OptionsBase.maxEntrySize}\n */\n maxEntrySize;\n /**\n * {@link LRUCache.OptionsBase.sizeCalculation}\n */\n sizeCalculation;\n /**\n * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}\n */\n noDeleteOnFetchRejection;\n /**\n * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}\n */\n noDeleteOnStaleGet;\n /**\n * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}\n */\n allowStaleOnFetchAbort;\n /**\n * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}\n */\n allowStaleOnFetchRejection;\n /**\n * {@link LRUCache.OptionsBase.ignoreFetchAbort}\n */\n ignoreFetchAbort;\n // computed properties\n #size;\n #calculatedSize;\n #keyMap;\n #keyList;\n #valList;\n #next;\n #prev;\n #head;\n #tail;\n #free;\n #disposed;\n #sizes;\n #starts;\n #ttls;\n #autopurgeTimers;\n #hasDispose;\n #hasFetchMethod;\n #hasDisposeAfter;\n #hasOnInsert;\n /**\n * Do not call this method unless you need to inspect the\n * inner workings of the cache. If anything returned by this\n * object is modified in any way, strange breakage may occur.\n *\n * These fields are private for a reason!\n *\n * @internal\n */\n static unsafeExposeInternals(c) {\n return {\n // properties\n starts: c.#starts,\n ttls: c.#ttls,\n autopurgeTimers: c.#autopurgeTimers,\n sizes: c.#sizes,\n keyMap: c.#keyMap,\n keyList: c.#keyList,\n valList: c.#valList,\n next: c.#next,\n prev: c.#prev,\n get head() {\n return c.#head;\n },\n get tail() {\n return c.#tail;\n },\n free: c.#free,\n // methods\n isBackgroundFetch: (p) => c.#isBackgroundFetch(p),\n backgroundFetch: (k, index, options, context) => c.#backgroundFetch(k, index, options, context),\n moveToTail: (index) => c.#moveToTail(index),\n indexes: (options) => c.#indexes(options),\n rindexes: (options) => c.#rindexes(options),\n isStale: (index) => c.#isStale(index),\n };\n }\n // Protected read-only members\n /**\n * {@link LRUCache.OptionsBase.max} (read-only)\n */\n get max() {\n return this.#max;\n }\n /**\n * {@link LRUCache.OptionsBase.maxSize} (read-only)\n */\n get maxSize() {\n return this.#maxSize;\n }\n /**\n * The total computed size of items in the cache (read-only)\n */\n get calculatedSize() {\n return this.#calculatedSize;\n }\n /**\n * The number of items stored in the cache (read-only)\n */\n get size() {\n return this.#size;\n }\n /**\n * {@link LRUCache.OptionsBase.fetchMethod} (read-only)\n */\n get fetchMethod() {\n return this.#fetchMethod;\n }\n get memoMethod() {\n return this.#memoMethod;\n }\n /**\n * {@link LRUCache.OptionsBase.dispose} (read-only)\n */\n get dispose() {\n return this.#dispose;\n }\n /**\n * {@link LRUCache.OptionsBase.onInsert} (read-only)\n */\n get onInsert() {\n return this.#onInsert;\n }\n /**\n * {@link LRUCache.OptionsBase.disposeAfter} (read-only)\n */\n get disposeAfter() {\n return this.#disposeAfter;\n }\n constructor(options) {\n const { max = 0, ttl, ttlResolution = 1, ttlAutopurge, updateAgeOnGet, updateAgeOnHas, allowStale, dispose, onInsert, disposeAfter, noDisposeOnSet, noUpdateTTL, maxSize = 0, maxEntrySize = 0, sizeCalculation, fetchMethod, memoMethod, noDeleteOnFetchRejection, noDeleteOnStaleGet, allowStaleOnFetchRejection, allowStaleOnFetchAbort, ignoreFetchAbort, perf, } = options;\n if (perf !== undefined) {\n if (typeof perf?.now !== 'function') {\n throw new TypeError('perf option must have a now() method if specified');\n }\n }\n this.#perf = perf ?? defaultPerf;\n if (max !== 0 && !isPosInt(max)) {\n throw new TypeError('max option must be a nonnegative integer');\n }\n const UintArray = max ? getUintArray(max) : Array;\n if (!UintArray) {\n throw new Error('invalid max value: ' + max);\n }\n this.#max = max;\n this.#maxSize = maxSize;\n this.maxEntrySize = maxEntrySize || this.#maxSize;\n this.sizeCalculation = sizeCalculation;\n if (this.sizeCalculation) {\n if (!this.#maxSize && !this.maxEntrySize) {\n throw new TypeError('cannot set sizeCalculation without setting maxSize or maxEntrySize');\n }\n if (typeof this.sizeCalculation !== 'function') {\n throw new TypeError('sizeCalculation set to non-function');\n }\n }\n if (memoMethod !== undefined && typeof memoMethod !== 'function') {\n throw new TypeError('memoMethod must be a function if defined');\n }\n this.#memoMethod = memoMethod;\n if (fetchMethod !== undefined && typeof fetchMethod !== 'function') {\n throw new TypeError('fetchMethod must be a function if specified');\n }\n this.#fetchMethod = fetchMethod;\n this.#hasFetchMethod = !!fetchMethod;\n this.#keyMap = new Map();\n this.#keyList = new Array(max).fill(undefined);\n this.#valList = new Array(max).fill(undefined);\n this.#next = new UintArray(max);\n this.#prev = new UintArray(max);\n this.#head = 0;\n this.#tail = 0;\n this.#free = Stack.create(max);\n this.#size = 0;\n this.#calculatedSize = 0;\n if (typeof dispose === 'function') {\n this.#dispose = dispose;\n }\n if (typeof onInsert === 'function') {\n this.#onInsert = onInsert;\n }\n if (typeof disposeAfter === 'function') {\n this.#disposeAfter = disposeAfter;\n this.#disposed = [];\n }\n else {\n this.#disposeAfter = undefined;\n this.#disposed = undefined;\n }\n this.#hasDispose = !!this.#dispose;\n this.#hasOnInsert = !!this.#onInsert;\n this.#hasDisposeAfter = !!this.#disposeAfter;\n this.noDisposeOnSet = !!noDisposeOnSet;\n this.noUpdateTTL = !!noUpdateTTL;\n this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection;\n this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection;\n this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort;\n this.ignoreFetchAbort = !!ignoreFetchAbort;\n // NB: maxEntrySize is set to maxSize if it's set\n if (this.maxEntrySize !== 0) {\n if (this.#maxSize !== 0) {\n if (!isPosInt(this.#maxSize)) {\n throw new TypeError('maxSize must be a positive integer if specified');\n }\n }\n if (!isPosInt(this.maxEntrySize)) {\n throw new TypeError('maxEntrySize must be a positive integer if specified');\n }\n this.#initializeSizeTracking();\n }\n this.allowStale = !!allowStale;\n this.noDeleteOnStaleGet = !!noDeleteOnStaleGet;\n this.updateAgeOnGet = !!updateAgeOnGet;\n this.updateAgeOnHas = !!updateAgeOnHas;\n this.ttlResolution =\n isPosInt(ttlResolution) || ttlResolution === 0 ? ttlResolution : 1;\n this.ttlAutopurge = !!ttlAutopurge;\n this.ttl = ttl || 0;\n if (this.ttl) {\n if (!isPosInt(this.ttl)) {\n throw new TypeError('ttl must be a positive integer if specified');\n }\n this.#initializeTTLTracking();\n }\n // do not allow completely unbounded caches\n if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {\n throw new TypeError('At least one of max, maxSize, or ttl is required');\n }\n if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {\n const code = 'LRU_CACHE_UNBOUNDED';\n if (shouldWarn(code)) {\n warned.add(code);\n const msg = 'TTL caching without ttlAutopurge, max, or maxSize can ' +\n 'result in unbounded memory consumption.';\n emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache);\n }\n }\n }\n /**\n * Return the number of ms left in the item's TTL. If item is not in cache,\n * returns `0`. Returns `Infinity` if item is in cache without a defined TTL.\n */\n getRemainingTTL(key) {\n return this.#keyMap.has(key) ? Infinity : 0;\n }\n #initializeTTLTracking() {\n const ttls = new ZeroArray(this.#max);\n const starts = new ZeroArray(this.#max);\n this.#ttls = ttls;\n this.#starts = starts;\n const purgeTimers = this.ttlAutopurge ?\n new Array(this.#max)\n : undefined;\n this.#autopurgeTimers = purgeTimers;\n this.#setItemTTL = (index, ttl, start = this.#perf.now()) => {\n starts[index] = ttl !== 0 ? start : 0;\n ttls[index] = ttl;\n // clear out the purge timer if we're setting TTL to 0, and\n // previously had a ttl purge timer running, so it doesn't\n // fire unnecessarily.\n if (purgeTimers?.[index]) {\n clearTimeout(purgeTimers[index]);\n purgeTimers[index] = undefined;\n }\n if (ttl !== 0 && purgeTimers) {\n const t = setTimeout(() => {\n if (this.#isStale(index)) {\n this.#delete(this.#keyList[index], 'expire');\n }\n }, ttl + 1);\n // unref() not supported on all platforms\n /* c8 ignore start */\n if (t.unref) {\n t.unref();\n }\n /* c8 ignore stop */\n purgeTimers[index] = t;\n }\n };\n this.#updateItemAge = index => {\n starts[index] = ttls[index] !== 0 ? this.#perf.now() : 0;\n };\n this.#statusTTL = (status, index) => {\n if (ttls[index]) {\n const ttl = ttls[index];\n const start = starts[index];\n /* c8 ignore next */\n if (!ttl || !start)\n return;\n status.ttl = ttl;\n status.start = start;\n status.now = cachedNow || getNow();\n const age = status.now - start;\n status.remainingTTL = ttl - age;\n }\n };\n // debounce calls to perf.now() to 1s so we're not hitting\n // that costly call repeatedly.\n let cachedNow = 0;\n const getNow = () => {\n const n = this.#perf.now();\n if (this.ttlResolution > 0) {\n cachedNow = n;\n const t = setTimeout(() => (cachedNow = 0), this.ttlResolution);\n // not available on all platforms\n /* c8 ignore start */\n if (t.unref) {\n t.unref();\n }\n /* c8 ignore stop */\n }\n return n;\n };\n this.getRemainingTTL = key => {\n const index = this.#keyMap.get(key);\n if (index === undefined) {\n return 0;\n }\n const ttl = ttls[index];\n const start = starts[index];\n if (!ttl || !start) {\n return Infinity;\n }\n const age = (cachedNow || getNow()) - start;\n return ttl - age;\n };\n this.#isStale = index => {\n const s = starts[index];\n const t = ttls[index];\n return !!t && !!s && (cachedNow || getNow()) - s > t;\n };\n }\n // conditionally set private methods related to TTL\n #updateItemAge = () => { };\n #statusTTL = () => { };\n #setItemTTL = () => { };\n /* c8 ignore stop */\n #isStale = () => false;\n #initializeSizeTracking() {\n const sizes = new ZeroArray(this.#max);\n this.#calculatedSize = 0;\n this.#sizes = sizes;\n this.#removeItemSize = index => {\n this.#calculatedSize -= sizes[index];\n sizes[index] = 0;\n };\n this.#requireSize = (k, v, size, sizeCalculation) => {\n // provisionally accept background fetches.\n // actual value size will be checked when they return.\n if (this.#isBackgroundFetch(v)) {\n return 0;\n }\n if (!isPosInt(size)) {\n if (sizeCalculation) {\n if (typeof sizeCalculation !== 'function') {\n throw new TypeError('sizeCalculation must be a function');\n }\n size = sizeCalculation(v, k);\n if (!isPosInt(size)) {\n throw new TypeError('sizeCalculation return invalid (expect positive integer)');\n }\n }\n else {\n throw new TypeError('invalid size value (must be positive integer). ' +\n 'When maxSize or maxEntrySize is used, sizeCalculation ' +\n 'or size must be set.');\n }\n }\n return size;\n };\n this.#addItemSize = (index, size, status) => {\n sizes[index] = size;\n if (this.#maxSize) {\n const maxSize = this.#maxSize - sizes[index];\n while (this.#calculatedSize > maxSize) {\n this.#evict(true);\n }\n }\n this.#calculatedSize += sizes[index];\n if (status) {\n status.entrySize = size;\n status.totalCalculatedSize = this.#calculatedSize;\n }\n };\n }\n #removeItemSize = _i => { };\n #addItemSize = (_i, _s, _st) => { };\n #requireSize = (_k, _v, size, sizeCalculation) => {\n if (size || sizeCalculation) {\n throw new TypeError('cannot set size without setting maxSize or maxEntrySize on cache');\n }\n return 0;\n };\n *#indexes({ allowStale = this.allowStale } = {}) {\n if (this.#size) {\n for (let i = this.#tail; true;) {\n if (!this.#isValidIndex(i)) {\n break;\n }\n if (allowStale || !this.#isStale(i)) {\n yield i;\n }\n if (i === this.#head) {\n break;\n }\n else {\n i = this.#prev[i];\n }\n }\n }\n }\n *#rindexes({ allowStale = this.allowStale } = {}) {\n if (this.#size) {\n for (let i = this.#head; true;) {\n if (!this.#isValidIndex(i)) {\n break;\n }\n if (allowStale || !this.#isStale(i)) {\n yield i;\n }\n if (i === this.#tail) {\n break;\n }\n else {\n i = this.#next[i];\n }\n }\n }\n }\n #isValidIndex(index) {\n return (index !== undefined &&\n this.#keyMap.get(this.#keyList[index]) === index);\n }\n /**\n * Return a generator yielding `[key, value]` pairs,\n * in order from most recently used to least recently used.\n */\n *entries() {\n for (const i of this.#indexes()) {\n if (this.#valList[i] !== undefined &&\n this.#keyList[i] !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield [this.#keyList[i], this.#valList[i]];\n }\n }\n }\n /**\n * Inverse order version of {@link LRUCache.entries}\n *\n * Return a generator yielding `[key, value]` pairs,\n * in order from least recently used to most recently used.\n */\n *rentries() {\n for (const i of this.#rindexes()) {\n if (this.#valList[i] !== undefined &&\n this.#keyList[i] !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield [this.#keyList[i], this.#valList[i]];\n }\n }\n }\n /**\n * Return a generator yielding the keys in the cache,\n * in order from most recently used to least recently used.\n */\n *keys() {\n for (const i of this.#indexes()) {\n const k = this.#keyList[i];\n if (k !== undefined && !this.#isBackgroundFetch(this.#valList[i])) {\n yield k;\n }\n }\n }\n /**\n * Inverse order version of {@link LRUCache.keys}\n *\n * Return a generator yielding the keys in the cache,\n * in order from least recently used to most recently used.\n */\n *rkeys() {\n for (const i of this.#rindexes()) {\n const k = this.#keyList[i];\n if (k !== undefined && !this.#isBackgroundFetch(this.#valList[i])) {\n yield k;\n }\n }\n }\n /**\n * Return a generator yielding the values in the cache,\n * in order from most recently used to least recently used.\n */\n *values() {\n for (const i of this.#indexes()) {\n const v = this.#valList[i];\n if (v !== undefined && !this.#isBackgroundFetch(this.#valList[i])) {\n yield this.#valList[i];\n }\n }\n }\n /**\n * Inverse order version of {@link LRUCache.values}\n *\n * Return a generator yielding the values in the cache,\n * in order from least recently used to most recently used.\n */\n *rvalues() {\n for (const i of this.#rindexes()) {\n const v = this.#valList[i];\n if (v !== undefined && !this.#isBackgroundFetch(this.#valList[i])) {\n yield this.#valList[i];\n }\n }\n }\n /**\n * Iterating over the cache itself yields the same results as\n * {@link LRUCache.entries}\n */\n [Symbol.iterator]() {\n return this.entries();\n }\n /**\n * A String value that is used in the creation of the default string\n * description of an object. Called by the built-in method\n * `Object.prototype.toString`.\n */\n [Symbol.toStringTag] = 'LRUCache';\n /**\n * Find a value for which the supplied fn method returns a truthy value,\n * similar to `Array.find()`. fn is called as `fn(value, key, cache)`.\n */\n find(fn, getOptions = {}) {\n for (const i of this.#indexes()) {\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n if (value === undefined)\n continue;\n if (fn(value, this.#keyList[i], this)) {\n return this.get(this.#keyList[i], getOptions);\n }\n }\n }\n /**\n * Call the supplied function on each item in the cache, in order from most\n * recently used to least recently used.\n *\n * `fn` is called as `fn(value, key, cache)`.\n *\n * If `thisp` is provided, function will be called in the `this`-context of\n * the provided object, or the cache if no `thisp` object is provided.\n *\n * Does not update age or recenty of use, or iterate over stale values.\n */\n forEach(fn, thisp = this) {\n for (const i of this.#indexes()) {\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n if (value === undefined)\n continue;\n fn.call(thisp, value, this.#keyList[i], this);\n }\n }\n /**\n * The same as {@link LRUCache.forEach} but items are iterated over in\n * reverse order. (ie, less recently used items are iterated over first.)\n */\n rforEach(fn, thisp = this) {\n for (const i of this.#rindexes()) {\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n if (value === undefined)\n continue;\n fn.call(thisp, value, this.#keyList[i], this);\n }\n }\n /**\n * Delete any stale entries. Returns true if anything was removed,\n * false otherwise.\n */\n purgeStale() {\n let deleted = false;\n for (const i of this.#rindexes({ allowStale: true })) {\n if (this.#isStale(i)) {\n this.#delete(this.#keyList[i], 'expire');\n deleted = true;\n }\n }\n return deleted;\n }\n /**\n * Get the extended info about a given entry, to get its value, size, and\n * TTL info simultaneously. Returns `undefined` if the key is not present.\n *\n * Unlike {@link LRUCache#dump}, which is designed to be portable and survive\n * serialization, the `start` value is always the current timestamp, and the\n * `ttl` is a calculated remaining time to live (negative if expired).\n *\n * Always returns stale values, if their info is found in the cache, so be\n * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl})\n * if relevant.\n */\n info(key) {\n const i = this.#keyMap.get(key);\n if (i === undefined)\n return undefined;\n const v = this.#valList[i];\n /* c8 ignore start - this isn't tested for the info function,\n * but it's the same logic as found in other places. */\n const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n if (value === undefined)\n return undefined;\n /* c8 ignore end */\n const entry = { value };\n if (this.#ttls && this.#starts) {\n const ttl = this.#ttls[i];\n const start = this.#starts[i];\n if (ttl && start) {\n const remain = ttl - (this.#perf.now() - start);\n entry.ttl = remain;\n entry.start = Date.now();\n }\n }\n if (this.#sizes) {\n entry.size = this.#sizes[i];\n }\n return entry;\n }\n /**\n * Return an array of [key, {@link LRUCache.Entry}] tuples which can be\n * passed to {@link LRUCache#load}.\n *\n * The `start` fields are calculated relative to a portable `Date.now()`\n * timestamp, even if `performance.now()` is available.\n *\n * Stale entries are always included in the `dump`, even if\n * {@link LRUCache.OptionsBase.allowStale} is false.\n *\n * Note: this returns an actual array, not a generator, so it can be more\n * easily passed around.\n */\n dump() {\n const arr = [];\n for (const i of this.#indexes({ allowStale: true })) {\n const key = this.#keyList[i];\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n if (value === undefined || key === undefined)\n continue;\n const entry = { value };\n if (this.#ttls && this.#starts) {\n entry.ttl = this.#ttls[i];\n // always dump the start relative to a portable timestamp\n // it's ok for this to be a bit slow, it's a rare operation.\n const age = this.#perf.now() - this.#starts[i];\n entry.start = Math.floor(Date.now() - age);\n }\n if (this.#sizes) {\n entry.size = this.#sizes[i];\n }\n arr.unshift([key, entry]);\n }\n return arr;\n }\n /**\n * Reset the cache and load in the items in entries in the order listed.\n *\n * The shape of the resulting cache may be different if the same options are\n * not used in both caches.\n *\n * The `start` fields are assumed to be calculated relative to a portable\n * `Date.now()` timestamp, even if `performance.now()` is available.\n */\n load(arr) {\n this.clear();\n for (const [key, entry] of arr) {\n if (entry.start) {\n // entry.start is a portable timestamp, but we may be using\n // node's performance.now(), so calculate the offset, so that\n // we get the intended remaining TTL, no matter how long it's\n // been on ice.\n //\n // it's ok for this to be a bit slow, it's a rare operation.\n const age = Date.now() - entry.start;\n entry.start = this.#perf.now() - age;\n }\n this.set(key, entry.value, entry);\n }\n }\n /**\n * Add a value to the cache.\n *\n * Note: if `undefined` is specified as a value, this is an alias for\n * {@link LRUCache#delete}\n *\n * Fields on the {@link LRUCache.SetOptions} options param will override\n * their corresponding values in the constructor options for the scope\n * of this single `set()` operation.\n *\n * If `start` is provided, then that will set the effective start\n * time for the TTL calculation. Note that this must be a previous\n * value of `performance.now()` if supported, or a previous value of\n * `Date.now()` if not.\n *\n * Options object may also include `size`, which will prevent\n * calling the `sizeCalculation` function and just use the specified\n * number if it is a positive integer, and `noDisposeOnSet` which\n * will prevent calling a `dispose` function in the case of\n * overwrites.\n *\n * If the `size` (or return value of `sizeCalculation`) for a given\n * entry is greater than `maxEntrySize`, then the item will not be\n * added to the cache.\n *\n * Will update the recency of the entry.\n *\n * If the value is `undefined`, then this is an alias for\n * `cache.delete(key)`. `undefined` is never stored in the cache.\n */\n set(k, v, setOptions = {}) {\n if (v === undefined) {\n this.delete(k);\n return this;\n }\n const { ttl = this.ttl, start, noDisposeOnSet = this.noDisposeOnSet, sizeCalculation = this.sizeCalculation, status, } = setOptions;\n let { noUpdateTTL = this.noUpdateTTL } = setOptions;\n const size = this.#requireSize(k, v, setOptions.size || 0, sizeCalculation);\n // if the item doesn't fit, don't do anything\n // NB: maxEntrySize set to maxSize by default\n if (this.maxEntrySize && size > this.maxEntrySize) {\n if (status) {\n status.set = 'miss';\n status.maxEntrySizeExceeded = true;\n }\n // have to delete, in case something is there already.\n this.#delete(k, 'set');\n return this;\n }\n let index = this.#size === 0 ? undefined : this.#keyMap.get(k);\n if (index === undefined) {\n // addition\n index = (this.#size === 0 ? this.#tail\n : this.#free.length !== 0 ? this.#free.pop()\n : this.#size === this.#max ? this.#evict(false)\n : this.#size);\n this.#keyList[index] = k;\n this.#valList[index] = v;\n this.#keyMap.set(k, index);\n this.#next[this.#tail] = index;\n this.#prev[index] = this.#tail;\n this.#tail = index;\n this.#size++;\n this.#addItemSize(index, size, status);\n if (status)\n status.set = 'add';\n noUpdateTTL = false;\n if (this.#hasOnInsert) {\n this.#onInsert?.(v, k, 'add');\n }\n }\n else {\n // update\n this.#moveToTail(index);\n const oldVal = this.#valList[index];\n if (v !== oldVal) {\n if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {\n oldVal.__abortController.abort(new Error('replaced'));\n const { __staleWhileFetching: s } = oldVal;\n if (s !== undefined && !noDisposeOnSet) {\n if (this.#hasDispose) {\n this.#dispose?.(s, k, 'set');\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([s, k, 'set']);\n }\n }\n }\n else if (!noDisposeOnSet) {\n if (this.#hasDispose) {\n this.#dispose?.(oldVal, k, 'set');\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([oldVal, k, 'set']);\n }\n }\n this.#removeItemSize(index);\n this.#addItemSize(index, size, status);\n this.#valList[index] = v;\n if (status) {\n status.set = 'replace';\n const oldValue = oldVal && this.#isBackgroundFetch(oldVal) ?\n oldVal.__staleWhileFetching\n : oldVal;\n if (oldValue !== undefined)\n status.oldValue = oldValue;\n }\n }\n else if (status) {\n status.set = 'update';\n }\n if (this.#hasOnInsert) {\n this.onInsert?.(v, k, v === oldVal ? 'update' : 'replace');\n }\n }\n if (ttl !== 0 && !this.#ttls) {\n this.#initializeTTLTracking();\n }\n if (this.#ttls) {\n if (!noUpdateTTL) {\n this.#setItemTTL(index, ttl, start);\n }\n if (status)\n this.#statusTTL(status, index);\n }\n if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n return this;\n }\n /**\n * Evict the least recently used item, returning its value or\n * `undefined` if cache is empty.\n */\n pop() {\n try {\n while (this.#size) {\n const val = this.#valList[this.#head];\n this.#evict(true);\n if (this.#isBackgroundFetch(val)) {\n if (val.__staleWhileFetching) {\n return val.__staleWhileFetching;\n }\n }\n else if (val !== undefined) {\n return val;\n }\n }\n }\n finally {\n if (this.#hasDisposeAfter && this.#disposed) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n }\n }\n #evict(free) {\n const head = this.#head;\n const k = this.#keyList[head];\n const v = this.#valList[head];\n if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('evicted'));\n }\n else if (this.#hasDispose || this.#hasDisposeAfter) {\n if (this.#hasDispose) {\n this.#dispose?.(v, k, 'evict');\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([v, k, 'evict']);\n }\n }\n this.#removeItemSize(head);\n if (this.#autopurgeTimers?.[head]) {\n clearTimeout(this.#autopurgeTimers[head]);\n this.#autopurgeTimers[head] = undefined;\n }\n // if we aren't about to use the index, then null these out\n if (free) {\n this.#keyList[head] = undefined;\n this.#valList[head] = undefined;\n this.#free.push(head);\n }\n if (this.#size === 1) {\n this.#head = this.#tail = 0;\n this.#free.length = 0;\n }\n else {\n this.#head = this.#next[head];\n }\n this.#keyMap.delete(k);\n this.#size--;\n return head;\n }\n /**\n * Check if a key is in the cache, without updating the recency of use.\n * Will return false if the item is stale, even though it is technically\n * in the cache.\n *\n * Check if a key is in the cache, without updating the recency of\n * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set\n * to `true` in either the options or the constructor.\n *\n * Will return `false` if the item is stale, even though it is technically in\n * the cache. The difference can be determined (if it matters) by using a\n * `status` argument, and inspecting the `has` field.\n *\n * Will not update item age unless\n * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.\n */\n has(k, hasOptions = {}) {\n const { updateAgeOnHas = this.updateAgeOnHas, status } = hasOptions;\n const index = this.#keyMap.get(k);\n if (index !== undefined) {\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v) &&\n v.__staleWhileFetching === undefined) {\n return false;\n }\n if (!this.#isStale(index)) {\n if (updateAgeOnHas) {\n this.#updateItemAge(index);\n }\n if (status) {\n status.has = 'hit';\n this.#statusTTL(status, index);\n }\n return true;\n }\n else if (status) {\n status.has = 'stale';\n this.#statusTTL(status, index);\n }\n }\n else if (status) {\n status.has = 'miss';\n }\n return false;\n }\n /**\n * Like {@link LRUCache#get} but doesn't update recency or delete stale\n * items.\n *\n * Returns `undefined` if the item is stale, unless\n * {@link LRUCache.OptionsBase.allowStale} is set.\n */\n peek(k, peekOptions = {}) {\n const { allowStale = this.allowStale } = peekOptions;\n const index = this.#keyMap.get(k);\n if (index === undefined || (!allowStale && this.#isStale(index))) {\n return;\n }\n const v = this.#valList[index];\n // either stale and allowed, or forcing a refresh of non-stale value\n return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n }\n #backgroundFetch(k, index, options, context) {\n const v = index === undefined ? undefined : this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n return v;\n }\n const ac = new AC();\n const { signal } = options;\n // when/if our AC signals, then stop listening to theirs.\n signal?.addEventListener('abort', () => ac.abort(signal.reason), {\n signal: ac.signal,\n });\n const fetchOpts = {\n signal: ac.signal,\n options,\n context,\n };\n const cb = (v, updateCache = false) => {\n const { aborted } = ac.signal;\n const ignoreAbort = options.ignoreFetchAbort && v !== undefined;\n if (options.status) {\n if (aborted && !updateCache) {\n options.status.fetchAborted = true;\n options.status.fetchError = ac.signal.reason;\n if (ignoreAbort)\n options.status.fetchAbortIgnored = true;\n }\n else {\n options.status.fetchResolved = true;\n }\n }\n if (aborted && !ignoreAbort && !updateCache) {\n return fetchFail(ac.signal.reason);\n }\n // either we didn't abort, and are still here, or we did, and ignored\n const bf = p;\n // if nothing else has been written there but we're set to update the\n // cache and ignore the abort, or if it's still pending on this specific\n // background request, then write it to the cache.\n const vl = this.#valList[index];\n if (vl === p || (ignoreAbort && updateCache && vl === undefined)) {\n if (v === undefined) {\n if (bf.__staleWhileFetching !== undefined) {\n this.#valList[index] = bf.__staleWhileFetching;\n }\n else {\n this.#delete(k, 'fetch');\n }\n }\n else {\n if (options.status)\n options.status.fetchUpdated = true;\n this.set(k, v, fetchOpts.options);\n }\n }\n return v;\n };\n const eb = (er) => {\n if (options.status) {\n options.status.fetchRejected = true;\n options.status.fetchError = er;\n }\n return fetchFail(er);\n };\n const fetchFail = (er) => {\n const { aborted } = ac.signal;\n const allowStaleAborted = aborted && options.allowStaleOnFetchAbort;\n const allowStale = allowStaleAborted || options.allowStaleOnFetchRejection;\n const noDelete = allowStale || options.noDeleteOnFetchRejection;\n const bf = p;\n if (this.#valList[index] === p) {\n // if we allow stale on fetch rejections, then we need to ensure that\n // the stale value is not removed from the cache when the fetch fails.\n const del = !noDelete || bf.__staleWhileFetching === undefined;\n if (del) {\n this.#delete(k, 'fetch');\n }\n else if (!allowStaleAborted) {\n // still replace the *promise* with the stale value,\n // since we are done with the promise at this point.\n // leave it untouched if we're still waiting for an\n // aborted background fetch that hasn't yet returned.\n this.#valList[index] = bf.__staleWhileFetching;\n }\n }\n if (allowStale) {\n if (options.status && bf.__staleWhileFetching !== undefined) {\n options.status.returnedStale = true;\n }\n return bf.__staleWhileFetching;\n }\n else if (bf.__returned === bf) {\n throw er;\n }\n };\n const pcall = (res, rej) => {\n const fmp = this.#fetchMethod?.(k, v, fetchOpts);\n if (fmp && fmp instanceof Promise) {\n fmp.then(v => res(v === undefined ? undefined : v), rej);\n }\n // ignored, we go until we finish, regardless.\n // defer check until we are actually aborting,\n // so fetchMethod can override.\n ac.signal.addEventListener('abort', () => {\n if (!options.ignoreFetchAbort || options.allowStaleOnFetchAbort) {\n res(undefined);\n // when it eventually resolves, update the cache.\n if (options.allowStaleOnFetchAbort) {\n res = v => cb(v, true);\n }\n }\n });\n };\n if (options.status)\n options.status.fetchDispatched = true;\n const p = new Promise(pcall).then(cb, eb);\n const bf = Object.assign(p, {\n __abortController: ac,\n __staleWhileFetching: v,\n __returned: undefined,\n });\n if (index === undefined) {\n // internal, don't expose status.\n this.set(k, bf, { ...fetchOpts.options, status: undefined });\n index = this.#keyMap.get(k);\n }\n else {\n this.#valList[index] = bf;\n }\n return bf;\n }\n #isBackgroundFetch(p) {\n if (!this.#hasFetchMethod)\n return false;\n const b = p;\n return (!!b &&\n b instanceof Promise &&\n b.hasOwnProperty('__staleWhileFetching') &&\n b.__abortController instanceof AC);\n }\n async fetch(k, fetchOptions = {}) {\n const { \n // get options\n allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, \n // set options\n ttl = this.ttl, noDisposeOnSet = this.noDisposeOnSet, size = 0, sizeCalculation = this.sizeCalculation, noUpdateTTL = this.noUpdateTTL, \n // fetch exclusive options\n noDeleteOnFetchRejection = this.noDeleteOnFetchRejection, allowStaleOnFetchRejection = this.allowStaleOnFetchRejection, ignoreFetchAbort = this.ignoreFetchAbort, allowStaleOnFetchAbort = this.allowStaleOnFetchAbort, context, forceRefresh = false, status, signal, } = fetchOptions;\n if (!this.#hasFetchMethod) {\n if (status)\n status.fetch = 'get';\n return this.get(k, {\n allowStale,\n updateAgeOnGet,\n noDeleteOnStaleGet,\n status,\n });\n }\n const options = {\n allowStale,\n updateAgeOnGet,\n noDeleteOnStaleGet,\n ttl,\n noDisposeOnSet,\n size,\n sizeCalculation,\n noUpdateTTL,\n noDeleteOnFetchRejection,\n allowStaleOnFetchRejection,\n allowStaleOnFetchAbort,\n ignoreFetchAbort,\n status,\n signal,\n };\n let index = this.#keyMap.get(k);\n if (index === undefined) {\n if (status)\n status.fetch = 'miss';\n const p = this.#backgroundFetch(k, index, options, context);\n return (p.__returned = p);\n }\n else {\n // in cache, maybe already fetching\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n const stale = allowStale && v.__staleWhileFetching !== undefined;\n if (status) {\n status.fetch = 'inflight';\n if (stale)\n status.returnedStale = true;\n }\n return stale ? v.__staleWhileFetching : (v.__returned = v);\n }\n // if we force a refresh, that means do NOT serve the cached value,\n // unless we are already in the process of refreshing the cache.\n const isStale = this.#isStale(index);\n if (!forceRefresh && !isStale) {\n if (status)\n status.fetch = 'hit';\n this.#moveToTail(index);\n if (updateAgeOnGet) {\n this.#updateItemAge(index);\n }\n if (status)\n this.#statusTTL(status, index);\n return v;\n }\n // ok, it is stale or a forced refresh, and not already fetching.\n // refresh the cache.\n const p = this.#backgroundFetch(k, index, options, context);\n const hasStale = p.__staleWhileFetching !== undefined;\n const staleVal = hasStale && allowStale;\n if (status) {\n status.fetch = isStale ? 'stale' : 'refresh';\n if (staleVal && isStale)\n status.returnedStale = true;\n }\n return staleVal ? p.__staleWhileFetching : (p.__returned = p);\n }\n }\n async forceFetch(k, fetchOptions = {}) {\n const v = await this.fetch(k, fetchOptions);\n if (v === undefined)\n throw new Error('fetch() returned undefined');\n return v;\n }\n memo(k, memoOptions = {}) {\n const memoMethod = this.#memoMethod;\n if (!memoMethod) {\n throw new Error('no memoMethod provided to constructor');\n }\n const { context, forceRefresh, ...options } = memoOptions;\n const v = this.get(k, options);\n if (!forceRefresh && v !== undefined)\n return v;\n const vv = memoMethod(k, v, {\n options,\n context,\n });\n this.set(k, vv, options);\n return vv;\n }\n /**\n * Return a value from the cache. Will update the recency of the cache\n * entry found.\n *\n * If the key is not found, get() will return `undefined`.\n */\n get(k, getOptions = {}) {\n const { allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, status, } = getOptions;\n const index = this.#keyMap.get(k);\n if (index !== undefined) {\n const value = this.#valList[index];\n const fetching = this.#isBackgroundFetch(value);\n if (status)\n this.#statusTTL(status, index);\n if (this.#isStale(index)) {\n if (status)\n status.get = 'stale';\n // delete only if not an in-flight background fetch\n if (!fetching) {\n if (!noDeleteOnStaleGet) {\n this.#delete(k, 'expire');\n }\n if (status && allowStale)\n status.returnedStale = true;\n return allowStale ? value : undefined;\n }\n else {\n if (status &&\n allowStale &&\n value.__staleWhileFetching !== undefined) {\n status.returnedStale = true;\n }\n return allowStale ? value.__staleWhileFetching : undefined;\n }\n }\n else {\n if (status)\n status.get = 'hit';\n // if we're currently fetching it, we don't actually have it yet\n // it's not stale, which means this isn't a staleWhileRefetching.\n // If it's not stale, and fetching, AND has a __staleWhileFetching\n // value, then that means the user fetched with {forceRefresh:true},\n // so it's safe to return that value.\n if (fetching) {\n return value.__staleWhileFetching;\n }\n this.#moveToTail(index);\n if (updateAgeOnGet) {\n this.#updateItemAge(index);\n }\n return value;\n }\n }\n else if (status) {\n status.get = 'miss';\n }\n }\n #connect(p, n) {\n this.#prev[n] = p;\n this.#next[p] = n;\n }\n #moveToTail(index) {\n // if tail already, nothing to do\n // if head, move head to next[index]\n // else\n // move next[prev[index]] to next[index] (head has no prev)\n // move prev[next[index]] to prev[index]\n // prev[index] = tail\n // next[tail] = index\n // tail = index\n if (index !== this.#tail) {\n if (index === this.#head) {\n this.#head = this.#next[index];\n }\n else {\n this.#connect(this.#prev[index], this.#next[index]);\n }\n this.#connect(this.#tail, index);\n this.#tail = index;\n }\n }\n /**\n * Deletes a key out of the cache.\n *\n * Returns true if the key was deleted, false otherwise.\n */\n delete(k) {\n return this.#delete(k, 'delete');\n }\n #delete(k, reason) {\n let deleted = false;\n if (this.#size !== 0) {\n const index = this.#keyMap.get(k);\n if (index !== undefined) {\n if (this.#autopurgeTimers?.[index]) {\n clearTimeout(this.#autopurgeTimers?.[index]);\n this.#autopurgeTimers[index] = undefined;\n }\n deleted = true;\n if (this.#size === 1) {\n this.#clear(reason);\n }\n else {\n this.#removeItemSize(index);\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('deleted'));\n }\n else if (this.#hasDispose || this.#hasDisposeAfter) {\n if (this.#hasDispose) {\n this.#dispose?.(v, k, reason);\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([v, k, reason]);\n }\n }\n this.#keyMap.delete(k);\n this.#keyList[index] = undefined;\n this.#valList[index] = undefined;\n if (index === this.#tail) {\n this.#tail = this.#prev[index];\n }\n else if (index === this.#head) {\n this.#head = this.#next[index];\n }\n else {\n const pi = this.#prev[index];\n this.#next[pi] = this.#next[index];\n const ni = this.#next[index];\n this.#prev[ni] = this.#prev[index];\n }\n this.#size--;\n this.#free.push(index);\n }\n }\n }\n if (this.#hasDisposeAfter && this.#disposed?.length) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n return deleted;\n }\n /**\n * Clear the cache entirely, throwing away all values.\n */\n clear() {\n return this.#clear('delete');\n }\n #clear(reason) {\n for (const index of this.#rindexes({ allowStale: true })) {\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('deleted'));\n }\n else {\n const k = this.#keyList[index];\n if (this.#hasDispose) {\n this.#dispose?.(v, k, reason);\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([v, k, reason]);\n }\n }\n }\n this.#keyMap.clear();\n this.#valList.fill(undefined);\n this.#keyList.fill(undefined);\n if (this.#ttls && this.#starts) {\n this.#ttls.fill(0);\n this.#starts.fill(0);\n for (const t of this.#autopurgeTimers ?? []) {\n if (t !== undefined)\n clearTimeout(t);\n }\n this.#autopurgeTimers?.fill(undefined);\n }\n if (this.#sizes) {\n this.#sizes.fill(0);\n }\n this.#head = 0;\n this.#tail = 0;\n this.#free.length = 0;\n this.#calculatedSize = 0;\n this.#size = 0;\n if (this.#hasDisposeAfter && this.#disposed) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n }\n}\n//# sourceMappingURL=index.js.map","const proc = typeof process === 'object' && process\n ? process\n : {\n stdout: null,\n stderr: null,\n };\nimport { EventEmitter } from 'node:events';\nimport Stream from 'node:stream';\nimport { StringDecoder } from 'node:string_decoder';\n/**\n * Return true if the argument is a Minipass stream, Node stream, or something\n * else that Minipass can interact with.\n */\nexport const isStream = (s) => !!s &&\n typeof s === 'object' &&\n (s instanceof Minipass ||\n s instanceof Stream ||\n isReadable(s) ||\n isWritable(s));\n/**\n * Return true if the argument is a valid {@link Minipass.Readable}\n */\nexport const isReadable = (s) => !!s &&\n typeof s === 'object' &&\n s instanceof EventEmitter &&\n typeof s.pipe === 'function' &&\n // node core Writable streams have a pipe() method, but it throws\n s.pipe !== Stream.Writable.prototype.pipe;\n/**\n * Return true if the argument is a valid {@link Minipass.Writable}\n */\nexport const isWritable = (s) => !!s &&\n typeof s === 'object' &&\n s instanceof EventEmitter &&\n typeof s.write === 'function' &&\n typeof s.end === 'function';\nconst EOF = Symbol('EOF');\nconst MAYBE_EMIT_END = Symbol('maybeEmitEnd');\nconst EMITTED_END = Symbol('emittedEnd');\nconst EMITTING_END = Symbol('emittingEnd');\nconst EMITTED_ERROR = Symbol('emittedError');\nconst CLOSED = Symbol('closed');\nconst READ = Symbol('read');\nconst FLUSH = Symbol('flush');\nconst FLUSHCHUNK = Symbol('flushChunk');\nconst ENCODING = Symbol('encoding');\nconst DECODER = Symbol('decoder');\nconst FLOWING = Symbol('flowing');\nconst PAUSED = Symbol('paused');\nconst RESUME = Symbol('resume');\nconst BUFFER = Symbol('buffer');\nconst PIPES = Symbol('pipes');\nconst BUFFERLENGTH = Symbol('bufferLength');\nconst BUFFERPUSH = Symbol('bufferPush');\nconst BUFFERSHIFT = Symbol('bufferShift');\nconst OBJECTMODE = Symbol('objectMode');\n// internal event when stream is destroyed\nconst DESTROYED = Symbol('destroyed');\n// internal event when stream has an error\nconst ERROR = Symbol('error');\nconst EMITDATA = Symbol('emitData');\nconst EMITEND = Symbol('emitEnd');\nconst EMITEND2 = Symbol('emitEnd2');\nconst ASYNC = Symbol('async');\nconst ABORT = Symbol('abort');\nconst ABORTED = Symbol('aborted');\nconst SIGNAL = Symbol('signal');\nconst DATALISTENERS = Symbol('dataListeners');\nconst DISCARDED = Symbol('discarded');\nconst defer = (fn) => Promise.resolve().then(fn);\nconst nodefer = (fn) => fn();\nconst isEndish = (ev) => ev === 'end' || ev === 'finish' || ev === 'prefinish';\nconst isArrayBufferLike = (b) => b instanceof ArrayBuffer ||\n (!!b &&\n typeof b === 'object' &&\n b.constructor &&\n b.constructor.name === 'ArrayBuffer' &&\n b.byteLength >= 0);\nconst isArrayBufferView = (b) => !Buffer.isBuffer(b) && ArrayBuffer.isView(b);\n/**\n * Internal class representing a pipe to a destination stream.\n *\n * @internal\n */\nclass Pipe {\n src;\n dest;\n opts;\n ondrain;\n constructor(src, dest, opts) {\n this.src = src;\n this.dest = dest;\n this.opts = opts;\n this.ondrain = () => src[RESUME]();\n this.dest.on('drain', this.ondrain);\n }\n unpipe() {\n this.dest.removeListener('drain', this.ondrain);\n }\n // only here for the prototype\n /* c8 ignore start */\n proxyErrors(_er) { }\n /* c8 ignore stop */\n end() {\n this.unpipe();\n if (this.opts.end)\n this.dest.end();\n }\n}\n/**\n * Internal class representing a pipe to a destination stream where\n * errors are proxied.\n *\n * @internal\n */\nclass PipeProxyErrors extends Pipe {\n unpipe() {\n this.src.removeListener('error', this.proxyErrors);\n super.unpipe();\n }\n constructor(src, dest, opts) {\n super(src, dest, opts);\n this.proxyErrors = er => dest.emit('error', er);\n src.on('error', this.proxyErrors);\n }\n}\nconst isObjectModeOptions = (o) => !!o.objectMode;\nconst isEncodingOptions = (o) => !o.objectMode && !!o.encoding && o.encoding !== 'buffer';\n/**\n * Main export, the Minipass class\n *\n * `RType` is the type of data emitted, defaults to Buffer\n *\n * `WType` is the type of data to be written, if RType is buffer or string,\n * then any {@link Minipass.ContiguousData} is allowed.\n *\n * `Events` is the set of event handler signatures that this object\n * will emit, see {@link Minipass.Events}\n */\nexport class Minipass extends EventEmitter {\n [FLOWING] = false;\n [PAUSED] = false;\n [PIPES] = [];\n [BUFFER] = [];\n [OBJECTMODE];\n [ENCODING];\n [ASYNC];\n [DECODER];\n [EOF] = false;\n [EMITTED_END] = false;\n [EMITTING_END] = false;\n [CLOSED] = false;\n [EMITTED_ERROR] = null;\n [BUFFERLENGTH] = 0;\n [DESTROYED] = false;\n [SIGNAL];\n [ABORTED] = false;\n [DATALISTENERS] = 0;\n [DISCARDED] = false;\n /**\n * true if the stream can be written\n */\n writable = true;\n /**\n * true if the stream can be read\n */\n readable = true;\n /**\n * If `RType` is Buffer, then options do not need to be provided.\n * Otherwise, an options object must be provided to specify either\n * {@link Minipass.SharedOptions.objectMode} or\n * {@link Minipass.SharedOptions.encoding}, as appropriate.\n */\n constructor(...args) {\n const options = (args[0] ||\n {});\n super();\n if (options.objectMode && typeof options.encoding === 'string') {\n throw new TypeError('Encoding and objectMode may not be used together');\n }\n if (isObjectModeOptions(options)) {\n this[OBJECTMODE] = true;\n this[ENCODING] = null;\n }\n else if (isEncodingOptions(options)) {\n this[ENCODING] = options.encoding;\n this[OBJECTMODE] = false;\n }\n else {\n this[OBJECTMODE] = false;\n this[ENCODING] = null;\n }\n this[ASYNC] = !!options.async;\n this[DECODER] = this[ENCODING]\n ? new StringDecoder(this[ENCODING])\n : null;\n //@ts-ignore - private option for debugging and testing\n if (options && options.debugExposeBuffer === true) {\n Object.defineProperty(this, 'buffer', { get: () => this[BUFFER] });\n }\n //@ts-ignore - private option for debugging and testing\n if (options && options.debugExposePipes === true) {\n Object.defineProperty(this, 'pipes', { get: () => this[PIPES] });\n }\n const { signal } = options;\n if (signal) {\n this[SIGNAL] = signal;\n if (signal.aborted) {\n this[ABORT]();\n }\n else {\n signal.addEventListener('abort', () => this[ABORT]());\n }\n }\n }\n /**\n * The amount of data stored in the buffer waiting to be read.\n *\n * For Buffer strings, this will be the total byte length.\n * For string encoding streams, this will be the string character length,\n * according to JavaScript's `string.length` logic.\n * For objectMode streams, this is a count of the items waiting to be\n * emitted.\n */\n get bufferLength() {\n return this[BUFFERLENGTH];\n }\n /**\n * The `BufferEncoding` currently in use, or `null`\n */\n get encoding() {\n return this[ENCODING];\n }\n /**\n * @deprecated - This is a read only property\n */\n set encoding(_enc) {\n throw new Error('Encoding must be set at instantiation time');\n }\n /**\n * @deprecated - Encoding may only be set at instantiation time\n */\n setEncoding(_enc) {\n throw new Error('Encoding must be set at instantiation time');\n }\n /**\n * True if this is an objectMode stream\n */\n get objectMode() {\n return this[OBJECTMODE];\n }\n /**\n * @deprecated - This is a read-only property\n */\n set objectMode(_om) {\n throw new Error('objectMode must be set at instantiation time');\n }\n /**\n * true if this is an async stream\n */\n get ['async']() {\n return this[ASYNC];\n }\n /**\n * Set to true to make this stream async.\n *\n * Once set, it cannot be unset, as this would potentially cause incorrect\n * behavior. Ie, a sync stream can be made async, but an async stream\n * cannot be safely made sync.\n */\n set ['async'](a) {\n this[ASYNC] = this[ASYNC] || !!a;\n }\n // drop everything and get out of the flow completely\n [ABORT]() {\n this[ABORTED] = true;\n this.emit('abort', this[SIGNAL]?.reason);\n this.destroy(this[SIGNAL]?.reason);\n }\n /**\n * True if the stream has been aborted.\n */\n get aborted() {\n return this[ABORTED];\n }\n /**\n * No-op setter. Stream aborted status is set via the AbortSignal provided\n * in the constructor options.\n */\n set aborted(_) { }\n write(chunk, encoding, cb) {\n if (this[ABORTED])\n return false;\n if (this[EOF])\n throw new Error('write after end');\n if (this[DESTROYED]) {\n this.emit('error', Object.assign(new Error('Cannot call write after a stream was destroyed'), { code: 'ERR_STREAM_DESTROYED' }));\n return true;\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = 'utf8';\n }\n if (!encoding)\n encoding = 'utf8';\n const fn = this[ASYNC] ? defer : nodefer;\n // convert array buffers and typed array views into buffers\n // at some point in the future, we may want to do the opposite!\n // leave strings and buffers as-is\n // anything is only allowed if in object mode, so throw\n if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {\n if (isArrayBufferView(chunk)) {\n //@ts-ignore - sinful unsafe type changing\n chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);\n }\n else if (isArrayBufferLike(chunk)) {\n //@ts-ignore - sinful unsafe type changing\n chunk = Buffer.from(chunk);\n }\n else if (typeof chunk !== 'string') {\n throw new Error('Non-contiguous data written to non-objectMode stream');\n }\n }\n // handle object mode up front, since it's simpler\n // this yields better performance, fewer checks later.\n if (this[OBJECTMODE]) {\n // maybe impossible?\n /* c8 ignore start */\n if (this[FLOWING] && this[BUFFERLENGTH] !== 0)\n this[FLUSH](true);\n /* c8 ignore stop */\n if (this[FLOWING])\n this.emit('data', chunk);\n else\n this[BUFFERPUSH](chunk);\n if (this[BUFFERLENGTH] !== 0)\n this.emit('readable');\n if (cb)\n fn(cb);\n return this[FLOWING];\n }\n // at this point the chunk is a buffer or string\n // don't buffer it up or send it to the decoder\n if (!chunk.length) {\n if (this[BUFFERLENGTH] !== 0)\n this.emit('readable');\n if (cb)\n fn(cb);\n return this[FLOWING];\n }\n // fast-path writing strings of same encoding to a stream with\n // an empty buffer, skipping the buffer/decoder dance\n if (typeof chunk === 'string' &&\n // unless it is a string already ready for us to use\n !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)) {\n //@ts-ignore - sinful unsafe type change\n chunk = Buffer.from(chunk, encoding);\n }\n if (Buffer.isBuffer(chunk) && this[ENCODING]) {\n //@ts-ignore - sinful unsafe type change\n chunk = this[DECODER].write(chunk);\n }\n // Note: flushing CAN potentially switch us into not-flowing mode\n if (this[FLOWING] && this[BUFFERLENGTH] !== 0)\n this[FLUSH](true);\n if (this[FLOWING])\n this.emit('data', chunk);\n else\n this[BUFFERPUSH](chunk);\n if (this[BUFFERLENGTH] !== 0)\n this.emit('readable');\n if (cb)\n fn(cb);\n return this[FLOWING];\n }\n /**\n * Low-level explicit read method.\n *\n * In objectMode, the argument is ignored, and one item is returned if\n * available.\n *\n * `n` is the number of bytes (or in the case of encoding streams,\n * characters) to consume. If `n` is not provided, then the entire buffer\n * is returned, or `null` is returned if no data is available.\n *\n * If `n` is greater that the amount of data in the internal buffer,\n * then `null` is returned.\n */\n read(n) {\n if (this[DESTROYED])\n return null;\n this[DISCARDED] = false;\n if (this[BUFFERLENGTH] === 0 ||\n n === 0 ||\n (n && n > this[BUFFERLENGTH])) {\n this[MAYBE_EMIT_END]();\n return null;\n }\n if (this[OBJECTMODE])\n n = null;\n if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {\n // not object mode, so if we have an encoding, then RType is string\n // otherwise, must be Buffer\n this[BUFFER] = [\n (this[ENCODING]\n ? this[BUFFER].join('')\n : Buffer.concat(this[BUFFER], this[BUFFERLENGTH])),\n ];\n }\n const ret = this[READ](n || null, this[BUFFER][0]);\n this[MAYBE_EMIT_END]();\n return ret;\n }\n [READ](n, chunk) {\n if (this[OBJECTMODE])\n this[BUFFERSHIFT]();\n else {\n const c = chunk;\n if (n === c.length || n === null)\n this[BUFFERSHIFT]();\n else if (typeof c === 'string') {\n this[BUFFER][0] = c.slice(n);\n chunk = c.slice(0, n);\n this[BUFFERLENGTH] -= n;\n }\n else {\n this[BUFFER][0] = c.subarray(n);\n chunk = c.subarray(0, n);\n this[BUFFERLENGTH] -= n;\n }\n }\n this.emit('data', chunk);\n if (!this[BUFFER].length && !this[EOF])\n this.emit('drain');\n return chunk;\n }\n end(chunk, encoding, cb) {\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = undefined;\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = 'utf8';\n }\n if (chunk !== undefined)\n this.write(chunk, encoding);\n if (cb)\n this.once('end', cb);\n this[EOF] = true;\n this.writable = false;\n // if we haven't written anything, then go ahead and emit,\n // even if we're not reading.\n // we'll re-emit if a new 'end' listener is added anyway.\n // This makes MP more suitable to write-only use cases.\n if (this[FLOWING] || !this[PAUSED])\n this[MAYBE_EMIT_END]();\n return this;\n }\n // don't let the internal resume be overwritten\n [RESUME]() {\n if (this[DESTROYED])\n return;\n if (!this[DATALISTENERS] && !this[PIPES].length) {\n this[DISCARDED] = true;\n }\n this[PAUSED] = false;\n this[FLOWING] = true;\n this.emit('resume');\n if (this[BUFFER].length)\n this[FLUSH]();\n else if (this[EOF])\n this[MAYBE_EMIT_END]();\n else\n this.emit('drain');\n }\n /**\n * Resume the stream if it is currently in a paused state\n *\n * If called when there are no pipe destinations or `data` event listeners,\n * this will place the stream in a \"discarded\" state, where all data will\n * be thrown away. The discarded state is removed if a pipe destination or\n * data handler is added, if pause() is called, or if any synchronous or\n * asynchronous iteration is started.\n */\n resume() {\n return this[RESUME]();\n }\n /**\n * Pause the stream\n */\n pause() {\n this[FLOWING] = false;\n this[PAUSED] = true;\n this[DISCARDED] = false;\n }\n /**\n * true if the stream has been forcibly destroyed\n */\n get destroyed() {\n return this[DESTROYED];\n }\n /**\n * true if the stream is currently in a flowing state, meaning that\n * any writes will be immediately emitted.\n */\n get flowing() {\n return this[FLOWING];\n }\n /**\n * true if the stream is currently in a paused state\n */\n get paused() {\n return this[PAUSED];\n }\n [BUFFERPUSH](chunk) {\n if (this[OBJECTMODE])\n this[BUFFERLENGTH] += 1;\n else\n this[BUFFERLENGTH] += chunk.length;\n this[BUFFER].push(chunk);\n }\n [BUFFERSHIFT]() {\n if (this[OBJECTMODE])\n this[BUFFERLENGTH] -= 1;\n else\n this[BUFFERLENGTH] -= this[BUFFER][0].length;\n return this[BUFFER].shift();\n }\n [FLUSH](noDrain = false) {\n do { } while (this[FLUSHCHUNK](this[BUFFERSHIFT]()) &&\n this[BUFFER].length);\n if (!noDrain && !this[BUFFER].length && !this[EOF])\n this.emit('drain');\n }\n [FLUSHCHUNK](chunk) {\n this.emit('data', chunk);\n return this[FLOWING];\n }\n /**\n * Pipe all data emitted by this stream into the destination provided.\n *\n * Triggers the flow of data.\n */\n pipe(dest, opts) {\n if (this[DESTROYED])\n return dest;\n this[DISCARDED] = false;\n const ended = this[EMITTED_END];\n opts = opts || {};\n if (dest === proc.stdout || dest === proc.stderr)\n opts.end = false;\n else\n opts.end = opts.end !== false;\n opts.proxyErrors = !!opts.proxyErrors;\n // piping an ended stream ends immediately\n if (ended) {\n if (opts.end)\n dest.end();\n }\n else {\n // \"as\" here just ignores the WType, which pipes don't care about,\n // since they're only consuming from us, and writing to the dest\n this[PIPES].push(!opts.proxyErrors\n ? new Pipe(this, dest, opts)\n : new PipeProxyErrors(this, dest, opts));\n if (this[ASYNC])\n defer(() => this[RESUME]());\n else\n this[RESUME]();\n }\n return dest;\n }\n /**\n * Fully unhook a piped destination stream.\n *\n * If the destination stream was the only consumer of this stream (ie,\n * there are no other piped destinations or `'data'` event listeners)\n * then the flow of data will stop until there is another consumer or\n * {@link Minipass#resume} is explicitly called.\n */\n unpipe(dest) {\n const p = this[PIPES].find(p => p.dest === dest);\n if (p) {\n if (this[PIPES].length === 1) {\n if (this[FLOWING] && this[DATALISTENERS] === 0) {\n this[FLOWING] = false;\n }\n this[PIPES] = [];\n }\n else\n this[PIPES].splice(this[PIPES].indexOf(p), 1);\n p.unpipe();\n }\n }\n /**\n * Alias for {@link Minipass#on}\n */\n addListener(ev, handler) {\n return this.on(ev, handler);\n }\n /**\n * Mostly identical to `EventEmitter.on`, with the following\n * behavior differences to prevent data loss and unnecessary hangs:\n *\n * - Adding a 'data' event handler will trigger the flow of data\n *\n * - Adding a 'readable' event handler when there is data waiting to be read\n * will cause 'readable' to be emitted immediately.\n *\n * - Adding an 'endish' event handler ('end', 'finish', etc.) which has\n * already passed will cause the event to be emitted immediately and all\n * handlers removed.\n *\n * - Adding an 'error' event handler after an error has been emitted will\n * cause the event to be re-emitted immediately with the error previously\n * raised.\n */\n on(ev, handler) {\n const ret = super.on(ev, handler);\n if (ev === 'data') {\n this[DISCARDED] = false;\n this[DATALISTENERS]++;\n if (!this[PIPES].length && !this[FLOWING]) {\n this[RESUME]();\n }\n }\n else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) {\n super.emit('readable');\n }\n else if (isEndish(ev) && this[EMITTED_END]) {\n super.emit(ev);\n this.removeAllListeners(ev);\n }\n else if (ev === 'error' && this[EMITTED_ERROR]) {\n const h = handler;\n if (this[ASYNC])\n defer(() => h.call(this, this[EMITTED_ERROR]));\n else\n h.call(this, this[EMITTED_ERROR]);\n }\n return ret;\n }\n /**\n * Alias for {@link Minipass#off}\n */\n removeListener(ev, handler) {\n return this.off(ev, handler);\n }\n /**\n * Mostly identical to `EventEmitter.off`\n *\n * If a 'data' event handler is removed, and it was the last consumer\n * (ie, there are no pipe destinations or other 'data' event listeners),\n * then the flow of data will stop until there is another consumer or\n * {@link Minipass#resume} is explicitly called.\n */\n off(ev, handler) {\n const ret = super.off(ev, handler);\n // if we previously had listeners, and now we don't, and we don't\n // have any pipes, then stop the flow, unless it's been explicitly\n // put in a discarded flowing state via stream.resume().\n if (ev === 'data') {\n this[DATALISTENERS] = this.listeners('data').length;\n if (this[DATALISTENERS] === 0 &&\n !this[DISCARDED] &&\n !this[PIPES].length) {\n this[FLOWING] = false;\n }\n }\n return ret;\n }\n /**\n * Mostly identical to `EventEmitter.removeAllListeners`\n *\n * If all 'data' event handlers are removed, and they were the last consumer\n * (ie, there are no pipe destinations), then the flow of data will stop\n * until there is another consumer or {@link Minipass#resume} is explicitly\n * called.\n */\n removeAllListeners(ev) {\n const ret = super.removeAllListeners(ev);\n if (ev === 'data' || ev === undefined) {\n this[DATALISTENERS] = 0;\n if (!this[DISCARDED] && !this[PIPES].length) {\n this[FLOWING] = false;\n }\n }\n return ret;\n }\n /**\n * true if the 'end' event has been emitted\n */\n get emittedEnd() {\n return this[EMITTED_END];\n }\n [MAYBE_EMIT_END]() {\n if (!this[EMITTING_END] &&\n !this[EMITTED_END] &&\n !this[DESTROYED] &&\n this[BUFFER].length === 0 &&\n this[EOF]) {\n this[EMITTING_END] = true;\n this.emit('end');\n this.emit('prefinish');\n this.emit('finish');\n if (this[CLOSED])\n this.emit('close');\n this[EMITTING_END] = false;\n }\n }\n /**\n * Mostly identical to `EventEmitter.emit`, with the following\n * behavior differences to prevent data loss and unnecessary hangs:\n *\n * If the stream has been destroyed, and the event is something other\n * than 'close' or 'error', then `false` is returned and no handlers\n * are called.\n *\n * If the event is 'end', and has already been emitted, then the event\n * is ignored. If the stream is in a paused or non-flowing state, then\n * the event will be deferred until data flow resumes. If the stream is\n * async, then handlers will be called on the next tick rather than\n * immediately.\n *\n * If the event is 'close', and 'end' has not yet been emitted, then\n * the event will be deferred until after 'end' is emitted.\n *\n * If the event is 'error', and an AbortSignal was provided for the stream,\n * and there are no listeners, then the event is ignored, matching the\n * behavior of node core streams in the presense of an AbortSignal.\n *\n * If the event is 'finish' or 'prefinish', then all listeners will be\n * removed after emitting the event, to prevent double-firing.\n */\n emit(ev, ...args) {\n const data = args[0];\n // error and close are only events allowed after calling destroy()\n if (ev !== 'error' &&\n ev !== 'close' &&\n ev !== DESTROYED &&\n this[DESTROYED]) {\n return false;\n }\n else if (ev === 'data') {\n return !this[OBJECTMODE] && !data\n ? false\n : this[ASYNC]\n ? (defer(() => this[EMITDATA](data)), true)\n : this[EMITDATA](data);\n }\n else if (ev === 'end') {\n return this[EMITEND]();\n }\n else if (ev === 'close') {\n this[CLOSED] = true;\n // don't emit close before 'end' and 'finish'\n if (!this[EMITTED_END] && !this[DESTROYED])\n return false;\n const ret = super.emit('close');\n this.removeAllListeners('close');\n return ret;\n }\n else if (ev === 'error') {\n this[EMITTED_ERROR] = data;\n super.emit(ERROR, data);\n const ret = !this[SIGNAL] || this.listeners('error').length\n ? super.emit('error', data)\n : false;\n this[MAYBE_EMIT_END]();\n return ret;\n }\n else if (ev === 'resume') {\n const ret = super.emit('resume');\n this[MAYBE_EMIT_END]();\n return ret;\n }\n else if (ev === 'finish' || ev === 'prefinish') {\n const ret = super.emit(ev);\n this.removeAllListeners(ev);\n return ret;\n }\n // Some other unknown event\n const ret = super.emit(ev, ...args);\n this[MAYBE_EMIT_END]();\n return ret;\n }\n [EMITDATA](data) {\n for (const p of this[PIPES]) {\n if (p.dest.write(data) === false)\n this.pause();\n }\n const ret = this[DISCARDED] ? false : super.emit('data', data);\n this[MAYBE_EMIT_END]();\n return ret;\n }\n [EMITEND]() {\n if (this[EMITTED_END])\n return false;\n this[EMITTED_END] = true;\n this.readable = false;\n return this[ASYNC]\n ? (defer(() => this[EMITEND2]()), true)\n : this[EMITEND2]();\n }\n [EMITEND2]() {\n if (this[DECODER]) {\n const data = this[DECODER].end();\n if (data) {\n for (const p of this[PIPES]) {\n p.dest.write(data);\n }\n if (!this[DISCARDED])\n super.emit('data', data);\n }\n }\n for (const p of this[PIPES]) {\n p.end();\n }\n const ret = super.emit('end');\n this.removeAllListeners('end');\n return ret;\n }\n /**\n * Return a Promise that resolves to an array of all emitted data once\n * the stream ends.\n */\n async collect() {\n const buf = Object.assign([], {\n dataLength: 0,\n });\n if (!this[OBJECTMODE])\n buf.dataLength = 0;\n // set the promise first, in case an error is raised\n // by triggering the flow here.\n const p = this.promise();\n this.on('data', c => {\n buf.push(c);\n if (!this[OBJECTMODE])\n buf.dataLength += c.length;\n });\n await p;\n return buf;\n }\n /**\n * Return a Promise that resolves to the concatenation of all emitted data\n * once the stream ends.\n *\n * Not allowed on objectMode streams.\n */\n async concat() {\n if (this[OBJECTMODE]) {\n throw new Error('cannot concat in objectMode');\n }\n const buf = await this.collect();\n return (this[ENCODING]\n ? buf.join('')\n : Buffer.concat(buf, buf.dataLength));\n }\n /**\n * Return a void Promise that resolves once the stream ends.\n */\n async promise() {\n return new Promise((resolve, reject) => {\n this.on(DESTROYED, () => reject(new Error('stream destroyed')));\n this.on('error', er => reject(er));\n this.on('end', () => resolve());\n });\n }\n /**\n * Asynchronous `for await of` iteration.\n *\n * This will continue emitting all chunks until the stream terminates.\n */\n [Symbol.asyncIterator]() {\n // set this up front, in case the consumer doesn't call next()\n // right away.\n this[DISCARDED] = false;\n let stopped = false;\n const stop = async () => {\n this.pause();\n stopped = true;\n return { value: undefined, done: true };\n };\n const next = () => {\n if (stopped)\n return stop();\n const res = this.read();\n if (res !== null)\n return Promise.resolve({ done: false, value: res });\n if (this[EOF])\n return stop();\n let resolve;\n let reject;\n const onerr = (er) => {\n this.off('data', ondata);\n this.off('end', onend);\n this.off(DESTROYED, ondestroy);\n stop();\n reject(er);\n };\n const ondata = (value) => {\n this.off('error', onerr);\n this.off('end', onend);\n this.off(DESTROYED, ondestroy);\n this.pause();\n resolve({ value, done: !!this[EOF] });\n };\n const onend = () => {\n this.off('error', onerr);\n this.off('data', ondata);\n this.off(DESTROYED, ondestroy);\n stop();\n resolve({ done: true, value: undefined });\n };\n const ondestroy = () => onerr(new Error('stream destroyed'));\n return new Promise((res, rej) => {\n reject = rej;\n resolve = res;\n this.once(DESTROYED, ondestroy);\n this.once('error', onerr);\n this.once('end', onend);\n this.once('data', ondata);\n });\n };\n return {\n next,\n throw: stop,\n return: stop,\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n }\n /**\n * Synchronous `for of` iteration.\n *\n * The iteration will terminate when the internal buffer runs out, even\n * if the stream has not yet terminated.\n */\n [Symbol.iterator]() {\n // set this up front, in case the consumer doesn't call next()\n // right away.\n this[DISCARDED] = false;\n let stopped = false;\n const stop = () => {\n this.pause();\n this.off(ERROR, stop);\n this.off(DESTROYED, stop);\n this.off('end', stop);\n stopped = true;\n return { done: true, value: undefined };\n };\n const next = () => {\n if (stopped)\n return stop();\n const value = this.read();\n return value === null ? stop() : { done: false, value };\n };\n this.once('end', stop);\n this.once(ERROR, stop);\n this.once(DESTROYED, stop);\n return {\n next,\n throw: stop,\n return: stop,\n [Symbol.iterator]() {\n return this;\n },\n };\n }\n /**\n * Destroy a stream, preventing it from being used for any further purpose.\n *\n * If the stream has a `close()` method, then it will be called on\n * destruction.\n *\n * After destruction, any attempt to write data, read data, or emit most\n * events will be ignored.\n *\n * If an error argument is provided, then it will be emitted in an\n * 'error' event.\n */\n destroy(er) {\n if (this[DESTROYED]) {\n if (er)\n this.emit('error', er);\n else\n this.emit(DESTROYED);\n return this;\n }\n this[DESTROYED] = true;\n this[DISCARDED] = true;\n // throw away all buffered data, it's never coming out\n this[BUFFER].length = 0;\n this[BUFFERLENGTH] = 0;\n const wc = this;\n if (typeof wc.close === 'function' && !this[CLOSED])\n wc.close();\n if (er)\n this.emit('error', er);\n // if no error to emit, still reject pending promises\n else\n this.emit(DESTROYED);\n return this;\n }\n /**\n * Alias for {@link isStream}\n *\n * Former export location, maintained for backwards compatibility.\n *\n * @deprecated\n */\n static get isStream() {\n return isStream;\n }\n}\n//# sourceMappingURL=index.js.map","import { LRUCache } from 'lru-cache';\nimport { posix, win32 } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { lstatSync, readdir as readdirCB, readdirSync, readlinkSync, realpathSync as rps, } from 'fs';\nimport * as actualFS from 'node:fs';\nconst realpathSync = rps.native;\n// TODO: test perf of fs/promises realpath vs realpathCB,\n// since the promises one uses realpath.native\nimport { lstat, readdir, readlink, realpath } from 'node:fs/promises';\nimport { Minipass } from 'minipass';\nconst defaultFS = {\n lstatSync,\n readdir: readdirCB,\n readdirSync,\n readlinkSync,\n realpathSync,\n promises: {\n lstat,\n readdir,\n readlink,\n realpath,\n },\n};\n// if they just gave us require('fs') then use our default\nconst fsFromOption = (fsOption) => !fsOption || fsOption === defaultFS || fsOption === actualFS ?\n defaultFS\n : {\n ...defaultFS,\n ...fsOption,\n promises: {\n ...defaultFS.promises,\n ...(fsOption.promises || {}),\n },\n };\n// turn something like //?/c:/ into c:\\\nconst uncDriveRegexp = /^\\\\\\\\\\?\\\\([a-z]:)\\\\?$/i;\nconst uncToDrive = (rootPath) => rootPath.replace(/\\//g, '\\\\').replace(uncDriveRegexp, '$1\\\\');\n// windows paths are separated by either / or \\\nconst eitherSep = /[\\\\\\/]/;\nconst UNKNOWN = 0; // may not even exist, for all we know\nconst IFIFO = 0b0001;\nconst IFCHR = 0b0010;\nconst IFDIR = 0b0100;\nconst IFBLK = 0b0110;\nconst IFREG = 0b1000;\nconst IFLNK = 0b1010;\nconst IFSOCK = 0b1100;\nconst IFMT = 0b1111;\n// mask to unset low 4 bits\nconst IFMT_UNKNOWN = ~IFMT;\n// set after successfully calling readdir() and getting entries.\nconst READDIR_CALLED = 0b0000_0001_0000;\n// set after a successful lstat()\nconst LSTAT_CALLED = 0b0000_0010_0000;\n// set if an entry (or one of its parents) is definitely not a dir\nconst ENOTDIR = 0b0000_0100_0000;\n// set if an entry (or one of its parents) does not exist\n// (can also be set on lstat errors like EACCES or ENAMETOOLONG)\nconst ENOENT = 0b0000_1000_0000;\n// cannot have child entries -- also verify &IFMT is either IFDIR or IFLNK\n// set if we fail to readlink\nconst ENOREADLINK = 0b0001_0000_0000;\n// set if we know realpath() will fail\nconst ENOREALPATH = 0b0010_0000_0000;\nconst ENOCHILD = ENOTDIR | ENOENT | ENOREALPATH;\nconst TYPEMASK = 0b0011_1111_1111;\nconst entToType = (s) => s.isFile() ? IFREG\n : s.isDirectory() ? IFDIR\n : s.isSymbolicLink() ? IFLNK\n : s.isCharacterDevice() ? IFCHR\n : s.isBlockDevice() ? IFBLK\n : s.isSocket() ? IFSOCK\n : s.isFIFO() ? IFIFO\n : UNKNOWN;\n// normalize unicode path names\nconst normalizeCache = new LRUCache({ max: 2 ** 12 });\nconst normalize = (s) => {\n const c = normalizeCache.get(s);\n if (c)\n return c;\n const n = s.normalize('NFKD');\n normalizeCache.set(s, n);\n return n;\n};\nconst normalizeNocaseCache = new LRUCache({ max: 2 ** 12 });\nconst normalizeNocase = (s) => {\n const c = normalizeNocaseCache.get(s);\n if (c)\n return c;\n const n = normalize(s.toLowerCase());\n normalizeNocaseCache.set(s, n);\n return n;\n};\n/**\n * An LRUCache for storing resolved path strings or Path objects.\n * @internal\n */\nexport class ResolveCache extends LRUCache {\n constructor() {\n super({ max: 256 });\n }\n}\n// In order to prevent blowing out the js heap by allocating hundreds of\n// thousands of Path entries when walking extremely large trees, the \"children\"\n// in this tree are represented by storing an array of Path entries in an\n// LRUCache, indexed by the parent. At any time, Path.children() may return an\n// empty array, indicating that it doesn't know about any of its children, and\n// thus has to rebuild that cache. This is fine, it just means that we don't\n// benefit as much from having the cached entries, but huge directory walks\n// don't blow out the stack, and smaller ones are still as fast as possible.\n//\n//It does impose some complexity when building up the readdir data, because we\n//need to pass a reference to the children array that we started with.\n/**\n * an LRUCache for storing child entries.\n * @internal\n */\nexport class ChildrenCache extends LRUCache {\n constructor(maxSize = 16 * 1024) {\n super({\n maxSize,\n // parent + children\n sizeCalculation: a => a.length + 1,\n });\n }\n}\nconst setAsCwd = Symbol('PathScurry setAsCwd');\n/**\n * Path objects are sort of like a super-powered\n * {@link https://nodejs.org/docs/latest/api/fs.html#class-fsdirent fs.Dirent}\n *\n * Each one represents a single filesystem entry on disk, which may or may not\n * exist. It includes methods for reading various types of information via\n * lstat, readlink, and readdir, and caches all information to the greatest\n * degree possible.\n *\n * Note that fs operations that would normally throw will instead return an\n * \"empty\" value. This is in order to prevent excessive overhead from error\n * stack traces.\n */\nexport class PathBase {\n /**\n * the basename of this path\n *\n * **Important**: *always* test the path name against any test string\n * usingthe {@link isNamed} method, and not by directly comparing this\n * string. Otherwise, unicode path strings that the system sees as identical\n * will not be properly treated as the same path, leading to incorrect\n * behavior and possible security issues.\n */\n name;\n /**\n * the Path entry corresponding to the path root.\n *\n * @internal\n */\n root;\n /**\n * All roots found within the current PathScurry family\n *\n * @internal\n */\n roots;\n /**\n * a reference to the parent path, or undefined in the case of root entries\n *\n * @internal\n */\n parent;\n /**\n * boolean indicating whether paths are compared case-insensitively\n * @internal\n */\n nocase;\n /**\n * boolean indicating that this path is the current working directory\n * of the PathScurry collection that contains it.\n */\n isCWD = false;\n // potential default fs override\n #fs;\n // Stats fields\n #dev;\n get dev() {\n return this.#dev;\n }\n #mode;\n get mode() {\n return this.#mode;\n }\n #nlink;\n get nlink() {\n return this.#nlink;\n }\n #uid;\n get uid() {\n return this.#uid;\n }\n #gid;\n get gid() {\n return this.#gid;\n }\n #rdev;\n get rdev() {\n return this.#rdev;\n }\n #blksize;\n get blksize() {\n return this.#blksize;\n }\n #ino;\n get ino() {\n return this.#ino;\n }\n #size;\n get size() {\n return this.#size;\n }\n #blocks;\n get blocks() {\n return this.#blocks;\n }\n #atimeMs;\n get atimeMs() {\n return this.#atimeMs;\n }\n #mtimeMs;\n get mtimeMs() {\n return this.#mtimeMs;\n }\n #ctimeMs;\n get ctimeMs() {\n return this.#ctimeMs;\n }\n #birthtimeMs;\n get birthtimeMs() {\n return this.#birthtimeMs;\n }\n #atime;\n get atime() {\n return this.#atime;\n }\n #mtime;\n get mtime() {\n return this.#mtime;\n }\n #ctime;\n get ctime() {\n return this.#ctime;\n }\n #birthtime;\n get birthtime() {\n return this.#birthtime;\n }\n #matchName;\n #depth;\n #fullpath;\n #fullpathPosix;\n #relative;\n #relativePosix;\n #type;\n #children;\n #linkTarget;\n #realpath;\n /**\n * This property is for compatibility with the Dirent class as of\n * Node v20, where Dirent['parentPath'] refers to the path of the\n * directory that was passed to readdir. For root entries, it's the path\n * to the entry itself.\n */\n get parentPath() {\n return (this.parent || this).fullpath();\n }\n /* c8 ignore start */\n /**\n * Deprecated alias for Dirent['parentPath'] Somewhat counterintuitively,\n * this property refers to the *parent* path, not the path object itself.\n *\n * @deprecated\n */\n get path() {\n return this.parentPath;\n }\n /* c8 ignore stop */\n /**\n * Do not create new Path objects directly. They should always be accessed\n * via the PathScurry class or other methods on the Path class.\n *\n * @internal\n */\n constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) {\n this.name = name;\n this.#matchName = nocase ? normalizeNocase(name) : normalize(name);\n this.#type = type & TYPEMASK;\n this.nocase = nocase;\n this.roots = roots;\n this.root = root || this;\n this.#children = children;\n this.#fullpath = opts.fullpath;\n this.#relative = opts.relative;\n this.#relativePosix = opts.relativePosix;\n this.parent = opts.parent;\n if (this.parent) {\n this.#fs = this.parent.#fs;\n }\n else {\n this.#fs = fsFromOption(opts.fs);\n }\n }\n /**\n * Returns the depth of the Path object from its root.\n *\n * For example, a path at `/foo/bar` would have a depth of 2.\n */\n depth() {\n if (this.#depth !== undefined)\n return this.#depth;\n if (!this.parent)\n return (this.#depth = 0);\n return (this.#depth = this.parent.depth() + 1);\n }\n /**\n * @internal\n */\n childrenCache() {\n return this.#children;\n }\n /**\n * Get the Path object referenced by the string path, resolved from this Path\n */\n resolve(path) {\n if (!path) {\n return this;\n }\n const rootPath = this.getRootString(path);\n const dir = path.substring(rootPath.length);\n const dirParts = dir.split(this.splitSep);\n const result = rootPath ?\n this.getRoot(rootPath).#resolveParts(dirParts)\n : this.#resolveParts(dirParts);\n return result;\n }\n #resolveParts(dirParts) {\n let p = this;\n for (const part of dirParts) {\n p = p.child(part);\n }\n return p;\n }\n /**\n * Returns the cached children Path objects, if still available. If they\n * have fallen out of the cache, then returns an empty array, and resets the\n * READDIR_CALLED bit, so that future calls to readdir() will require an fs\n * lookup.\n *\n * @internal\n */\n children() {\n const cached = this.#children.get(this);\n if (cached) {\n return cached;\n }\n const children = Object.assign([], { provisional: 0 });\n this.#children.set(this, children);\n this.#type &= ~READDIR_CALLED;\n return children;\n }\n /**\n * Resolves a path portion and returns or creates the child Path.\n *\n * Returns `this` if pathPart is `''` or `'.'`, or `parent` if pathPart is\n * `'..'`.\n *\n * This should not be called directly. If `pathPart` contains any path\n * separators, it will lead to unsafe undefined behavior.\n *\n * Use `Path.resolve()` instead.\n *\n * @internal\n */\n child(pathPart, opts) {\n if (pathPart === '' || pathPart === '.') {\n return this;\n }\n if (pathPart === '..') {\n return this.parent || this;\n }\n // find the child\n const children = this.children();\n const name = this.nocase ? normalizeNocase(pathPart) : normalize(pathPart);\n for (const p of children) {\n if (p.#matchName === name) {\n return p;\n }\n }\n // didn't find it, create provisional child, since it might not\n // actually exist. If we know the parent isn't a dir, then\n // in fact it CAN'T exist.\n const s = this.parent ? this.sep : '';\n const fullpath = this.#fullpath ? this.#fullpath + s + pathPart : undefined;\n const pchild = this.newChild(pathPart, UNKNOWN, {\n ...opts,\n parent: this,\n fullpath,\n });\n if (!this.canReaddir()) {\n pchild.#type |= ENOENT;\n }\n // don't have to update provisional, because if we have real children,\n // then provisional is set to children.length, otherwise a lower number\n children.push(pchild);\n return pchild;\n }\n /**\n * The relative path from the cwd. If it does not share an ancestor with\n * the cwd, then this ends up being equivalent to the fullpath()\n */\n relative() {\n if (this.isCWD)\n return '';\n if (this.#relative !== undefined) {\n return this.#relative;\n }\n const name = this.name;\n const p = this.parent;\n if (!p) {\n return (this.#relative = this.name);\n }\n const pv = p.relative();\n return pv + (!pv || !p.parent ? '' : this.sep) + name;\n }\n /**\n * The relative path from the cwd, using / as the path separator.\n * If it does not share an ancestor with\n * the cwd, then this ends up being equivalent to the fullpathPosix()\n * On posix systems, this is identical to relative().\n */\n relativePosix() {\n if (this.sep === '/')\n return this.relative();\n if (this.isCWD)\n return '';\n if (this.#relativePosix !== undefined)\n return this.#relativePosix;\n const name = this.name;\n const p = this.parent;\n if (!p) {\n return (this.#relativePosix = this.fullpathPosix());\n }\n const pv = p.relativePosix();\n return pv + (!pv || !p.parent ? '' : '/') + name;\n }\n /**\n * The fully resolved path string for this Path entry\n */\n fullpath() {\n if (this.#fullpath !== undefined) {\n return this.#fullpath;\n }\n const name = this.name;\n const p = this.parent;\n if (!p) {\n return (this.#fullpath = this.name);\n }\n const pv = p.fullpath();\n const fp = pv + (!p.parent ? '' : this.sep) + name;\n return (this.#fullpath = fp);\n }\n /**\n * On platforms other than windows, this is identical to fullpath.\n *\n * On windows, this is overridden to return the forward-slash form of the\n * full UNC path.\n */\n fullpathPosix() {\n if (this.#fullpathPosix !== undefined)\n return this.#fullpathPosix;\n if (this.sep === '/')\n return (this.#fullpathPosix = this.fullpath());\n if (!this.parent) {\n const p = this.fullpath().replace(/\\\\/g, '/');\n if (/^[a-z]:\\//i.test(p)) {\n return (this.#fullpathPosix = `//?/${p}`);\n }\n else {\n return (this.#fullpathPosix = p);\n }\n }\n const p = this.parent;\n const pfpp = p.fullpathPosix();\n const fpp = pfpp + (!pfpp || !p.parent ? '' : '/') + this.name;\n return (this.#fullpathPosix = fpp);\n }\n /**\n * Is the Path of an unknown type?\n *\n * Note that we might know *something* about it if there has been a previous\n * filesystem operation, for example that it does not exist, or is not a\n * link, or whether it has child entries.\n */\n isUnknown() {\n return (this.#type & IFMT) === UNKNOWN;\n }\n isType(type) {\n return this[`is${type}`]();\n }\n getType() {\n return (this.isUnknown() ? 'Unknown'\n : this.isDirectory() ? 'Directory'\n : this.isFile() ? 'File'\n : this.isSymbolicLink() ? 'SymbolicLink'\n : this.isFIFO() ? 'FIFO'\n : this.isCharacterDevice() ? 'CharacterDevice'\n : this.isBlockDevice() ? 'BlockDevice'\n : /* c8 ignore start */ this.isSocket() ? 'Socket'\n : 'Unknown');\n /* c8 ignore stop */\n }\n /**\n * Is the Path a regular file?\n */\n isFile() {\n return (this.#type & IFMT) === IFREG;\n }\n /**\n * Is the Path a directory?\n */\n isDirectory() {\n return (this.#type & IFMT) === IFDIR;\n }\n /**\n * Is the path a character device?\n */\n isCharacterDevice() {\n return (this.#type & IFMT) === IFCHR;\n }\n /**\n * Is the path a block device?\n */\n isBlockDevice() {\n return (this.#type & IFMT) === IFBLK;\n }\n /**\n * Is the path a FIFO pipe?\n */\n isFIFO() {\n return (this.#type & IFMT) === IFIFO;\n }\n /**\n * Is the path a socket?\n */\n isSocket() {\n return (this.#type & IFMT) === IFSOCK;\n }\n /**\n * Is the path a symbolic link?\n */\n isSymbolicLink() {\n return (this.#type & IFLNK) === IFLNK;\n }\n /**\n * Return the entry if it has been subject of a successful lstat, or\n * undefined otherwise.\n *\n * Does not read the filesystem, so an undefined result *could* simply\n * mean that we haven't called lstat on it.\n */\n lstatCached() {\n return this.#type & LSTAT_CALLED ? this : undefined;\n }\n /**\n * Return the cached link target if the entry has been the subject of a\n * successful readlink, or undefined otherwise.\n *\n * Does not read the filesystem, so an undefined result *could* just mean we\n * don't have any cached data. Only use it if you are very sure that a\n * readlink() has been called at some point.\n */\n readlinkCached() {\n return this.#linkTarget;\n }\n /**\n * Returns the cached realpath target if the entry has been the subject\n * of a successful realpath, or undefined otherwise.\n *\n * Does not read the filesystem, so an undefined result *could* just mean we\n * don't have any cached data. Only use it if you are very sure that a\n * realpath() has been called at some point.\n */\n realpathCached() {\n return this.#realpath;\n }\n /**\n * Returns the cached child Path entries array if the entry has been the\n * subject of a successful readdir(), or [] otherwise.\n *\n * Does not read the filesystem, so an empty array *could* just mean we\n * don't have any cached data. Only use it if you are very sure that a\n * readdir() has been called recently enough to still be valid.\n */\n readdirCached() {\n const children = this.children();\n return children.slice(0, children.provisional);\n }\n /**\n * Return true if it's worth trying to readlink. Ie, we don't (yet) have\n * any indication that readlink will definitely fail.\n *\n * Returns false if the path is known to not be a symlink, if a previous\n * readlink failed, or if the entry does not exist.\n */\n canReadlink() {\n if (this.#linkTarget)\n return true;\n if (!this.parent)\n return false;\n // cases where it cannot possibly succeed\n const ifmt = this.#type & IFMT;\n return !((ifmt !== UNKNOWN && ifmt !== IFLNK) ||\n this.#type & ENOREADLINK ||\n this.#type & ENOENT);\n }\n /**\n * Return true if readdir has previously been successfully called on this\n * path, indicating that cachedReaddir() is likely valid.\n */\n calledReaddir() {\n return !!(this.#type & READDIR_CALLED);\n }\n /**\n * Returns true if the path is known to not exist. That is, a previous lstat\n * or readdir failed to verify its existence when that would have been\n * expected, or a parent entry was marked either enoent or enotdir.\n */\n isENOENT() {\n return !!(this.#type & ENOENT);\n }\n /**\n * Return true if the path is a match for the given path name. This handles\n * case sensitivity and unicode normalization.\n *\n * Note: even on case-sensitive systems, it is **not** safe to test the\n * equality of the `.name` property to determine whether a given pathname\n * matches, due to unicode normalization mismatches.\n *\n * Always use this method instead of testing the `path.name` property\n * directly.\n */\n isNamed(n) {\n return !this.nocase ?\n this.#matchName === normalize(n)\n : this.#matchName === normalizeNocase(n);\n }\n /**\n * Return the Path object corresponding to the target of a symbolic link.\n *\n * If the Path is not a symbolic link, or if the readlink call fails for any\n * reason, `undefined` is returned.\n *\n * Result is cached, and thus may be outdated if the filesystem is mutated.\n */\n async readlink() {\n const target = this.#linkTarget;\n if (target) {\n return target;\n }\n if (!this.canReadlink()) {\n return undefined;\n }\n /* c8 ignore start */\n // already covered by the canReadlink test, here for ts grumples\n if (!this.parent) {\n return undefined;\n }\n /* c8 ignore stop */\n try {\n const read = await this.#fs.promises.readlink(this.fullpath());\n const linkTarget = (await this.parent.realpath())?.resolve(read);\n if (linkTarget) {\n return (this.#linkTarget = linkTarget);\n }\n }\n catch (er) {\n this.#readlinkFail(er.code);\n return undefined;\n }\n }\n /**\n * Synchronous {@link PathBase.readlink}\n */\n readlinkSync() {\n const target = this.#linkTarget;\n if (target) {\n return target;\n }\n if (!this.canReadlink()) {\n return undefined;\n }\n /* c8 ignore start */\n // already covered by the canReadlink test, here for ts grumples\n if (!this.parent) {\n return undefined;\n }\n /* c8 ignore stop */\n try {\n const read = this.#fs.readlinkSync(this.fullpath());\n const linkTarget = this.parent.realpathSync()?.resolve(read);\n if (linkTarget) {\n return (this.#linkTarget = linkTarget);\n }\n }\n catch (er) {\n this.#readlinkFail(er.code);\n return undefined;\n }\n }\n #readdirSuccess(children) {\n // succeeded, mark readdir called bit\n this.#type |= READDIR_CALLED;\n // mark all remaining provisional children as ENOENT\n for (let p = children.provisional; p < children.length; p++) {\n const c = children[p];\n if (c)\n c.#markENOENT();\n }\n }\n #markENOENT() {\n // mark as UNKNOWN and ENOENT\n if (this.#type & ENOENT)\n return;\n this.#type = (this.#type | ENOENT) & IFMT_UNKNOWN;\n this.#markChildrenENOENT();\n }\n #markChildrenENOENT() {\n // all children are provisional and do not exist\n const children = this.children();\n children.provisional = 0;\n for (const p of children) {\n p.#markENOENT();\n }\n }\n #markENOREALPATH() {\n this.#type |= ENOREALPATH;\n this.#markENOTDIR();\n }\n // save the information when we know the entry is not a dir\n #markENOTDIR() {\n // entry is not a directory, so any children can't exist.\n // this *should* be impossible, since any children created\n // after it's been marked ENOTDIR should be marked ENOENT,\n // so it won't even get to this point.\n /* c8 ignore start */\n if (this.#type & ENOTDIR)\n return;\n /* c8 ignore stop */\n let t = this.#type;\n // this could happen if we stat a dir, then delete it,\n // then try to read it or one of its children.\n if ((t & IFMT) === IFDIR)\n t &= IFMT_UNKNOWN;\n this.#type = t | ENOTDIR;\n this.#markChildrenENOENT();\n }\n #readdirFail(code = '') {\n // markENOTDIR and markENOENT also set provisional=0\n if (code === 'ENOTDIR' || code === 'EPERM') {\n this.#markENOTDIR();\n }\n else if (code === 'ENOENT') {\n this.#markENOENT();\n }\n else {\n this.children().provisional = 0;\n }\n }\n #lstatFail(code = '') {\n // Windows just raises ENOENT in this case, disable for win CI\n /* c8 ignore start */\n if (code === 'ENOTDIR') {\n // already know it has a parent by this point\n const p = this.parent;\n p.#markENOTDIR();\n }\n else if (code === 'ENOENT') {\n /* c8 ignore stop */\n this.#markENOENT();\n }\n }\n #readlinkFail(code = '') {\n let ter = this.#type;\n ter |= ENOREADLINK;\n if (code === 'ENOENT')\n ter |= ENOENT;\n // windows gets a weird error when you try to readlink a file\n if (code === 'EINVAL' || code === 'UNKNOWN') {\n // exists, but not a symlink, we don't know WHAT it is, so remove\n // all IFMT bits.\n ter &= IFMT_UNKNOWN;\n }\n this.#type = ter;\n // windows just gets ENOENT in this case. We do cover the case,\n // just disabled because it's impossible on Windows CI\n /* c8 ignore start */\n if (code === 'ENOTDIR' && this.parent) {\n this.parent.#markENOTDIR();\n }\n /* c8 ignore stop */\n }\n #readdirAddChild(e, c) {\n return (this.#readdirMaybePromoteChild(e, c) ||\n this.#readdirAddNewChild(e, c));\n }\n #readdirAddNewChild(e, c) {\n // alloc new entry at head, so it's never provisional\n const type = entToType(e);\n const child = this.newChild(e.name, type, { parent: this });\n const ifmt = child.#type & IFMT;\n if (ifmt !== IFDIR && ifmt !== IFLNK && ifmt !== UNKNOWN) {\n child.#type |= ENOTDIR;\n }\n c.unshift(child);\n c.provisional++;\n return child;\n }\n #readdirMaybePromoteChild(e, c) {\n for (let p = c.provisional; p < c.length; p++) {\n const pchild = c[p];\n const name = this.nocase ? normalizeNocase(e.name) : normalize(e.name);\n if (name !== pchild.#matchName) {\n continue;\n }\n return this.#readdirPromoteChild(e, pchild, p, c);\n }\n }\n #readdirPromoteChild(e, p, index, c) {\n const v = p.name;\n // retain any other flags, but set ifmt from dirent\n p.#type = (p.#type & IFMT_UNKNOWN) | entToType(e);\n // case sensitivity fixing when we learn the true name.\n if (v !== e.name)\n p.name = e.name;\n // just advance provisional index (potentially off the list),\n // otherwise we have to splice/pop it out and re-insert at head\n if (index !== c.provisional) {\n if (index === c.length - 1)\n c.pop();\n else\n c.splice(index, 1);\n c.unshift(p);\n }\n c.provisional++;\n return p;\n }\n /**\n * Call lstat() on this Path, and update all known information that can be\n * determined.\n *\n * Note that unlike `fs.lstat()`, the returned value does not contain some\n * information, such as `mode`, `dev`, `nlink`, and `ino`. If that\n * information is required, you will need to call `fs.lstat` yourself.\n *\n * If the Path refers to a nonexistent file, or if the lstat call fails for\n * any reason, `undefined` is returned. Otherwise the updated Path object is\n * returned.\n *\n * Results are cached, and thus may be out of date if the filesystem is\n * mutated.\n */\n async lstat() {\n if ((this.#type & ENOENT) === 0) {\n try {\n this.#applyStat(await this.#fs.promises.lstat(this.fullpath()));\n return this;\n }\n catch (er) {\n this.#lstatFail(er.code);\n }\n }\n }\n /**\n * synchronous {@link PathBase.lstat}\n */\n lstatSync() {\n if ((this.#type & ENOENT) === 0) {\n try {\n this.#applyStat(this.#fs.lstatSync(this.fullpath()));\n return this;\n }\n catch (er) {\n this.#lstatFail(er.code);\n }\n }\n }\n #applyStat(st) {\n const { atime, atimeMs, birthtime, birthtimeMs, blksize, blocks, ctime, ctimeMs, dev, gid, ino, mode, mtime, mtimeMs, nlink, rdev, size, uid, } = st;\n this.#atime = atime;\n this.#atimeMs = atimeMs;\n this.#birthtime = birthtime;\n this.#birthtimeMs = birthtimeMs;\n this.#blksize = blksize;\n this.#blocks = blocks;\n this.#ctime = ctime;\n this.#ctimeMs = ctimeMs;\n this.#dev = dev;\n this.#gid = gid;\n this.#ino = ino;\n this.#mode = mode;\n this.#mtime = mtime;\n this.#mtimeMs = mtimeMs;\n this.#nlink = nlink;\n this.#rdev = rdev;\n this.#size = size;\n this.#uid = uid;\n const ifmt = entToType(st);\n // retain any other flags, but set the ifmt\n this.#type = (this.#type & IFMT_UNKNOWN) | ifmt | LSTAT_CALLED;\n if (ifmt !== UNKNOWN && ifmt !== IFDIR && ifmt !== IFLNK) {\n this.#type |= ENOTDIR;\n }\n }\n #onReaddirCB = [];\n #readdirCBInFlight = false;\n #callOnReaddirCB(children) {\n this.#readdirCBInFlight = false;\n const cbs = this.#onReaddirCB.slice();\n this.#onReaddirCB.length = 0;\n cbs.forEach(cb => cb(null, children));\n }\n /**\n * Standard node-style callback interface to get list of directory entries.\n *\n * If the Path cannot or does not contain any children, then an empty array\n * is returned.\n *\n * Results are cached, and thus may be out of date if the filesystem is\n * mutated.\n *\n * @param cb The callback called with (er, entries). Note that the `er`\n * param is somewhat extraneous, as all readdir() errors are handled and\n * simply result in an empty set of entries being returned.\n * @param allowZalgo Boolean indicating that immediately known results should\n * *not* be deferred with `queueMicrotask`. Defaults to `false`. Release\n * zalgo at your peril, the dark pony lord is devious and unforgiving.\n */\n readdirCB(cb, allowZalgo = false) {\n if (!this.canReaddir()) {\n if (allowZalgo)\n cb(null, []);\n else\n queueMicrotask(() => cb(null, []));\n return;\n }\n const children = this.children();\n if (this.calledReaddir()) {\n const c = children.slice(0, children.provisional);\n if (allowZalgo)\n cb(null, c);\n else\n queueMicrotask(() => cb(null, c));\n return;\n }\n // don't have to worry about zalgo at this point.\n this.#onReaddirCB.push(cb);\n if (this.#readdirCBInFlight) {\n return;\n }\n this.#readdirCBInFlight = true;\n // else read the directory, fill up children\n // de-provisionalize any provisional children.\n const fullpath = this.fullpath();\n this.#fs.readdir(fullpath, { withFileTypes: true }, (er, entries) => {\n if (er) {\n this.#readdirFail(er.code);\n children.provisional = 0;\n }\n else {\n // if we didn't get an error, we always get entries.\n //@ts-ignore\n for (const e of entries) {\n this.#readdirAddChild(e, children);\n }\n this.#readdirSuccess(children);\n }\n this.#callOnReaddirCB(children.slice(0, children.provisional));\n return;\n });\n }\n #asyncReaddirInFlight;\n /**\n * Return an array of known child entries.\n *\n * If the Path cannot or does not contain any children, then an empty array\n * is returned.\n *\n * Results are cached, and thus may be out of date if the filesystem is\n * mutated.\n */\n async readdir() {\n if (!this.canReaddir()) {\n return [];\n }\n const children = this.children();\n if (this.calledReaddir()) {\n return children.slice(0, children.provisional);\n }\n // else read the directory, fill up children\n // de-provisionalize any provisional children.\n const fullpath = this.fullpath();\n if (this.#asyncReaddirInFlight) {\n await this.#asyncReaddirInFlight;\n }\n else {\n /* c8 ignore start */\n let resolve = () => { };\n /* c8 ignore stop */\n this.#asyncReaddirInFlight = new Promise(res => (resolve = res));\n try {\n for (const e of await this.#fs.promises.readdir(fullpath, {\n withFileTypes: true,\n })) {\n this.#readdirAddChild(e, children);\n }\n this.#readdirSuccess(children);\n }\n catch (er) {\n this.#readdirFail(er.code);\n children.provisional = 0;\n }\n this.#asyncReaddirInFlight = undefined;\n resolve();\n }\n return children.slice(0, children.provisional);\n }\n /**\n * synchronous {@link PathBase.readdir}\n */\n readdirSync() {\n if (!this.canReaddir()) {\n return [];\n }\n const children = this.children();\n if (this.calledReaddir()) {\n return children.slice(0, children.provisional);\n }\n // else read the directory, fill up children\n // de-provisionalize any provisional children.\n const fullpath = this.fullpath();\n try {\n for (const e of this.#fs.readdirSync(fullpath, {\n withFileTypes: true,\n })) {\n this.#readdirAddChild(e, children);\n }\n this.#readdirSuccess(children);\n }\n catch (er) {\n this.#readdirFail(er.code);\n children.provisional = 0;\n }\n return children.slice(0, children.provisional);\n }\n canReaddir() {\n if (this.#type & ENOCHILD)\n return false;\n const ifmt = IFMT & this.#type;\n // we always set ENOTDIR when setting IFMT, so should be impossible\n /* c8 ignore start */\n if (!(ifmt === UNKNOWN || ifmt === IFDIR || ifmt === IFLNK)) {\n return false;\n }\n /* c8 ignore stop */\n return true;\n }\n shouldWalk(dirs, walkFilter) {\n return ((this.#type & IFDIR) === IFDIR &&\n !(this.#type & ENOCHILD) &&\n !dirs.has(this) &&\n (!walkFilter || walkFilter(this)));\n }\n /**\n * Return the Path object corresponding to path as resolved\n * by realpath(3).\n *\n * If the realpath call fails for any reason, `undefined` is returned.\n *\n * Result is cached, and thus may be outdated if the filesystem is mutated.\n * On success, returns a Path object.\n */\n async realpath() {\n if (this.#realpath)\n return this.#realpath;\n if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type)\n return undefined;\n try {\n const rp = await this.#fs.promises.realpath(this.fullpath());\n return (this.#realpath = this.resolve(rp));\n }\n catch (_) {\n this.#markENOREALPATH();\n }\n }\n /**\n * Synchronous {@link realpath}\n */\n realpathSync() {\n if (this.#realpath)\n return this.#realpath;\n if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type)\n return undefined;\n try {\n const rp = this.#fs.realpathSync(this.fullpath());\n return (this.#realpath = this.resolve(rp));\n }\n catch (_) {\n this.#markENOREALPATH();\n }\n }\n /**\n * Internal method to mark this Path object as the scurry cwd,\n * called by {@link PathScurry#chdir}\n *\n * @internal\n */\n [setAsCwd](oldCwd) {\n if (oldCwd === this)\n return;\n oldCwd.isCWD = false;\n this.isCWD = true;\n const changed = new Set([]);\n let rp = [];\n let p = this;\n while (p && p.parent) {\n changed.add(p);\n p.#relative = rp.join(this.sep);\n p.#relativePosix = rp.join('/');\n p = p.parent;\n rp.push('..');\n }\n // now un-memoize parents of old cwd\n p = oldCwd;\n while (p && p.parent && !changed.has(p)) {\n p.#relative = undefined;\n p.#relativePosix = undefined;\n p = p.parent;\n }\n }\n}\n/**\n * Path class used on win32 systems\n *\n * Uses `'\\\\'` as the path separator for returned paths, either `'\\\\'` or `'/'`\n * as the path separator for parsing paths.\n */\nexport class PathWin32 extends PathBase {\n /**\n * Separator for generating path strings.\n */\n sep = '\\\\';\n /**\n * Separator for parsing path strings.\n */\n splitSep = eitherSep;\n /**\n * Do not create new Path objects directly. They should always be accessed\n * via the PathScurry class or other methods on the Path class.\n *\n * @internal\n */\n constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) {\n super(name, type, root, roots, nocase, children, opts);\n }\n /**\n * @internal\n */\n newChild(name, type = UNKNOWN, opts = {}) {\n return new PathWin32(name, type, this.root, this.roots, this.nocase, this.childrenCache(), opts);\n }\n /**\n * @internal\n */\n getRootString(path) {\n return win32.parse(path).root;\n }\n /**\n * @internal\n */\n getRoot(rootPath) {\n rootPath = uncToDrive(rootPath.toUpperCase());\n if (rootPath === this.root.name) {\n return this.root;\n }\n // ok, not that one, check if it matches another we know about\n for (const [compare, root] of Object.entries(this.roots)) {\n if (this.sameRoot(rootPath, compare)) {\n return (this.roots[rootPath] = root);\n }\n }\n // otherwise, have to create a new one.\n return (this.roots[rootPath] = new PathScurryWin32(rootPath, this).root);\n }\n /**\n * @internal\n */\n sameRoot(rootPath, compare = this.root.name) {\n // windows can (rarely) have case-sensitive filesystem, but\n // UNC and drive letters are always case-insensitive, and canonically\n // represented uppercase.\n rootPath = rootPath\n .toUpperCase()\n .replace(/\\//g, '\\\\')\n .replace(uncDriveRegexp, '$1\\\\');\n return rootPath === compare;\n }\n}\n/**\n * Path class used on all posix systems.\n *\n * Uses `'/'` as the path separator.\n */\nexport class PathPosix extends PathBase {\n /**\n * separator for parsing path strings\n */\n splitSep = '/';\n /**\n * separator for generating path strings\n */\n sep = '/';\n /**\n * Do not create new Path objects directly. They should always be accessed\n * via the PathScurry class or other methods on the Path class.\n *\n * @internal\n */\n constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) {\n super(name, type, root, roots, nocase, children, opts);\n }\n /**\n * @internal\n */\n getRootString(path) {\n return path.startsWith('/') ? '/' : '';\n }\n /**\n * @internal\n */\n getRoot(_rootPath) {\n return this.root;\n }\n /**\n * @internal\n */\n newChild(name, type = UNKNOWN, opts = {}) {\n return new PathPosix(name, type, this.root, this.roots, this.nocase, this.childrenCache(), opts);\n }\n}\n/**\n * The base class for all PathScurry classes, providing the interface for path\n * resolution and filesystem operations.\n *\n * Typically, you should *not* instantiate this class directly, but rather one\n * of the platform-specific classes, or the exported {@link PathScurry} which\n * defaults to the current platform.\n */\nexport class PathScurryBase {\n /**\n * The root Path entry for the current working directory of this Scurry\n */\n root;\n /**\n * The string path for the root of this Scurry's current working directory\n */\n rootPath;\n /**\n * A collection of all roots encountered, referenced by rootPath\n */\n roots;\n /**\n * The Path entry corresponding to this PathScurry's current working directory.\n */\n cwd;\n #resolveCache;\n #resolvePosixCache;\n #children;\n /**\n * Perform path comparisons case-insensitively.\n *\n * Defaults true on Darwin and Windows systems, false elsewhere.\n */\n nocase;\n #fs;\n /**\n * This class should not be instantiated directly.\n *\n * Use PathScurryWin32, PathScurryDarwin, PathScurryPosix, or PathScurry\n *\n * @internal\n */\n constructor(cwd = process.cwd(), pathImpl, sep, { nocase, childrenCacheSize = 16 * 1024, fs = defaultFS, } = {}) {\n this.#fs = fsFromOption(fs);\n if (cwd instanceof URL || cwd.startsWith('file://')) {\n cwd = fileURLToPath(cwd);\n }\n // resolve and split root, and then add to the store.\n // this is the only time we call path.resolve()\n const cwdPath = pathImpl.resolve(cwd);\n this.roots = Object.create(null);\n this.rootPath = this.parseRootPath(cwdPath);\n this.#resolveCache = new ResolveCache();\n this.#resolvePosixCache = new ResolveCache();\n this.#children = new ChildrenCache(childrenCacheSize);\n const split = cwdPath.substring(this.rootPath.length).split(sep);\n // resolve('/') leaves '', splits to [''], we don't want that.\n if (split.length === 1 && !split[0]) {\n split.pop();\n }\n /* c8 ignore start */\n if (nocase === undefined) {\n throw new TypeError('must provide nocase setting to PathScurryBase ctor');\n }\n /* c8 ignore stop */\n this.nocase = nocase;\n this.root = this.newRoot(this.#fs);\n this.roots[this.rootPath] = this.root;\n let prev = this.root;\n let len = split.length - 1;\n const joinSep = pathImpl.sep;\n let abs = this.rootPath;\n let sawFirst = false;\n for (const part of split) {\n const l = len--;\n prev = prev.child(part, {\n relative: new Array(l).fill('..').join(joinSep),\n relativePosix: new Array(l).fill('..').join('/'),\n fullpath: (abs += (sawFirst ? '' : joinSep) + part),\n });\n sawFirst = true;\n }\n this.cwd = prev;\n }\n /**\n * Get the depth of a provided path, string, or the cwd\n */\n depth(path = this.cwd) {\n if (typeof path === 'string') {\n path = this.cwd.resolve(path);\n }\n return path.depth();\n }\n /**\n * Return the cache of child entries. Exposed so subclasses can create\n * child Path objects in a platform-specific way.\n *\n * @internal\n */\n childrenCache() {\n return this.#children;\n }\n /**\n * Resolve one or more path strings to a resolved string\n *\n * Same interface as require('path').resolve.\n *\n * Much faster than path.resolve() when called multiple times for the same\n * path, because the resolved Path objects are cached. Much slower\n * otherwise.\n */\n resolve(...paths) {\n // first figure out the minimum number of paths we have to test\n // we always start at cwd, but any absolutes will bump the start\n let r = '';\n for (let i = paths.length - 1; i >= 0; i--) {\n const p = paths[i];\n if (!p || p === '.')\n continue;\n r = r ? `${p}/${r}` : p;\n if (this.isAbsolute(p)) {\n break;\n }\n }\n const cached = this.#resolveCache.get(r);\n if (cached !== undefined) {\n return cached;\n }\n const result = this.cwd.resolve(r).fullpath();\n this.#resolveCache.set(r, result);\n return result;\n }\n /**\n * Resolve one or more path strings to a resolved string, returning\n * the posix path. Identical to .resolve() on posix systems, but on\n * windows will return a forward-slash separated UNC path.\n *\n * Same interface as require('path').resolve.\n *\n * Much faster than path.resolve() when called multiple times for the same\n * path, because the resolved Path objects are cached. Much slower\n * otherwise.\n */\n resolvePosix(...paths) {\n // first figure out the minimum number of paths we have to test\n // we always start at cwd, but any absolutes will bump the start\n let r = '';\n for (let i = paths.length - 1; i >= 0; i--) {\n const p = paths[i];\n if (!p || p === '.')\n continue;\n r = r ? `${p}/${r}` : p;\n if (this.isAbsolute(p)) {\n break;\n }\n }\n const cached = this.#resolvePosixCache.get(r);\n if (cached !== undefined) {\n return cached;\n }\n const result = this.cwd.resolve(r).fullpathPosix();\n this.#resolvePosixCache.set(r, result);\n return result;\n }\n /**\n * find the relative path from the cwd to the supplied path string or entry\n */\n relative(entry = this.cwd) {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry);\n }\n return entry.relative();\n }\n /**\n * find the relative path from the cwd to the supplied path string or\n * entry, using / as the path delimiter, even on Windows.\n */\n relativePosix(entry = this.cwd) {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry);\n }\n return entry.relativePosix();\n }\n /**\n * Return the basename for the provided string or Path object\n */\n basename(entry = this.cwd) {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry);\n }\n return entry.name;\n }\n /**\n * Return the dirname for the provided string or Path object\n */\n dirname(entry = this.cwd) {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry);\n }\n return (entry.parent || entry).fullpath();\n }\n async readdir(entry = this.cwd, opts = {\n withFileTypes: true,\n }) {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry);\n }\n else if (!(entry instanceof PathBase)) {\n opts = entry;\n entry = this.cwd;\n }\n const { withFileTypes } = opts;\n if (!entry.canReaddir()) {\n return [];\n }\n else {\n const p = await entry.readdir();\n return withFileTypes ? p : p.map(e => e.name);\n }\n }\n readdirSync(entry = this.cwd, opts = {\n withFileTypes: true,\n }) {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry);\n }\n else if (!(entry instanceof PathBase)) {\n opts = entry;\n entry = this.cwd;\n }\n const { withFileTypes = true } = opts;\n if (!entry.canReaddir()) {\n return [];\n }\n else if (withFileTypes) {\n return entry.readdirSync();\n }\n else {\n return entry.readdirSync().map(e => e.name);\n }\n }\n /**\n * Call lstat() on the string or Path object, and update all known\n * information that can be determined.\n *\n * Note that unlike `fs.lstat()`, the returned value does not contain some\n * information, such as `mode`, `dev`, `nlink`, and `ino`. If that\n * information is required, you will need to call `fs.lstat` yourself.\n *\n * If the Path refers to a nonexistent file, or if the lstat call fails for\n * any reason, `undefined` is returned. Otherwise the updated Path object is\n * returned.\n *\n * Results are cached, and thus may be out of date if the filesystem is\n * mutated.\n */\n async lstat(entry = this.cwd) {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry);\n }\n return entry.lstat();\n }\n /**\n * synchronous {@link PathScurryBase.lstat}\n */\n lstatSync(entry = this.cwd) {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry);\n }\n return entry.lstatSync();\n }\n async readlink(entry = this.cwd, { withFileTypes } = {\n withFileTypes: false,\n }) {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry);\n }\n else if (!(entry instanceof PathBase)) {\n withFileTypes = entry.withFileTypes;\n entry = this.cwd;\n }\n const e = await entry.readlink();\n return withFileTypes ? e : e?.fullpath();\n }\n readlinkSync(entry = this.cwd, { withFileTypes } = {\n withFileTypes: false,\n }) {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry);\n }\n else if (!(entry instanceof PathBase)) {\n withFileTypes = entry.withFileTypes;\n entry = this.cwd;\n }\n const e = entry.readlinkSync();\n return withFileTypes ? e : e?.fullpath();\n }\n async realpath(entry = this.cwd, { withFileTypes } = {\n withFileTypes: false,\n }) {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry);\n }\n else if (!(entry instanceof PathBase)) {\n withFileTypes = entry.withFileTypes;\n entry = this.cwd;\n }\n const e = await entry.realpath();\n return withFileTypes ? e : e?.fullpath();\n }\n realpathSync(entry = this.cwd, { withFileTypes } = {\n withFileTypes: false,\n }) {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry);\n }\n else if (!(entry instanceof PathBase)) {\n withFileTypes = entry.withFileTypes;\n entry = this.cwd;\n }\n const e = entry.realpathSync();\n return withFileTypes ? e : e?.fullpath();\n }\n async walk(entry = this.cwd, opts = {}) {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry);\n }\n else if (!(entry instanceof PathBase)) {\n opts = entry;\n entry = this.cwd;\n }\n const { withFileTypes = true, follow = false, filter, walkFilter, } = opts;\n const results = [];\n if (!filter || filter(entry)) {\n results.push(withFileTypes ? entry : entry.fullpath());\n }\n const dirs = new Set();\n const walk = (dir, cb) => {\n dirs.add(dir);\n dir.readdirCB((er, entries) => {\n /* c8 ignore start */\n if (er) {\n return cb(er);\n }\n /* c8 ignore stop */\n let len = entries.length;\n if (!len)\n return cb();\n const next = () => {\n if (--len === 0) {\n cb();\n }\n };\n for (const e of entries) {\n if (!filter || filter(e)) {\n results.push(withFileTypes ? e : e.fullpath());\n }\n if (follow && e.isSymbolicLink()) {\n e.realpath()\n .then(r => (r?.isUnknown() ? r.lstat() : r))\n .then(r => r?.shouldWalk(dirs, walkFilter) ? walk(r, next) : next());\n }\n else {\n if (e.shouldWalk(dirs, walkFilter)) {\n walk(e, next);\n }\n else {\n next();\n }\n }\n }\n }, true); // zalgooooooo\n };\n const start = entry;\n return new Promise((res, rej) => {\n walk(start, er => {\n /* c8 ignore start */\n if (er)\n return rej(er);\n /* c8 ignore stop */\n res(results);\n });\n });\n }\n walkSync(entry = this.cwd, opts = {}) {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry);\n }\n else if (!(entry instanceof PathBase)) {\n opts = entry;\n entry = this.cwd;\n }\n const { withFileTypes = true, follow = false, filter, walkFilter, } = opts;\n const results = [];\n if (!filter || filter(entry)) {\n results.push(withFileTypes ? entry : entry.fullpath());\n }\n const dirs = new Set([entry]);\n for (const dir of dirs) {\n const entries = dir.readdirSync();\n for (const e of entries) {\n if (!filter || filter(e)) {\n results.push(withFileTypes ? e : e.fullpath());\n }\n let r = e;\n if (e.isSymbolicLink()) {\n if (!(follow && (r = e.realpathSync())))\n continue;\n if (r.isUnknown())\n r.lstatSync();\n }\n if (r.shouldWalk(dirs, walkFilter)) {\n dirs.add(r);\n }\n }\n }\n return results;\n }\n /**\n * Support for `for await`\n *\n * Alias for {@link PathScurryBase.iterate}\n *\n * Note: As of Node 19, this is very slow, compared to other methods of\n * walking. Consider using {@link PathScurryBase.stream} if memory overhead\n * and backpressure are concerns, or {@link PathScurryBase.walk} if not.\n */\n [Symbol.asyncIterator]() {\n return this.iterate();\n }\n iterate(entry = this.cwd, options = {}) {\n // iterating async over the stream is significantly more performant,\n // especially in the warm-cache scenario, because it buffers up directory\n // entries in the background instead of waiting for a yield for each one.\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry);\n }\n else if (!(entry instanceof PathBase)) {\n options = entry;\n entry = this.cwd;\n }\n return this.stream(entry, options)[Symbol.asyncIterator]();\n }\n /**\n * Iterating over a PathScurry performs a synchronous walk.\n *\n * Alias for {@link PathScurryBase.iterateSync}\n */\n [Symbol.iterator]() {\n return this.iterateSync();\n }\n *iterateSync(entry = this.cwd, opts = {}) {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry);\n }\n else if (!(entry instanceof PathBase)) {\n opts = entry;\n entry = this.cwd;\n }\n const { withFileTypes = true, follow = false, filter, walkFilter, } = opts;\n if (!filter || filter(entry)) {\n yield withFileTypes ? entry : entry.fullpath();\n }\n const dirs = new Set([entry]);\n for (const dir of dirs) {\n const entries = dir.readdirSync();\n for (const e of entries) {\n if (!filter || filter(e)) {\n yield withFileTypes ? e : e.fullpath();\n }\n let r = e;\n if (e.isSymbolicLink()) {\n if (!(follow && (r = e.realpathSync())))\n continue;\n if (r.isUnknown())\n r.lstatSync();\n }\n if (r.shouldWalk(dirs, walkFilter)) {\n dirs.add(r);\n }\n }\n }\n }\n stream(entry = this.cwd, opts = {}) {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry);\n }\n else if (!(entry instanceof PathBase)) {\n opts = entry;\n entry = this.cwd;\n }\n const { withFileTypes = true, follow = false, filter, walkFilter, } = opts;\n const results = new Minipass({ objectMode: true });\n if (!filter || filter(entry)) {\n results.write(withFileTypes ? entry : entry.fullpath());\n }\n const dirs = new Set();\n const queue = [entry];\n let processing = 0;\n const process = () => {\n let paused = false;\n while (!paused) {\n const dir = queue.shift();\n if (!dir) {\n if (processing === 0)\n results.end();\n return;\n }\n processing++;\n dirs.add(dir);\n const onReaddir = (er, entries, didRealpaths = false) => {\n /* c8 ignore start */\n if (er)\n return results.emit('error', er);\n /* c8 ignore stop */\n if (follow && !didRealpaths) {\n const promises = [];\n for (const e of entries) {\n if (e.isSymbolicLink()) {\n promises.push(e\n .realpath()\n .then((r) => r?.isUnknown() ? r.lstat() : r));\n }\n }\n if (promises.length) {\n Promise.all(promises).then(() => onReaddir(null, entries, true));\n return;\n }\n }\n for (const e of entries) {\n if (e && (!filter || filter(e))) {\n if (!results.write(withFileTypes ? e : e.fullpath())) {\n paused = true;\n }\n }\n }\n processing--;\n for (const e of entries) {\n const r = e.realpathCached() || e;\n if (r.shouldWalk(dirs, walkFilter)) {\n queue.push(r);\n }\n }\n if (paused && !results.flowing) {\n results.once('drain', process);\n }\n else if (!sync) {\n process();\n }\n };\n // zalgo containment\n let sync = true;\n dir.readdirCB(onReaddir, true);\n sync = false;\n }\n };\n process();\n return results;\n }\n streamSync(entry = this.cwd, opts = {}) {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry);\n }\n else if (!(entry instanceof PathBase)) {\n opts = entry;\n entry = this.cwd;\n }\n const { withFileTypes = true, follow = false, filter, walkFilter, } = opts;\n const results = new Minipass({ objectMode: true });\n const dirs = new Set();\n if (!filter || filter(entry)) {\n results.write(withFileTypes ? entry : entry.fullpath());\n }\n const queue = [entry];\n let processing = 0;\n const process = () => {\n let paused = false;\n while (!paused) {\n const dir = queue.shift();\n if (!dir) {\n if (processing === 0)\n results.end();\n return;\n }\n processing++;\n dirs.add(dir);\n const entries = dir.readdirSync();\n for (const e of entries) {\n if (!filter || filter(e)) {\n if (!results.write(withFileTypes ? e : e.fullpath())) {\n paused = true;\n }\n }\n }\n processing--;\n for (const e of entries) {\n let r = e;\n if (e.isSymbolicLink()) {\n if (!(follow && (r = e.realpathSync())))\n continue;\n if (r.isUnknown())\n r.lstatSync();\n }\n if (r.shouldWalk(dirs, walkFilter)) {\n queue.push(r);\n }\n }\n }\n if (paused && !results.flowing)\n results.once('drain', process);\n };\n process();\n return results;\n }\n chdir(path = this.cwd) {\n const oldCwd = this.cwd;\n this.cwd = typeof path === 'string' ? this.cwd.resolve(path) : path;\n this.cwd[setAsCwd](oldCwd);\n }\n}\n/**\n * Windows implementation of {@link PathScurryBase}\n *\n * Defaults to case insensitve, uses `'\\\\'` to generate path strings. Uses\n * {@link PathWin32} for Path objects.\n */\nexport class PathScurryWin32 extends PathScurryBase {\n /**\n * separator for generating path strings\n */\n sep = '\\\\';\n constructor(cwd = process.cwd(), opts = {}) {\n const { nocase = true } = opts;\n super(cwd, win32, '\\\\', { ...opts, nocase });\n this.nocase = nocase;\n for (let p = this.cwd; p; p = p.parent) {\n p.nocase = this.nocase;\n }\n }\n /**\n * @internal\n */\n parseRootPath(dir) {\n // if the path starts with a single separator, it's not a UNC, and we'll\n // just get separator as the root, and driveFromUNC will return \\\n // In that case, mount \\ on the root from the cwd.\n return win32.parse(dir).root.toUpperCase();\n }\n /**\n * @internal\n */\n newRoot(fs) {\n return new PathWin32(this.rootPath, IFDIR, undefined, this.roots, this.nocase, this.childrenCache(), { fs });\n }\n /**\n * Return true if the provided path string is an absolute path\n */\n isAbsolute(p) {\n return (p.startsWith('/') || p.startsWith('\\\\') || /^[a-z]:(\\/|\\\\)/i.test(p));\n }\n}\n/**\n * {@link PathScurryBase} implementation for all posix systems other than Darwin.\n *\n * Defaults to case-sensitive matching, uses `'/'` to generate path strings.\n *\n * Uses {@link PathPosix} for Path objects.\n */\nexport class PathScurryPosix extends PathScurryBase {\n /**\n * separator for generating path strings\n */\n sep = '/';\n constructor(cwd = process.cwd(), opts = {}) {\n const { nocase = false } = opts;\n super(cwd, posix, '/', { ...opts, nocase });\n this.nocase = nocase;\n }\n /**\n * @internal\n */\n parseRootPath(_dir) {\n return '/';\n }\n /**\n * @internal\n */\n newRoot(fs) {\n return new PathPosix(this.rootPath, IFDIR, undefined, this.roots, this.nocase, this.childrenCache(), { fs });\n }\n /**\n * Return true if the provided path string is an absolute path\n */\n isAbsolute(p) {\n return p.startsWith('/');\n }\n}\n/**\n * {@link PathScurryBase} implementation for Darwin (macOS) systems.\n *\n * Defaults to case-insensitive matching, uses `'/'` for generating path\n * strings.\n *\n * Uses {@link PathPosix} for Path objects.\n */\nexport class PathScurryDarwin extends PathScurryPosix {\n constructor(cwd = process.cwd(), opts = {}) {\n const { nocase = true } = opts;\n super(cwd, { ...opts, nocase });\n }\n}\n/**\n * Default {@link PathBase} implementation for the current platform.\n *\n * {@link PathWin32} on Windows systems, {@link PathPosix} on all others.\n */\nexport const Path = process.platform === 'win32' ? PathWin32 : PathPosix;\n/**\n * Default {@link PathScurryBase} implementation for the current platform.\n *\n * {@link PathScurryWin32} on Windows systems, {@link PathScurryDarwin} on\n * Darwin (macOS) systems, {@link PathScurryPosix} on all others.\n */\nexport const PathScurry = process.platform === 'win32' ? PathScurryWin32\n : process.platform === 'darwin' ? PathScurryDarwin\n : PathScurryPosix;\n//# sourceMappingURL=index.js.map","// this is just a very light wrapper around 2 arrays with an offset index\nimport { GLOBSTAR } from 'minimatch';\nconst isPatternList = (pl) => pl.length >= 1;\nconst isGlobList = (gl) => gl.length >= 1;\n/**\n * An immutable-ish view on an array of glob parts and their parsed\n * results\n */\nexport class Pattern {\n #patternList;\n #globList;\n #index;\n length;\n #platform;\n #rest;\n #globString;\n #isDrive;\n #isUNC;\n #isAbsolute;\n #followGlobstar = true;\n constructor(patternList, globList, index, platform) {\n if (!isPatternList(patternList)) {\n throw new TypeError('empty pattern list');\n }\n if (!isGlobList(globList)) {\n throw new TypeError('empty glob list');\n }\n if (globList.length !== patternList.length) {\n throw new TypeError('mismatched pattern list and glob list lengths');\n }\n this.length = patternList.length;\n if (index < 0 || index >= this.length) {\n throw new TypeError('index out of range');\n }\n this.#patternList = patternList;\n this.#globList = globList;\n this.#index = index;\n this.#platform = platform;\n // normalize root entries of absolute patterns on initial creation.\n if (this.#index === 0) {\n // c: => ['c:/']\n // C:/ => ['C:/']\n // C:/x => ['C:/', 'x']\n // //host/share => ['//host/share/']\n // //host/share/ => ['//host/share/']\n // //host/share/x => ['//host/share/', 'x']\n // /etc => ['/', 'etc']\n // / => ['/']\n if (this.isUNC()) {\n // '' / '' / 'host' / 'share'\n const [p0, p1, p2, p3, ...prest] = this.#patternList;\n const [g0, g1, g2, g3, ...grest] = this.#globList;\n if (prest[0] === '') {\n // ends in /\n prest.shift();\n grest.shift();\n }\n const p = [p0, p1, p2, p3, ''].join('/');\n const g = [g0, g1, g2, g3, ''].join('/');\n this.#patternList = [p, ...prest];\n this.#globList = [g, ...grest];\n this.length = this.#patternList.length;\n }\n else if (this.isDrive() || this.isAbsolute()) {\n const [p1, ...prest] = this.#patternList;\n const [g1, ...grest] = this.#globList;\n if (prest[0] === '') {\n // ends in /\n prest.shift();\n grest.shift();\n }\n const p = p1 + '/';\n const g = g1 + '/';\n this.#patternList = [p, ...prest];\n this.#globList = [g, ...grest];\n this.length = this.#patternList.length;\n }\n }\n }\n /**\n * The first entry in the parsed list of patterns\n */\n pattern() {\n return this.#patternList[this.#index];\n }\n /**\n * true of if pattern() returns a string\n */\n isString() {\n return typeof this.#patternList[this.#index] === 'string';\n }\n /**\n * true of if pattern() returns GLOBSTAR\n */\n isGlobstar() {\n return this.#patternList[this.#index] === GLOBSTAR;\n }\n /**\n * true if pattern() returns a regexp\n */\n isRegExp() {\n return this.#patternList[this.#index] instanceof RegExp;\n }\n /**\n * The /-joined set of glob parts that make up this pattern\n */\n globString() {\n return (this.#globString =\n this.#globString ||\n (this.#index === 0 ?\n this.isAbsolute() ?\n this.#globList[0] + this.#globList.slice(1).join('/')\n : this.#globList.join('/')\n : this.#globList.slice(this.#index).join('/')));\n }\n /**\n * true if there are more pattern parts after this one\n */\n hasMore() {\n return this.length > this.#index + 1;\n }\n /**\n * The rest of the pattern after this part, or null if this is the end\n */\n rest() {\n if (this.#rest !== undefined)\n return this.#rest;\n if (!this.hasMore())\n return (this.#rest = null);\n this.#rest = new Pattern(this.#patternList, this.#globList, this.#index + 1, this.#platform);\n this.#rest.#isAbsolute = this.#isAbsolute;\n this.#rest.#isUNC = this.#isUNC;\n this.#rest.#isDrive = this.#isDrive;\n return this.#rest;\n }\n /**\n * true if the pattern represents a //unc/path/ on windows\n */\n isUNC() {\n const pl = this.#patternList;\n return this.#isUNC !== undefined ?\n this.#isUNC\n : (this.#isUNC =\n this.#platform === 'win32' &&\n this.#index === 0 &&\n pl[0] === '' &&\n pl[1] === '' &&\n typeof pl[2] === 'string' &&\n !!pl[2] &&\n typeof pl[3] === 'string' &&\n !!pl[3]);\n }\n // pattern like C:/...\n // split = ['C:', ...]\n // XXX: would be nice to handle patterns like `c:*` to test the cwd\n // in c: for *, but I don't know of a way to even figure out what that\n // cwd is without actually chdir'ing into it?\n /**\n * True if the pattern starts with a drive letter on Windows\n */\n isDrive() {\n const pl = this.#patternList;\n return this.#isDrive !== undefined ?\n this.#isDrive\n : (this.#isDrive =\n this.#platform === 'win32' &&\n this.#index === 0 &&\n this.length > 1 &&\n typeof pl[0] === 'string' &&\n /^[a-z]:$/i.test(pl[0]));\n }\n // pattern = '/' or '/...' or '/x/...'\n // split = ['', ''] or ['', ...] or ['', 'x', ...]\n // Drive and UNC both considered absolute on windows\n /**\n * True if the pattern is rooted on an absolute path\n */\n isAbsolute() {\n const pl = this.#patternList;\n return this.#isAbsolute !== undefined ?\n this.#isAbsolute\n : (this.#isAbsolute =\n (pl[0] === '' && pl.length > 1) ||\n this.isDrive() ||\n this.isUNC());\n }\n /**\n * consume the root of the pattern, and return it\n */\n root() {\n const p = this.#patternList[0];\n return (typeof p === 'string' && this.isAbsolute() && this.#index === 0) ?\n p\n : '';\n }\n /**\n * Check to see if the current globstar pattern is allowed to follow\n * a symbolic link.\n */\n checkFollowGlobstar() {\n return !(this.#index === 0 ||\n !this.isGlobstar() ||\n !this.#followGlobstar);\n }\n /**\n * Mark that the current globstar pattern is following a symbolic link\n */\n markFollowGlobstar() {\n if (this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar)\n return false;\n this.#followGlobstar = false;\n return true;\n }\n}\n//# sourceMappingURL=pattern.js.map","// give it a pattern, and it'll be able to tell you if\n// a given path should be ignored.\n// Ignoring a path ignores its children if the pattern ends in /**\n// Ignores are always parsed in dot:true mode\nimport { Minimatch } from 'minimatch';\nimport { Pattern } from './pattern.js';\nconst defaultPlatform = (typeof process === 'object' &&\n process &&\n typeof process.platform === 'string') ?\n process.platform\n : 'linux';\n/**\n * Class used to process ignored patterns\n */\nexport class Ignore {\n relative;\n relativeChildren;\n absolute;\n absoluteChildren;\n platform;\n mmopts;\n constructor(ignored, { nobrace, nocase, noext, noglobstar, platform = defaultPlatform, }) {\n this.relative = [];\n this.absolute = [];\n this.relativeChildren = [];\n this.absoluteChildren = [];\n this.platform = platform;\n this.mmopts = {\n dot: true,\n nobrace,\n nocase,\n noext,\n noglobstar,\n optimizationLevel: 2,\n platform,\n nocomment: true,\n nonegate: true,\n };\n for (const ign of ignored)\n this.add(ign);\n }\n add(ign) {\n // this is a little weird, but it gives us a clean set of optimized\n // minimatch matchers, without getting tripped up if one of them\n // ends in /** inside a brace section, and it's only inefficient at\n // the start of the walk, not along it.\n // It'd be nice if the Pattern class just had a .test() method, but\n // handling globstars is a bit of a pita, and that code already lives\n // in minimatch anyway.\n // Another way would be if maybe Minimatch could take its set/globParts\n // as an option, and then we could at least just use Pattern to test\n // for absolute-ness.\n // Yet another way, Minimatch could take an array of glob strings, and\n // a cwd option, and do the right thing.\n const mm = new Minimatch(ign, this.mmopts);\n for (let i = 0; i < mm.set.length; i++) {\n const parsed = mm.set[i];\n const globParts = mm.globParts[i];\n /* c8 ignore start */\n if (!parsed || !globParts) {\n throw new Error('invalid pattern object');\n }\n // strip off leading ./ portions\n // https://github.com/isaacs/node-glob/issues/570\n while (parsed[0] === '.' && globParts[0] === '.') {\n parsed.shift();\n globParts.shift();\n }\n /* c8 ignore stop */\n const p = new Pattern(parsed, globParts, 0, this.platform);\n const m = new Minimatch(p.globString(), this.mmopts);\n const children = globParts[globParts.length - 1] === '**';\n const absolute = p.isAbsolute();\n if (absolute)\n this.absolute.push(m);\n else\n this.relative.push(m);\n if (children) {\n if (absolute)\n this.absoluteChildren.push(m);\n else\n this.relativeChildren.push(m);\n }\n }\n }\n ignored(p) {\n const fullpath = p.fullpath();\n const fullpaths = `${fullpath}/`;\n const relative = p.relative() || '.';\n const relatives = `${relative}/`;\n for (const m of this.relative) {\n if (m.match(relative) || m.match(relatives))\n return true;\n }\n for (const m of this.absolute) {\n if (m.match(fullpath) || m.match(fullpaths))\n return true;\n }\n return false;\n }\n childrenIgnored(p) {\n const fullpath = p.fullpath() + '/';\n const relative = (p.relative() || '.') + '/';\n for (const m of this.relativeChildren) {\n if (m.match(relative))\n return true;\n }\n for (const m of this.absoluteChildren) {\n if (m.match(fullpath))\n return true;\n }\n return false;\n }\n}\n//# sourceMappingURL=ignore.js.map","// synchronous utility for filtering entries and calculating subwalks\nimport { GLOBSTAR } from 'minimatch';\n/**\n * A cache of which patterns have been processed for a given Path\n */\nexport class HasWalkedCache {\n store;\n constructor(store = new Map()) {\n this.store = store;\n }\n copy() {\n return new HasWalkedCache(new Map(this.store));\n }\n hasWalked(target, pattern) {\n return this.store.get(target.fullpath())?.has(pattern.globString());\n }\n storeWalked(target, pattern) {\n const fullpath = target.fullpath();\n const cached = this.store.get(fullpath);\n if (cached)\n cached.add(pattern.globString());\n else\n this.store.set(fullpath, new Set([pattern.globString()]));\n }\n}\n/**\n * A record of which paths have been matched in a given walk step,\n * and whether they only are considered a match if they are a directory,\n * and whether their absolute or relative path should be returned.\n */\nexport class MatchRecord {\n store = new Map();\n add(target, absolute, ifDir) {\n const n = (absolute ? 2 : 0) | (ifDir ? 1 : 0);\n const current = this.store.get(target);\n this.store.set(target, current === undefined ? n : n & current);\n }\n // match, absolute, ifdir\n entries() {\n return [...this.store.entries()].map(([path, n]) => [\n path,\n !!(n & 2),\n !!(n & 1),\n ]);\n }\n}\n/**\n * A collection of patterns that must be processed in a subsequent step\n * for a given path.\n */\nexport class SubWalks {\n store = new Map();\n add(target, pattern) {\n if (!target.canReaddir()) {\n return;\n }\n const subs = this.store.get(target);\n if (subs) {\n if (!subs.find(p => p.globString() === pattern.globString())) {\n subs.push(pattern);\n }\n }\n else\n this.store.set(target, [pattern]);\n }\n get(target) {\n const subs = this.store.get(target);\n /* c8 ignore start */\n if (!subs) {\n throw new Error('attempting to walk unknown path');\n }\n /* c8 ignore stop */\n return subs;\n }\n entries() {\n return this.keys().map(k => [k, this.store.get(k)]);\n }\n keys() {\n return [...this.store.keys()].filter(t => t.canReaddir());\n }\n}\n/**\n * The class that processes patterns for a given path.\n *\n * Handles child entry filtering, and determining whether a path's\n * directory contents must be read.\n */\nexport class Processor {\n hasWalkedCache;\n matches = new MatchRecord();\n subwalks = new SubWalks();\n patterns;\n follow;\n dot;\n opts;\n constructor(opts, hasWalkedCache) {\n this.opts = opts;\n this.follow = !!opts.follow;\n this.dot = !!opts.dot;\n this.hasWalkedCache =\n hasWalkedCache ? hasWalkedCache.copy() : new HasWalkedCache();\n }\n processPatterns(target, patterns) {\n this.patterns = patterns;\n const processingSet = patterns.map(p => [target, p]);\n // map of paths to the magic-starting subwalks they need to walk\n // first item in patterns is the filter\n for (let [t, pattern] of processingSet) {\n this.hasWalkedCache.storeWalked(t, pattern);\n const root = pattern.root();\n const absolute = pattern.isAbsolute() && this.opts.absolute !== false;\n // start absolute patterns at root\n if (root) {\n t = t.resolve(root === '/' && this.opts.root !== undefined ?\n this.opts.root\n : root);\n const rest = pattern.rest();\n if (!rest) {\n this.matches.add(t, true, false);\n continue;\n }\n else {\n pattern = rest;\n }\n }\n if (t.isENOENT())\n continue;\n let p;\n let rest;\n let changed = false;\n while (typeof (p = pattern.pattern()) === 'string' &&\n (rest = pattern.rest())) {\n const c = t.resolve(p);\n t = c;\n pattern = rest;\n changed = true;\n }\n p = pattern.pattern();\n rest = pattern.rest();\n if (changed) {\n if (this.hasWalkedCache.hasWalked(t, pattern))\n continue;\n this.hasWalkedCache.storeWalked(t, pattern);\n }\n // now we have either a final string for a known entry,\n // more strings for an unknown entry,\n // or a pattern starting with magic, mounted on t.\n if (typeof p === 'string') {\n // must not be final entry, otherwise we would have\n // concatenated it earlier.\n const ifDir = p === '..' || p === '' || p === '.';\n this.matches.add(t.resolve(p), absolute, ifDir);\n continue;\n }\n else if (p === GLOBSTAR) {\n // if no rest, match and subwalk pattern\n // if rest, process rest and subwalk pattern\n // if it's a symlink, but we didn't get here by way of a\n // globstar match (meaning it's the first time THIS globstar\n // has traversed a symlink), then we follow it. Otherwise, stop.\n if (!t.isSymbolicLink() ||\n this.follow ||\n pattern.checkFollowGlobstar()) {\n this.subwalks.add(t, pattern);\n }\n const rp = rest?.pattern();\n const rrest = rest?.rest();\n if (!rest || ((rp === '' || rp === '.') && !rrest)) {\n // only HAS to be a dir if it ends in **/ or **/.\n // but ending in ** will match files as well.\n this.matches.add(t, absolute, rp === '' || rp === '.');\n }\n else {\n if (rp === '..') {\n // this would mean you're matching **/.. at the fs root,\n // and no thanks, I'm not gonna test that specific case.\n /* c8 ignore start */\n const tp = t.parent || t;\n /* c8 ignore stop */\n if (!rrest)\n this.matches.add(tp, absolute, true);\n else if (!this.hasWalkedCache.hasWalked(tp, rrest)) {\n this.subwalks.add(tp, rrest);\n }\n }\n }\n }\n else if (p instanceof RegExp) {\n this.subwalks.add(t, pattern);\n }\n }\n return this;\n }\n subwalkTargets() {\n return this.subwalks.keys();\n }\n child() {\n return new Processor(this.opts, this.hasWalkedCache);\n }\n // return a new Processor containing the subwalks for each\n // child entry, and a set of matches, and\n // a hasWalkedCache that's a copy of this one\n // then we're going to call\n filterEntries(parent, entries) {\n const patterns = this.subwalks.get(parent);\n // put matches and entry walks into the results processor\n const results = this.child();\n for (const e of entries) {\n for (const pattern of patterns) {\n const absolute = pattern.isAbsolute();\n const p = pattern.pattern();\n const rest = pattern.rest();\n if (p === GLOBSTAR) {\n results.testGlobstar(e, pattern, rest, absolute);\n }\n else if (p instanceof RegExp) {\n results.testRegExp(e, p, rest, absolute);\n }\n else {\n results.testString(e, p, rest, absolute);\n }\n }\n }\n return results;\n }\n testGlobstar(e, pattern, rest, absolute) {\n if (this.dot || !e.name.startsWith('.')) {\n if (!pattern.hasMore()) {\n this.matches.add(e, absolute, false);\n }\n if (e.canReaddir()) {\n // if we're in follow mode or it's not a symlink, just keep\n // testing the same pattern. If there's more after the globstar,\n // then this symlink consumes the globstar. If not, then we can\n // follow at most ONE symlink along the way, so we mark it, which\n // also checks to ensure that it wasn't already marked.\n if (this.follow || !e.isSymbolicLink()) {\n this.subwalks.add(e, pattern);\n }\n else if (e.isSymbolicLink()) {\n if (rest && pattern.checkFollowGlobstar()) {\n this.subwalks.add(e, rest);\n }\n else if (pattern.markFollowGlobstar()) {\n this.subwalks.add(e, pattern);\n }\n }\n }\n }\n // if the NEXT thing matches this entry, then also add\n // the rest.\n if (rest) {\n const rp = rest.pattern();\n if (typeof rp === 'string' &&\n // dots and empty were handled already\n rp !== '..' &&\n rp !== '' &&\n rp !== '.') {\n this.testString(e, rp, rest.rest(), absolute);\n }\n else if (rp === '..') {\n /* c8 ignore start */\n const ep = e.parent || e;\n /* c8 ignore stop */\n this.subwalks.add(ep, rest);\n }\n else if (rp instanceof RegExp) {\n this.testRegExp(e, rp, rest.rest(), absolute);\n }\n }\n }\n testRegExp(e, p, rest, absolute) {\n if (!p.test(e.name))\n return;\n if (!rest) {\n this.matches.add(e, absolute, false);\n }\n else {\n this.subwalks.add(e, rest);\n }\n }\n testString(e, p, rest, absolute) {\n // should never happen?\n if (!e.isNamed(p))\n return;\n if (!rest) {\n this.matches.add(e, absolute, false);\n }\n else {\n this.subwalks.add(e, rest);\n }\n }\n}\n//# sourceMappingURL=processor.js.map","/**\n * Single-use utility classes to provide functionality to the {@link Glob}\n * methods.\n *\n * @module\n */\nimport { Minipass } from 'minipass';\nimport { Ignore } from './ignore.js';\nimport { Processor } from './processor.js';\nconst makeIgnore = (ignore, opts) => typeof ignore === 'string' ? new Ignore([ignore], opts)\n : Array.isArray(ignore) ? new Ignore(ignore, opts)\n : ignore;\n/**\n * basic walking utilities that all the glob walker types use\n */\nexport class GlobUtil {\n path;\n patterns;\n opts;\n seen = new Set();\n paused = false;\n aborted = false;\n #onResume = [];\n #ignore;\n #sep;\n signal;\n maxDepth;\n includeChildMatches;\n constructor(patterns, path, opts) {\n this.patterns = patterns;\n this.path = path;\n this.opts = opts;\n this.#sep = !opts.posix && opts.platform === 'win32' ? '\\\\' : '/';\n this.includeChildMatches = opts.includeChildMatches !== false;\n if (opts.ignore || !this.includeChildMatches) {\n this.#ignore = makeIgnore(opts.ignore ?? [], opts);\n if (!this.includeChildMatches &&\n typeof this.#ignore.add !== 'function') {\n const m = 'cannot ignore child matches, ignore lacks add() method.';\n throw new Error(m);\n }\n }\n // ignore, always set with maxDepth, but it's optional on the\n // GlobOptions type\n /* c8 ignore start */\n this.maxDepth = opts.maxDepth || Infinity;\n /* c8 ignore stop */\n if (opts.signal) {\n this.signal = opts.signal;\n this.signal.addEventListener('abort', () => {\n this.#onResume.length = 0;\n });\n }\n }\n #ignored(path) {\n return this.seen.has(path) || !!this.#ignore?.ignored?.(path);\n }\n #childrenIgnored(path) {\n return !!this.#ignore?.childrenIgnored?.(path);\n }\n // backpressure mechanism\n pause() {\n this.paused = true;\n }\n resume() {\n /* c8 ignore start */\n if (this.signal?.aborted)\n return;\n /* c8 ignore stop */\n this.paused = false;\n let fn = undefined;\n while (!this.paused && (fn = this.#onResume.shift())) {\n fn();\n }\n }\n onResume(fn) {\n if (this.signal?.aborted)\n return;\n /* c8 ignore start */\n if (!this.paused) {\n fn();\n }\n else {\n /* c8 ignore stop */\n this.#onResume.push(fn);\n }\n }\n // do the requisite realpath/stat checking, and return the path\n // to add or undefined to filter it out.\n async matchCheck(e, ifDir) {\n if (ifDir && this.opts.nodir)\n return undefined;\n let rpc;\n if (this.opts.realpath) {\n rpc = e.realpathCached() || (await e.realpath());\n if (!rpc)\n return undefined;\n e = rpc;\n }\n const needStat = e.isUnknown() || this.opts.stat;\n const s = needStat ? await e.lstat() : e;\n if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {\n const target = await s.realpath();\n /* c8 ignore start */\n if (target && (target.isUnknown() || this.opts.stat)) {\n await target.lstat();\n }\n /* c8 ignore stop */\n }\n return this.matchCheckTest(s, ifDir);\n }\n matchCheckTest(e, ifDir) {\n return (e &&\n (this.maxDepth === Infinity || e.depth() <= this.maxDepth) &&\n (!ifDir || e.canReaddir()) &&\n (!this.opts.nodir || !e.isDirectory()) &&\n (!this.opts.nodir ||\n !this.opts.follow ||\n !e.isSymbolicLink() ||\n !e.realpathCached()?.isDirectory()) &&\n !this.#ignored(e)) ?\n e\n : undefined;\n }\n matchCheckSync(e, ifDir) {\n if (ifDir && this.opts.nodir)\n return undefined;\n let rpc;\n if (this.opts.realpath) {\n rpc = e.realpathCached() || e.realpathSync();\n if (!rpc)\n return undefined;\n e = rpc;\n }\n const needStat = e.isUnknown() || this.opts.stat;\n const s = needStat ? e.lstatSync() : e;\n if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {\n const target = s.realpathSync();\n if (target && (target?.isUnknown() || this.opts.stat)) {\n target.lstatSync();\n }\n }\n return this.matchCheckTest(s, ifDir);\n }\n matchFinish(e, absolute) {\n if (this.#ignored(e))\n return;\n // we know we have an ignore if this is false, but TS doesn't\n if (!this.includeChildMatches && this.#ignore?.add) {\n const ign = `${e.relativePosix()}/**`;\n this.#ignore.add(ign);\n }\n const abs = this.opts.absolute === undefined ? absolute : this.opts.absolute;\n this.seen.add(e);\n const mark = this.opts.mark && e.isDirectory() ? this.#sep : '';\n // ok, we have what we need!\n if (this.opts.withFileTypes) {\n this.matchEmit(e);\n }\n else if (abs) {\n const abs = this.opts.posix ? e.fullpathPosix() : e.fullpath();\n this.matchEmit(abs + mark);\n }\n else {\n const rel = this.opts.posix ? e.relativePosix() : e.relative();\n const pre = this.opts.dotRelative && !rel.startsWith('..' + this.#sep) ?\n '.' + this.#sep\n : '';\n this.matchEmit(!rel ? '.' + mark : pre + rel + mark);\n }\n }\n async match(e, absolute, ifDir) {\n const p = await this.matchCheck(e, ifDir);\n if (p)\n this.matchFinish(p, absolute);\n }\n matchSync(e, absolute, ifDir) {\n const p = this.matchCheckSync(e, ifDir);\n if (p)\n this.matchFinish(p, absolute);\n }\n walkCB(target, patterns, cb) {\n /* c8 ignore start */\n if (this.signal?.aborted)\n cb();\n /* c8 ignore stop */\n this.walkCB2(target, patterns, new Processor(this.opts), cb);\n }\n walkCB2(target, patterns, processor, cb) {\n if (this.#childrenIgnored(target))\n return cb();\n if (this.signal?.aborted)\n cb();\n if (this.paused) {\n this.onResume(() => this.walkCB2(target, patterns, processor, cb));\n return;\n }\n processor.processPatterns(target, patterns);\n // done processing. all of the above is sync, can be abstracted out.\n // subwalks is a map of paths to the entry filters they need\n // matches is a map of paths to [absolute, ifDir] tuples.\n let tasks = 1;\n const next = () => {\n if (--tasks === 0)\n cb();\n };\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m))\n continue;\n tasks++;\n this.match(m, absolute, ifDir).then(() => next());\n }\n for (const t of processor.subwalkTargets()) {\n if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {\n continue;\n }\n tasks++;\n const childrenCached = t.readdirCached();\n if (t.calledReaddir())\n this.walkCB3(t, childrenCached, processor, next);\n else {\n t.readdirCB((_, entries) => this.walkCB3(t, entries, processor, next), true);\n }\n }\n next();\n }\n walkCB3(target, entries, processor, cb) {\n processor = processor.filterEntries(target, entries);\n let tasks = 1;\n const next = () => {\n if (--tasks === 0)\n cb();\n };\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m))\n continue;\n tasks++;\n this.match(m, absolute, ifDir).then(() => next());\n }\n for (const [target, patterns] of processor.subwalks.entries()) {\n tasks++;\n this.walkCB2(target, patterns, processor.child(), next);\n }\n next();\n }\n walkCBSync(target, patterns, cb) {\n /* c8 ignore start */\n if (this.signal?.aborted)\n cb();\n /* c8 ignore stop */\n this.walkCB2Sync(target, patterns, new Processor(this.opts), cb);\n }\n walkCB2Sync(target, patterns, processor, cb) {\n if (this.#childrenIgnored(target))\n return cb();\n if (this.signal?.aborted)\n cb();\n if (this.paused) {\n this.onResume(() => this.walkCB2Sync(target, patterns, processor, cb));\n return;\n }\n processor.processPatterns(target, patterns);\n // done processing. all of the above is sync, can be abstracted out.\n // subwalks is a map of paths to the entry filters they need\n // matches is a map of paths to [absolute, ifDir] tuples.\n let tasks = 1;\n const next = () => {\n if (--tasks === 0)\n cb();\n };\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m))\n continue;\n this.matchSync(m, absolute, ifDir);\n }\n for (const t of processor.subwalkTargets()) {\n if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {\n continue;\n }\n tasks++;\n const children = t.readdirSync();\n this.walkCB3Sync(t, children, processor, next);\n }\n next();\n }\n walkCB3Sync(target, entries, processor, cb) {\n processor = processor.filterEntries(target, entries);\n let tasks = 1;\n const next = () => {\n if (--tasks === 0)\n cb();\n };\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m))\n continue;\n this.matchSync(m, absolute, ifDir);\n }\n for (const [target, patterns] of processor.subwalks.entries()) {\n tasks++;\n this.walkCB2Sync(target, patterns, processor.child(), next);\n }\n next();\n }\n}\nexport class GlobWalker extends GlobUtil {\n matches = new Set();\n constructor(patterns, path, opts) {\n super(patterns, path, opts);\n }\n matchEmit(e) {\n this.matches.add(e);\n }\n async walk() {\n if (this.signal?.aborted)\n throw this.signal.reason;\n if (this.path.isUnknown()) {\n await this.path.lstat();\n }\n await new Promise((res, rej) => {\n this.walkCB(this.path, this.patterns, () => {\n if (this.signal?.aborted) {\n rej(this.signal.reason);\n }\n else {\n res(this.matches);\n }\n });\n });\n return this.matches;\n }\n walkSync() {\n if (this.signal?.aborted)\n throw this.signal.reason;\n if (this.path.isUnknown()) {\n this.path.lstatSync();\n }\n // nothing for the callback to do, because this never pauses\n this.walkCBSync(this.path, this.patterns, () => {\n if (this.signal?.aborted)\n throw this.signal.reason;\n });\n return this.matches;\n }\n}\nexport class GlobStream extends GlobUtil {\n results;\n constructor(patterns, path, opts) {\n super(patterns, path, opts);\n this.results = new Minipass({\n signal: this.signal,\n objectMode: true,\n });\n this.results.on('drain', () => this.resume());\n this.results.on('resume', () => this.resume());\n }\n matchEmit(e) {\n this.results.write(e);\n if (!this.results.flowing)\n this.pause();\n }\n stream() {\n const target = this.path;\n if (target.isUnknown()) {\n target.lstat().then(() => {\n this.walkCB(target, this.patterns, () => this.results.end());\n });\n }\n else {\n this.walkCB(target, this.patterns, () => this.results.end());\n }\n return this.results;\n }\n streamSync() {\n if (this.path.isUnknown()) {\n this.path.lstatSync();\n }\n this.walkCBSync(this.path, this.patterns, () => this.results.end());\n return this.results;\n }\n}\n//# sourceMappingURL=walker.js.map","import { Minimatch } from 'minimatch';\nimport { fileURLToPath } from 'node:url';\nimport { PathScurry, PathScurryDarwin, PathScurryPosix, PathScurryWin32, } from 'path-scurry';\nimport { Pattern } from './pattern.js';\nimport { GlobStream, GlobWalker } from './walker.js';\n// if no process global, just call it linux.\n// so we default to case-sensitive, / separators\nconst defaultPlatform = (typeof process === 'object' &&\n process &&\n typeof process.platform === 'string') ?\n process.platform\n : 'linux';\n/**\n * An object that can perform glob pattern traversals.\n */\nexport class Glob {\n absolute;\n cwd;\n root;\n dot;\n dotRelative;\n follow;\n ignore;\n magicalBraces;\n mark;\n matchBase;\n maxDepth;\n nobrace;\n nocase;\n nodir;\n noext;\n noglobstar;\n pattern;\n platform;\n realpath;\n scurry;\n stat;\n signal;\n windowsPathsNoEscape;\n withFileTypes;\n includeChildMatches;\n /**\n * The options provided to the constructor.\n */\n opts;\n /**\n * An array of parsed immutable {@link Pattern} objects.\n */\n patterns;\n /**\n * All options are stored as properties on the `Glob` object.\n *\n * See {@link GlobOptions} for full options descriptions.\n *\n * Note that a previous `Glob` object can be passed as the\n * `GlobOptions` to another `Glob` instantiation to re-use settings\n * and caches with a new pattern.\n *\n * Traversal functions can be called multiple times to run the walk\n * again.\n */\n constructor(pattern, opts) {\n /* c8 ignore start */\n if (!opts)\n throw new TypeError('glob options required');\n /* c8 ignore stop */\n this.withFileTypes = !!opts.withFileTypes;\n this.signal = opts.signal;\n this.follow = !!opts.follow;\n this.dot = !!opts.dot;\n this.dotRelative = !!opts.dotRelative;\n this.nodir = !!opts.nodir;\n this.mark = !!opts.mark;\n if (!opts.cwd) {\n this.cwd = '';\n }\n else if (opts.cwd instanceof URL || opts.cwd.startsWith('file://')) {\n opts.cwd = fileURLToPath(opts.cwd);\n }\n this.cwd = opts.cwd || '';\n this.root = opts.root;\n this.magicalBraces = !!opts.magicalBraces;\n this.nobrace = !!opts.nobrace;\n this.noext = !!opts.noext;\n this.realpath = !!opts.realpath;\n this.absolute = opts.absolute;\n this.includeChildMatches = opts.includeChildMatches !== false;\n this.noglobstar = !!opts.noglobstar;\n this.matchBase = !!opts.matchBase;\n this.maxDepth =\n typeof opts.maxDepth === 'number' ? opts.maxDepth : Infinity;\n this.stat = !!opts.stat;\n this.ignore = opts.ignore;\n if (this.withFileTypes && this.absolute !== undefined) {\n throw new Error('cannot set absolute and withFileTypes:true');\n }\n if (typeof pattern === 'string') {\n pattern = [pattern];\n }\n this.windowsPathsNoEscape =\n !!opts.windowsPathsNoEscape ||\n opts.allowWindowsEscape ===\n false;\n if (this.windowsPathsNoEscape) {\n pattern = pattern.map(p => p.replace(/\\\\/g, '/'));\n }\n if (this.matchBase) {\n if (opts.noglobstar) {\n throw new TypeError('base matching requires globstar');\n }\n pattern = pattern.map(p => (p.includes('/') ? p : `./**/${p}`));\n }\n this.pattern = pattern;\n this.platform = opts.platform || defaultPlatform;\n this.opts = { ...opts, platform: this.platform };\n if (opts.scurry) {\n this.scurry = opts.scurry;\n if (opts.nocase !== undefined &&\n opts.nocase !== opts.scurry.nocase) {\n throw new Error('nocase option contradicts provided scurry option');\n }\n }\n else {\n const Scurry = opts.platform === 'win32' ? PathScurryWin32\n : opts.platform === 'darwin' ? PathScurryDarwin\n : opts.platform ? PathScurryPosix\n : PathScurry;\n this.scurry = new Scurry(this.cwd, {\n nocase: opts.nocase,\n fs: opts.fs,\n });\n }\n this.nocase = this.scurry.nocase;\n // If you do nocase:true on a case-sensitive file system, then\n // we need to use regexps instead of strings for non-magic\n // path portions, because statting `aBc` won't return results\n // for the file `AbC` for example.\n const nocaseMagicOnly = this.platform === 'darwin' || this.platform === 'win32';\n const mmo = {\n // default nocase based on platform\n ...opts,\n dot: this.dot,\n matchBase: this.matchBase,\n nobrace: this.nobrace,\n nocase: this.nocase,\n nocaseMagicOnly,\n nocomment: true,\n noext: this.noext,\n nonegate: true,\n optimizationLevel: 2,\n platform: this.platform,\n windowsPathsNoEscape: this.windowsPathsNoEscape,\n debug: !!this.opts.debug,\n };\n const mms = this.pattern.map(p => new Minimatch(p, mmo));\n const [matchSet, globParts] = mms.reduce((set, m) => {\n set[0].push(...m.set);\n set[1].push(...m.globParts);\n return set;\n }, [[], []]);\n this.patterns = matchSet.map((set, i) => {\n const g = globParts[i];\n /* c8 ignore start */\n if (!g)\n throw new Error('invalid pattern object');\n /* c8 ignore stop */\n return new Pattern(set, g, 0, this.platform);\n });\n }\n async walk() {\n // Walkers always return array of Path objects, so we just have to\n // coerce them into the right shape. It will have already called\n // realpath() if the option was set to do so, so we know that's cached.\n // start out knowing the cwd, at least\n return [\n ...(await new GlobWalker(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth: this.maxDepth !== Infinity ?\n this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n includeChildMatches: this.includeChildMatches,\n }).walk()),\n ];\n }\n walkSync() {\n return [\n ...new GlobWalker(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth: this.maxDepth !== Infinity ?\n this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n includeChildMatches: this.includeChildMatches,\n }).walkSync(),\n ];\n }\n stream() {\n return new GlobStream(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth: this.maxDepth !== Infinity ?\n this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n includeChildMatches: this.includeChildMatches,\n }).stream();\n }\n streamSync() {\n return new GlobStream(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth: this.maxDepth !== Infinity ?\n this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n includeChildMatches: this.includeChildMatches,\n }).streamSync();\n }\n /**\n * Default sync iteration function. Returns a Generator that\n * iterates over the results.\n */\n iterateSync() {\n return this.streamSync()[Symbol.iterator]();\n }\n [Symbol.iterator]() {\n return this.iterateSync();\n }\n /**\n * Default async iteration function. Returns an AsyncGenerator that\n * iterates over the results.\n */\n iterate() {\n return this.stream()[Symbol.asyncIterator]();\n }\n [Symbol.asyncIterator]() {\n return this.iterate();\n }\n}\n//# sourceMappingURL=glob.js.map","import { Minimatch } from 'minimatch';\n/**\n * Return true if the patterns provided contain any magic glob characters,\n * given the options provided.\n *\n * Brace expansion is not considered \"magic\" unless the `magicalBraces` option\n * is set, as brace expansion just turns one string into an array of strings.\n * So a pattern like `'x{a,b}y'` would return `false`, because `'xay'` and\n * `'xby'` both do not contain any magic glob characters, and it's treated the\n * same as if you had called it on `['xay', 'xby']`. When `magicalBraces:true`\n * is in the options, brace expansion _is_ treated as a pattern having magic.\n */\nexport const hasMagic = (pattern, options = {}) => {\n if (!Array.isArray(pattern)) {\n pattern = [pattern];\n }\n for (const p of pattern) {\n if (new Minimatch(p, options).hasMagic())\n return true;\n }\n return false;\n};\n//# sourceMappingURL=has-magic.js.map","import { escape, unescape } from 'minimatch';\nimport { Glob } from './glob.js';\nimport { hasMagic } from './has-magic.js';\nexport { escape, unescape } from 'minimatch';\nexport { Glob } from './glob.js';\nexport { hasMagic } from './has-magic.js';\nexport { Ignore } from './ignore.js';\nexport function globStreamSync(pattern, options = {}) {\n return new Glob(pattern, options).streamSync();\n}\nexport function globStream(pattern, options = {}) {\n return new Glob(pattern, options).stream();\n}\nexport function globSync(pattern, options = {}) {\n return new Glob(pattern, options).walkSync();\n}\nasync function glob_(pattern, options = {}) {\n return new Glob(pattern, options).walk();\n}\nexport function globIterateSync(pattern, options = {}) {\n return new Glob(pattern, options).iterateSync();\n}\nexport function globIterate(pattern, options = {}) {\n return new Glob(pattern, options).iterate();\n}\n// aliases: glob.sync.stream() glob.stream.sync() glob.sync() etc\nexport const streamSync = globStreamSync;\nexport const stream = Object.assign(globStream, { sync: globStreamSync });\nexport const iterateSync = globIterateSync;\nexport const iterate = Object.assign(globIterate, {\n sync: globIterateSync,\n});\nexport const sync = Object.assign(globSync, {\n stream: globStreamSync,\n iterate: globIterateSync,\n});\nexport const glob = Object.assign(glob_, {\n glob: glob_,\n globSync,\n sync,\n globStream,\n stream,\n globStreamSync,\n streamSync,\n globIterate,\n iterate,\n globIterateSync,\n iterateSync,\n Glob,\n hasMagic,\n escape,\n unescape,\n});\nglob.glob = glob;\n//# sourceMappingURL=index.js.map","import { spawn } from \"node:child_process\";\nimport { err, fromThrowable, ok } from \"neverthrow\";\n\n//#region src/check.ts\n/**\n* agent-browserがインストールされているか確認する\n*\n* `npx agent-browser --help` を実行し、exitCode で判定する。\n* - exitCode 0 → ok(\"agent-browser is installed\")\n* - exitCode !== 0 または ENOENT → err({ type: 'not_installed', ... })\n*\n* @returns agent-browserがインストールされている場合は成功メッセージ、インストールされていない場合はエラー\n*/\nconst checkAgentBrowser = () => {\n\treturn new Promise((resolve) => {\n\t\tconst proc = spawn(\"npx\", [\"agent-browser\", \"--help\"], {\n\t\t\tstdio: [\n\t\t\t\t\"ignore\",\n\t\t\t\t\"pipe\",\n\t\t\t\t\"pipe\"\n\t\t\t],\n\t\t\tshell: true\n\t\t});\n\t\tproc.on(\"error\", (error) => {\n\t\t\tresolve(err({\n\t\t\t\ttype: \"not_installed\",\n\t\t\t\tmessage: `agent-browser is not installed: ${error.message}`\n\t\t\t}));\n\t\t});\n\t\tproc.on(\"close\", (exitCode) => {\n\t\t\tif (exitCode === 0) resolve(ok(\"agent-browser is installed\"));\n\t\t\telse resolve(err({\n\t\t\t\ttype: \"not_installed\",\n\t\t\t\tmessage: `agent-browser check failed with exit code ${exitCode}`\n\t\t\t}));\n\t\t});\n\t});\n};\n\n//#endregion\n//#region src/executor.ts\n/** デフォルトタイムアウト: 30秒 */\nconst DEFAULT_TIMEOUT_MS = 3e4;\nconst DEBUG = process.env.DEBUG_FLOW === \"1\";\nconst debugLog = (msg, ...args) => {\n\tif (DEBUG) process.stderr.write(`[executor] ${msg} ${args.map(String).join(\" \")}\\n`);\n};\n/**\n* agent-browserコマンドを実行する\n*\n* @param command - 実行するコマンド(例: \"open\", \"click\", \"snapshot\")\n* @param args - コマンド引数(例: [\"https://example.com\"])\n* @param options - 実行オプション\n* @returns 成功時: stdout文字列、失敗時: AgentBrowserError\n*/\nconst executeCommand = (command, args, options = {}) => {\n\tconst { sessionName, headed = false, timeoutMs = DEFAULT_TIMEOUT_MS, cwd } = options;\n\tdebugLog(`executeCommand: ${command} ${args.join(\" \")}`);\n\treturn new Promise((resolve) => {\n\t\tconst fullArgs = buildArgs(command, args, sessionName, headed);\n\t\tdebugLog(`fullArgs: npx agent-browser ${fullArgs.join(\" \")}`);\n\t\tdebugLog(\"spawning process...\");\n\t\tconst proc = spawn(\"npx\", [\"agent-browser\", ...fullArgs], {\n\t\t\tstdio: [\n\t\t\t\t\"ignore\",\n\t\t\t\t\"pipe\",\n\t\t\t\t\"pipe\"\n\t\t\t],\n\t\t\tshell: true,\n\t\t\tcwd\n\t\t});\n\t\tdebugLog(`process spawned, pid=${proc.pid}`);\n\t\tlet stdout = \"\";\n\t\tlet stderr = \"\";\n\t\tlet resolved = false;\n\t\t/**\n\t\t* 一度だけresolveを呼び出すラッパー\n\t\t* タイムアウト後のcloseイベントやerror後のcloseイベントで\n\t\t* 二重にresolveが呼ばれることを防ぐ\n\t\t*/\n\t\tconst resolveOnce = (result) => {\n\t\t\tif (resolved) return;\n\t\t\tresolved = true;\n\t\t\tclearTimeout(timeoutId);\n\t\t\tresolve(result);\n\t\t};\n\t\tproc.stdout?.on(\"data\", (data) => {\n\t\t\tstdout += data.toString();\n\t\t});\n\t\tproc.stderr?.on(\"data\", (data) => {\n\t\t\tstderr += data.toString();\n\t\t});\n\t\tconst timeoutId = setTimeout(() => {\n\t\t\tproc.kill(\"SIGTERM\");\n\t\t\tresolveOnce(err({\n\t\t\t\ttype: \"timeout\",\n\t\t\t\tcommand,\n\t\t\t\targs,\n\t\t\t\ttimeoutMs\n\t\t\t}));\n\t\t}, timeoutMs);\n\t\tproc.on(\"close\", (exitCode) => {\n\t\t\tdebugLog(`process closed, exitCode=${exitCode}, stdout.length=${stdout.length}`);\n\t\t\tif (exitCode === 0) resolveOnce(ok(stdout));\n\t\t\telse {\n\t\t\t\tconst errorMessage = extractErrorMessage(stdout);\n\t\t\t\tdebugLog(`command failed, errorMessage=${errorMessage}, stderr=${stderr}`);\n\t\t\t\tresolveOnce(err({\n\t\t\t\t\ttype: \"command_failed\",\n\t\t\t\t\tmessage: errorMessage || `Command failed: ${command} ${args.join(\" \")}`,\n\t\t\t\t\tcommand,\n\t\t\t\t\targs,\n\t\t\t\t\texitCode: exitCode ?? 1,\n\t\t\t\t\tstderr,\n\t\t\t\t\terrorMessage\n\t\t\t\t}));\n\t\t\t}\n\t\t});\n\t\tproc.on(\"error\", (error) => {\n\t\t\tdebugLog(`process error: ${error.message}`);\n\t\t\tresolveOnce(err({\n\t\t\t\ttype: \"not_installed\",\n\t\t\t\tmessage: `Failed to spawn agent-browser: ${error.message}`\n\t\t\t}));\n\t\t});\n\t});\n};\n/**\n* コマンドライン引数を構築する\n*/\nconst buildArgs = (command, args, sessionName, headed) => {\n\tconst result = [command, ...args];\n\tif (sessionName !== void 0) result.push(\"--session\", sessionName);\n\tif (headed) result.push(\"--headed\");\n\treturn result;\n};\n/**\n* オブジェクトかどうかを判定する型ガード\n*/\nconst isRecord$1 = (value) => {\n\treturn typeof value === \"object\" && value !== null;\n};\n/**\n* JSON出力からエラーメッセージを抽出する\n* パースに失敗した場合はnullを返す\n*/\nconst extractErrorMessage = (stdout) => {\n\ttry {\n\t\tconst parsed = JSON.parse(stdout);\n\t\tif (isRecord$1(parsed)) {\n\t\t\tif (typeof parsed.error === \"string\") return parsed.error;\n\t\t\tif (parsed.error === null) return null;\n\t\t}\n\t\treturn null;\n\t} catch {\n\t\treturn null;\n\t}\n};\n\n//#endregion\n//#region src/parser.ts\n/**\n* オブジェクトかどうかを判定する型ガード\n*/\nconst isRecord = (value) => {\n\treturn typeof value === \"object\" && value !== null;\n};\n/**\n* parse_error型のエラーかどうかを判定する型ガード\n*/\nconst isParseError = (e) => {\n\treturn e.type === \"parse_error\";\n};\n/**\n* JSON.parseをResult型でラップ\n* JSON.parseの戻り値はunknown型として扱う\n*/\nconst safeJsonParse = fromThrowable((text) => JSON.parse(text), (error) => ({\n\ttype: \"parse_error\",\n\tmessage: error instanceof Error ? error.message : \"Unknown parse error\",\n\trawOutput: \"\"\n}));\n/**\n* AgentBrowserJsonOutputの型ガード\n*/\nconst isAgentBrowserJsonOutput = (value) => {\n\tif (!isRecord(value)) return false;\n\treturn typeof value.success === \"boolean\" && \"data\" in value && \"error\" in value;\n};\n/**\n* agent-browserの--json出力をパースする\n*\n* @param rawOutput - executeCommandの戻り値(stdout文字列)\n* @returns 成功時: パース済みオブジェクト(dataはunknown型)、失敗時: AgentBrowserError\n*/\nconst parseJsonOutput = (rawOutput) => {\n\treturn safeJsonParse(rawOutput).mapErr((e) => {\n\t\treturn {\n\t\t\ttype: \"parse_error\",\n\t\t\tmessage: isParseError(e) ? e.message : \"Unknown parse error\",\n\t\t\trawOutput\n\t\t};\n\t}).andThen((parsed) => {\n\t\tif (!isAgentBrowserJsonOutput(parsed)) return err({\n\t\t\ttype: \"parse_error\",\n\t\t\tmessage: \"Invalid JSON structure: missing success, data, or error fields\",\n\t\t\trawOutput\n\t\t});\n\t\treturn ok(parsed);\n\t});\n};\n/**\n* snapshot --json 出力から参照マップを抽出する\n*\n* @param jsonOutput - parseJsonOutputの戻り値\n* @returns 成功時: SnapshotRefs、失敗時: AgentBrowserError\n*/\nconst parseSnapshotRefs = (jsonOutput) => {\n\tif (!jsonOutput.success) return err({\n\t\ttype: \"parse_error\",\n\t\tmessage: `Snapshot failed: ${jsonOutput.error}`,\n\t\trawOutput: JSON.stringify(jsonOutput)\n\t});\n\tconst data = jsonOutput.data;\n\tif (!isRecord(data)) return err({\n\t\ttype: \"parse_error\",\n\t\tmessage: \"Invalid snapshot output: data is not an object\",\n\t\trawOutput: JSON.stringify(jsonOutput)\n\t});\n\tif (!isRecord(data.refs)) return err({\n\t\ttype: \"parse_error\",\n\t\tmessage: \"Invalid snapshot output: missing refs field\",\n\t\trawOutput: JSON.stringify(jsonOutput)\n\t});\n\tconst refs = data.refs;\n\tconst validatedRefs = {};\n\tfor (const [key, value] of Object.entries(refs)) {\n\t\tif (!isSnapshotRef(value)) return err({\n\t\t\ttype: \"parse_error\",\n\t\t\tmessage: `Invalid ref entry \"${key}\": missing name or role`,\n\t\t\trawOutput: JSON.stringify(jsonOutput)\n\t\t});\n\t\tvalidatedRefs[key] = value;\n\t}\n\treturn ok(validatedRefs);\n};\n/**\n* SnapshotRefの型ガード\n*/\nconst isSnapshotRef = (value) => {\n\tif (!isRecord(value)) return false;\n\treturn typeof value.name === \"string\" && typeof value.role === \"string\";\n};\n\n//#endregion\n//#region src/session.ts\n/**\n* agent-browserのセッションをクローズする\n*\n* 指定されたセッション名のブラウザセッションを終了します。\n* セッションが存在しない場合や、クローズに失敗した場合はエラーを返します。\n*\n* @param sessionName - クローズするセッションの名前\n* @returns 成功時: void、失敗時: AgentBrowserError\n*/\nconst closeSession = async (sessionName) => {\n\treturn (await executeCommand(\"close\", [], { sessionName })).map(() => void 0);\n};\n\n//#endregion\nexport { checkAgentBrowser, closeSession, executeCommand, parseJsonOutput, parseSnapshotRefs };\n//# sourceMappingURL=index.mjs.map","'use strict';\n\nconst ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case MAP:\n case SEQ:\n return true;\n }\n return false;\n}\nfunction isNode(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case ALIAS:\n case MAP:\n case SCALAR:\n case SEQ:\n return true;\n }\n return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexports.ALIAS = ALIAS;\nexports.DOC = DOC;\nexports.MAP = MAP;\nexports.NODE_TYPE = NODE_TYPE;\nexports.PAIR = PAIR;\nexports.SCALAR = SCALAR;\nexports.SEQ = SEQ;\nexports.hasAnchor = hasAnchor;\nexports.isAlias = isAlias;\nexports.isCollection = isCollection;\nexports.isDocument = isDocument;\nexports.isMap = isMap;\nexports.isNode = isNode;\nexports.isPair = isPair;\nexports.isScalar = isScalar;\nexports.isSeq = isSeq;\n","'use strict';\n\nvar identity = require('./nodes/identity.js');\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n const ctrl = callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visit_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = visit_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = visit_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = visit_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `Promise`: Must resolve to one of the following values\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n const ctrl = await callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visitAsync_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = await visitAsync_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = await visitAsync_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = await visitAsync_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\nfunction initVisitor(visitor) {\n if (typeof visitor === 'object' &&\n (visitor.Collection || visitor.Node || visitor.Value)) {\n return Object.assign({\n Alias: visitor.Node,\n Map: visitor.Node,\n Scalar: visitor.Node,\n Seq: visitor.Node\n }, visitor.Value && {\n Map: visitor.Value,\n Scalar: visitor.Value,\n Seq: visitor.Value\n }, visitor.Collection && {\n Map: visitor.Collection,\n Seq: visitor.Collection\n }, visitor);\n }\n return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n if (typeof visitor === 'function')\n return visitor(key, node, path);\n if (identity.isMap(node))\n return visitor.Map?.(key, node, path);\n if (identity.isSeq(node))\n return visitor.Seq?.(key, node, path);\n if (identity.isPair(node))\n return visitor.Pair?.(key, node, path);\n if (identity.isScalar(node))\n return visitor.Scalar?.(key, node, path);\n if (identity.isAlias(node))\n return visitor.Alias?.(key, node, path);\n return undefined;\n}\nfunction replaceNode(key, path, node) {\n const parent = path[path.length - 1];\n if (identity.isCollection(parent)) {\n parent.items[key] = node;\n }\n else if (identity.isPair(parent)) {\n if (key === 'key')\n parent.key = node;\n else\n parent.value = node;\n }\n else if (identity.isDocument(parent)) {\n parent.contents = node;\n }\n else {\n const pt = identity.isAlias(parent) ? 'alias' : 'scalar';\n throw new Error(`Cannot replace node with ${pt} parent`);\n }\n}\n\nexports.visit = visit;\nexports.visitAsync = visitAsync;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar visit = require('../visit.js');\n\nconst escapeChars = {\n '!': '%21',\n ',': '%2C',\n '[': '%5B',\n ']': '%5D',\n '{': '%7B',\n '}': '%7D'\n};\nconst escapeTagName = (tn) => tn.replace(/[!,[\\]{}]/g, ch => escapeChars[ch]);\nclass Directives {\n constructor(yaml, tags) {\n /**\n * The directives-end/doc-start marker `---`. If `null`, a marker may still be\n * included in the document's stringified representation.\n */\n this.docStart = null;\n /** The doc-end marker `...`. */\n this.docEnd = false;\n this.yaml = Object.assign({}, Directives.defaultYaml, yaml);\n this.tags = Object.assign({}, Directives.defaultTags, tags);\n }\n clone() {\n const copy = new Directives(this.yaml, this.tags);\n copy.docStart = this.docStart;\n return copy;\n }\n /**\n * During parsing, get a Directives instance for the current document and\n * update the stream state according to the current version's spec.\n */\n atDocument() {\n const res = new Directives(this.yaml, this.tags);\n switch (this.yaml.version) {\n case '1.1':\n this.atNextDocument = true;\n break;\n case '1.2':\n this.atNextDocument = false;\n this.yaml = {\n explicit: Directives.defaultYaml.explicit,\n version: '1.2'\n };\n this.tags = Object.assign({}, Directives.defaultTags);\n break;\n }\n return res;\n }\n /**\n * @param onError - May be called even if the action was successful\n * @returns `true` on success\n */\n add(line, onError) {\n if (this.atNextDocument) {\n this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };\n this.tags = Object.assign({}, Directives.defaultTags);\n this.atNextDocument = false;\n }\n const parts = line.trim().split(/[ \\t]+/);\n const name = parts.shift();\n switch (name) {\n case '%TAG': {\n if (parts.length !== 2) {\n onError(0, '%TAG directive should contain exactly two parts');\n if (parts.length < 2)\n return false;\n }\n const [handle, prefix] = parts;\n this.tags[handle] = prefix;\n return true;\n }\n case '%YAML': {\n this.yaml.explicit = true;\n if (parts.length !== 1) {\n onError(0, '%YAML directive should contain exactly one part');\n return false;\n }\n const [version] = parts;\n if (version === '1.1' || version === '1.2') {\n this.yaml.version = version;\n return true;\n }\n else {\n const isValid = /^\\d+\\.\\d+$/.test(version);\n onError(6, `Unsupported YAML version ${version}`, isValid);\n return false;\n }\n }\n default:\n onError(0, `Unknown directive ${name}`, true);\n return false;\n }\n }\n /**\n * Resolves a tag, matching handles to those defined in %TAG directives.\n *\n * @returns Resolved tag, which may also be the non-specific tag `'!'` or a\n * `'!local'` tag, or `null` if unresolvable.\n */\n tagName(source, onError) {\n if (source === '!')\n return '!'; // non-specific tag\n if (source[0] !== '!') {\n onError(`Not a valid tag: ${source}`);\n return null;\n }\n if (source[1] === '<') {\n const verbatim = source.slice(2, -1);\n if (verbatim === '!' || verbatim === '!!') {\n onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);\n return null;\n }\n if (source[source.length - 1] !== '>')\n onError('Verbatim tags must end with a >');\n return verbatim;\n }\n const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);\n if (!suffix)\n onError(`The ${source} tag has no suffix`);\n const prefix = this.tags[handle];\n if (prefix) {\n try {\n return prefix + decodeURIComponent(suffix);\n }\n catch (error) {\n onError(String(error));\n return null;\n }\n }\n if (handle === '!')\n return source; // local tag\n onError(`Could not resolve tag: ${source}`);\n return null;\n }\n /**\n * Given a fully resolved tag, returns its printable string form,\n * taking into account current tag prefixes and defaults.\n */\n tagString(tag) {\n for (const [handle, prefix] of Object.entries(this.tags)) {\n if (tag.startsWith(prefix))\n return handle + escapeTagName(tag.substring(prefix.length));\n }\n return tag[0] === '!' ? tag : `!<${tag}>`;\n }\n toString(doc) {\n const lines = this.yaml.explicit\n ? [`%YAML ${this.yaml.version || '1.2'}`]\n : [];\n const tagEntries = Object.entries(this.tags);\n let tagNames;\n if (doc && tagEntries.length > 0 && identity.isNode(doc.contents)) {\n const tags = {};\n visit.visit(doc.contents, (_key, node) => {\n if (identity.isNode(node) && node.tag)\n tags[node.tag] = true;\n });\n tagNames = Object.keys(tags);\n }\n else\n tagNames = [];\n for (const [handle, prefix] of tagEntries) {\n if (handle === '!!' && prefix === 'tag:yaml.org,2002:')\n continue;\n if (!doc || tagNames.some(tn => tn.startsWith(prefix)))\n lines.push(`%TAG ${handle} ${prefix}`);\n }\n return lines.join('\\n');\n }\n}\nDirectives.defaultYaml = { explicit: false, version: '1.2' };\nDirectives.defaultTags = { '!!': 'tag:yaml.org,2002:' };\n\nexports.Directives = Directives;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar visit = require('../visit.js');\n\n/**\n * Verify that the input string is a valid anchor.\n *\n * Will throw on errors.\n */\nfunction anchorIsValid(anchor) {\n if (/[\\x00-\\x19\\s,[\\]{}]/.test(anchor)) {\n const sa = JSON.stringify(anchor);\n const msg = `Anchor must not contain whitespace or control characters: ${sa}`;\n throw new Error(msg);\n }\n return true;\n}\nfunction anchorNames(root) {\n const anchors = new Set();\n visit.visit(root, {\n Value(_key, node) {\n if (node.anchor)\n anchors.add(node.anchor);\n }\n });\n return anchors;\n}\n/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */\nfunction findNewAnchor(prefix, exclude) {\n for (let i = 1; true; ++i) {\n const name = `${prefix}${i}`;\n if (!exclude.has(name))\n return name;\n }\n}\nfunction createNodeAnchors(doc, prefix) {\n const aliasObjects = [];\n const sourceObjects = new Map();\n let prevAnchors = null;\n return {\n onAnchor: (source) => {\n aliasObjects.push(source);\n prevAnchors ?? (prevAnchors = anchorNames(doc));\n const anchor = findNewAnchor(prefix, prevAnchors);\n prevAnchors.add(anchor);\n return anchor;\n },\n /**\n * With circular references, the source node is only resolved after all\n * of its child nodes are. This is why anchors are set only after all of\n * the nodes have been created.\n */\n setAnchors: () => {\n for (const source of aliasObjects) {\n const ref = sourceObjects.get(source);\n if (typeof ref === 'object' &&\n ref.anchor &&\n (identity.isScalar(ref.node) || identity.isCollection(ref.node))) {\n ref.node.anchor = ref.anchor;\n }\n else {\n const error = new Error('Failed to resolve repeated object (this should not happen)');\n error.source = source;\n throw error;\n }\n }\n },\n sourceObjects\n };\n}\n\nexports.anchorIsValid = anchorIsValid;\nexports.anchorNames = anchorNames;\nexports.createNodeAnchors = createNodeAnchors;\nexports.findNewAnchor = findNewAnchor;\n","'use strict';\n\n/**\n * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,\n * in section 24.5.1.1 \"Runtime Semantics: InternalizeJSONProperty\" of the\n * 2021 edition: https://tc39.es/ecma262/#sec-json.parse\n *\n * Includes extensions for handling Map and Set objects.\n */\nfunction applyReviver(reviver, obj, key, val) {\n if (val && typeof val === 'object') {\n if (Array.isArray(val)) {\n for (let i = 0, len = val.length; i < len; ++i) {\n const v0 = val[i];\n const v1 = applyReviver(reviver, val, String(i), v0);\n // eslint-disable-next-line @typescript-eslint/no-array-delete\n if (v1 === undefined)\n delete val[i];\n else if (v1 !== v0)\n val[i] = v1;\n }\n }\n else if (val instanceof Map) {\n for (const k of Array.from(val.keys())) {\n const v0 = val.get(k);\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n val.delete(k);\n else if (v1 !== v0)\n val.set(k, v1);\n }\n }\n else if (val instanceof Set) {\n for (const v0 of Array.from(val)) {\n const v1 = applyReviver(reviver, val, v0, v0);\n if (v1 === undefined)\n val.delete(v0);\n else if (v1 !== v0) {\n val.delete(v0);\n val.add(v1);\n }\n }\n }\n else {\n for (const [k, v0] of Object.entries(val)) {\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n delete val[k];\n else if (v1 !== v0)\n val[k] = v1;\n }\n }\n }\n return reviver.call(obj, key, val);\n}\n\nexports.applyReviver = applyReviver;\n","'use strict';\n\nvar identity = require('./identity.js');\n\n/**\n * Recursively convert any node or its contents to native JavaScript\n *\n * @param value - The input value\n * @param arg - If `value` defines a `toJSON()` method, use this\n * as its first argument\n * @param ctx - Conversion context, originally set in Document#toJS(). If\n * `{ keep: true }` is not set, output should be suitable for JSON\n * stringification.\n */\nfunction toJS(value, arg, ctx) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n if (Array.isArray(value))\n return value.map((v, i) => toJS(v, String(i), ctx));\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n if (!ctx || !identity.hasAnchor(value))\n return value.toJSON(arg, ctx);\n const data = { aliasCount: 0, count: 1, res: undefined };\n ctx.anchors.set(value, data);\n ctx.onCreate = res => {\n data.res = res;\n delete ctx.onCreate;\n };\n const res = value.toJSON(arg, ctx);\n if (ctx.onCreate)\n ctx.onCreate(res);\n return res;\n }\n if (typeof value === 'bigint' && !ctx?.keep)\n return Number(value);\n return value;\n}\n\nexports.toJS = toJS;\n","'use strict';\n\nvar applyReviver = require('../doc/applyReviver.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nclass NodeBase {\n constructor(type) {\n Object.defineProperty(this, identity.NODE_TYPE, { value: type });\n }\n /** Create a copy of this node. */\n clone() {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** A plain JavaScript representation of this node. */\n toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n if (!identity.isDocument(doc))\n throw new TypeError('A document argument is required');\n const ctx = {\n anchors: new Map(),\n doc,\n keep: true,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS.toJS(this, '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n}\n\nexports.NodeBase = NodeBase;\n","'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar visit = require('../visit.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nclass Alias extends Node.NodeBase {\n constructor(source) {\n super(identity.ALIAS);\n this.source = source;\n Object.defineProperty(this, 'tag', {\n set() {\n throw new Error('Alias nodes cannot have tags');\n }\n });\n }\n /**\n * Resolve the value of this alias within `doc`, finding the last\n * instance of the `source` anchor before this node.\n */\n resolve(doc, ctx) {\n let nodes;\n if (ctx?.aliasResolveCache) {\n nodes = ctx.aliasResolveCache;\n }\n else {\n nodes = [];\n visit.visit(doc, {\n Node: (_key, node) => {\n if (identity.isAlias(node) || identity.hasAnchor(node))\n nodes.push(node);\n }\n });\n if (ctx)\n ctx.aliasResolveCache = nodes;\n }\n let found = undefined;\n for (const node of nodes) {\n if (node === this)\n break;\n if (node.anchor === this.source)\n found = node;\n }\n return found;\n }\n toJSON(_arg, ctx) {\n if (!ctx)\n return { source: this.source };\n const { anchors, doc, maxAliasCount } = ctx;\n const source = this.resolve(doc, ctx);\n if (!source) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new ReferenceError(msg);\n }\n let data = anchors.get(source);\n if (!data) {\n // Resolve anchors for Node.prototype.toJS()\n toJS.toJS(source, null, ctx);\n data = anchors.get(source);\n }\n /* istanbul ignore if */\n if (data?.res === undefined) {\n const msg = 'This should not happen: Alias anchor was not resolved?';\n throw new ReferenceError(msg);\n }\n if (maxAliasCount >= 0) {\n data.count += 1;\n if (data.aliasCount === 0)\n data.aliasCount = getAliasCount(doc, source, anchors);\n if (data.count * data.aliasCount > maxAliasCount) {\n const msg = 'Excessive alias count indicates a resource exhaustion attack';\n throw new ReferenceError(msg);\n }\n }\n return data.res;\n }\n toString(ctx, _onComment, _onChompKeep) {\n const src = `*${this.source}`;\n if (ctx) {\n anchors.anchorIsValid(this.source);\n if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new Error(msg);\n }\n if (ctx.implicitKey)\n return `${src} `;\n }\n return src;\n }\n}\nfunction getAliasCount(doc, node, anchors) {\n if (identity.isAlias(node)) {\n const source = node.resolve(doc);\n const anchor = anchors && source && anchors.get(source);\n return anchor ? anchor.count * anchor.aliasCount : 0;\n }\n else if (identity.isCollection(node)) {\n let count = 0;\n for (const item of node.items) {\n const c = getAliasCount(doc, item, anchors);\n if (c > count)\n count = c;\n }\n return count;\n }\n else if (identity.isPair(node)) {\n const kc = getAliasCount(doc, node.key, anchors);\n const vc = getAliasCount(doc, node.value, anchors);\n return Math.max(kc, vc);\n }\n return 1;\n}\n\nexports.Alias = Alias;\n","'use strict';\n\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nconst isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');\nclass Scalar extends Node.NodeBase {\n constructor(value) {\n super(identity.SCALAR);\n this.value = value;\n }\n toJSON(arg, ctx) {\n return ctx?.keep ? this.value : toJS.toJS(this.value, arg, ctx);\n }\n toString() {\n return String(this.value);\n }\n}\nScalar.BLOCK_FOLDED = 'BLOCK_FOLDED';\nScalar.BLOCK_LITERAL = 'BLOCK_LITERAL';\nScalar.PLAIN = 'PLAIN';\nScalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';\nScalar.QUOTE_SINGLE = 'QUOTE_SINGLE';\n\nexports.Scalar = Scalar;\nexports.isScalarValue = isScalarValue;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\n\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nfunction findTagObject(value, tagName, tags) {\n if (tagName) {\n const match = tags.filter(t => t.tag === tagName);\n const tagObj = match.find(t => !t.format) ?? match[0];\n if (!tagObj)\n throw new Error(`Tag ${tagName} not found`);\n return tagObj;\n }\n return tags.find(t => t.identify?.(value) && !t.format);\n}\nfunction createNode(value, tagName, ctx) {\n if (identity.isDocument(value))\n value = value.contents;\n if (identity.isNode(value))\n return value;\n if (identity.isPair(value)) {\n const map = ctx.schema[identity.MAP].createNode?.(ctx.schema, null, ctx);\n map.items.push(value);\n return map;\n }\n if (value instanceof String ||\n value instanceof Number ||\n value instanceof Boolean ||\n (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere\n ) {\n // https://tc39.es/ecma262/#sec-serializejsonproperty\n value = value.valueOf();\n }\n const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;\n // Detect duplicate references to the same object & use Alias nodes for all\n // after first. The `ref` wrapper allows for circular references to resolve.\n let ref = undefined;\n if (aliasDuplicateObjects && value && typeof value === 'object') {\n ref = sourceObjects.get(value);\n if (ref) {\n ref.anchor ?? (ref.anchor = onAnchor(value));\n return new Alias.Alias(ref.anchor);\n }\n else {\n ref = { anchor: null, node: null };\n sourceObjects.set(value, ref);\n }\n }\n if (tagName?.startsWith('!!'))\n tagName = defaultTagPrefix + tagName.slice(2);\n let tagObj = findTagObject(value, tagName, schema.tags);\n if (!tagObj) {\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n value = value.toJSON();\n }\n if (!value || typeof value !== 'object') {\n const node = new Scalar.Scalar(value);\n if (ref)\n ref.node = node;\n return node;\n }\n tagObj =\n value instanceof Map\n ? schema[identity.MAP]\n : Symbol.iterator in Object(value)\n ? schema[identity.SEQ]\n : schema[identity.MAP];\n }\n if (onTagObj) {\n onTagObj(tagObj);\n delete ctx.onTagObj;\n }\n const node = tagObj?.createNode\n ? tagObj.createNode(ctx.schema, value, ctx)\n : typeof tagObj?.nodeClass?.from === 'function'\n ? tagObj.nodeClass.from(ctx.schema, value, ctx)\n : new Scalar.Scalar(value);\n if (tagName)\n node.tag = tagName;\n else if (!tagObj.default)\n node.tag = tagObj.tag;\n if (ref)\n ref.node = node;\n return node;\n}\n\nexports.createNode = createNode;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\n\nfunction collectionFromPath(schema, path, value) {\n let v = value;\n for (let i = path.length - 1; i >= 0; --i) {\n const k = path[i];\n if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {\n const a = [];\n a[k] = v;\n v = a;\n }\n else {\n v = new Map([[k, v]]);\n }\n }\n return createNode.createNode(v, undefined, {\n aliasDuplicateObjects: false,\n keepUndefined: false,\n onAnchor: () => {\n throw new Error('This should not happen, please report a bug.');\n },\n schema,\n sourceObjects: new Map()\n });\n}\n// Type guard is intentionally a little wrong so as to be more useful,\n// as it does not cover untypable empty non-string iterables (e.g. []).\nconst isEmptyPath = (path) => path == null ||\n (typeof path === 'object' && !!path[Symbol.iterator]().next().done);\nclass Collection extends Node.NodeBase {\n constructor(type, schema) {\n super(type);\n Object.defineProperty(this, 'schema', {\n value: schema,\n configurable: true,\n enumerable: false,\n writable: true\n });\n }\n /**\n * Create a copy of this collection.\n *\n * @param schema - If defined, overwrites the original's schema\n */\n clone(schema) {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (schema)\n copy.schema = schema;\n copy.items = copy.items.map(it => identity.isNode(it) || identity.isPair(it) ? it.clone(schema) : it);\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /**\n * Adds a value to the collection. For `!!map` and `!!omap` the value must\n * be a Pair instance or a `{ key, value }` object, which may not have a key\n * that already exists in the map.\n */\n addIn(path, value) {\n if (isEmptyPath(path))\n this.add(value);\n else {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (identity.isCollection(node))\n node.addIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n /**\n * Removes a value from the collection.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.delete(key);\n const node = this.get(key, true);\n if (identity.isCollection(node))\n return node.deleteIn(rest);\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (rest.length === 0)\n return !keepScalar && identity.isScalar(node) ? node.value : node;\n else\n return identity.isCollection(node) ? node.getIn(rest, keepScalar) : undefined;\n }\n hasAllNullValues(allowScalar) {\n return this.items.every(node => {\n if (!identity.isPair(node))\n return false;\n const n = node.value;\n return (n == null ||\n (allowScalar &&\n identity.isScalar(n) &&\n n.value == null &&\n !n.commentBefore &&\n !n.comment &&\n !n.tag));\n });\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n */\n hasIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.has(key);\n const node = this.get(key, true);\n return identity.isCollection(node) ? node.hasIn(rest) : false;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n const [key, ...rest] = path;\n if (rest.length === 0) {\n this.set(key, value);\n }\n else {\n const node = this.get(key, true);\n if (identity.isCollection(node))\n node.setIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n}\n\nexports.Collection = Collection;\nexports.collectionFromPath = collectionFromPath;\nexports.isEmptyPath = isEmptyPath;\n","'use strict';\n\n/**\n * Stringifies a comment.\n *\n * Empty comment lines are left empty,\n * lines consisting of a single space are replaced by `#`,\n * and all other lines are prefixed with a `#`.\n */\nconst stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');\nfunction indentComment(comment, indent) {\n if (/^\\n+$/.test(comment))\n return comment.substring(1);\n return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;\n}\nconst lineComment = (str, indent, comment) => str.endsWith('\\n')\n ? indentComment(comment, indent)\n : comment.includes('\\n')\n ? '\\n' + indentComment(comment, indent)\n : (str.endsWith(' ') ? '' : ' ') + comment;\n\nexports.indentComment = indentComment;\nexports.lineComment = lineComment;\nexports.stringifyComment = stringifyComment;\n","'use strict';\n\nconst FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted';\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n */\nfunction foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {\n if (!lineWidth || lineWidth < 0)\n return text;\n if (lineWidth < minContentWidth)\n minContentWidth = 0;\n const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n if (text.length <= endStep)\n return text;\n const folds = [];\n const escapedFolds = {};\n let end = lineWidth - indent.length;\n if (typeof indentAtStart === 'number') {\n if (indentAtStart > lineWidth - Math.max(2, minContentWidth))\n folds.push(0);\n else\n end = lineWidth - indentAtStart;\n }\n let split = undefined;\n let prev = undefined;\n let overflow = false;\n let i = -1;\n let escStart = -1;\n let escEnd = -1;\n if (mode === FOLD_BLOCK) {\n i = consumeMoreIndentedLines(text, i, indent.length);\n if (i !== -1)\n end = i + endStep;\n }\n for (let ch; (ch = text[(i += 1)]);) {\n if (mode === FOLD_QUOTED && ch === '\\\\') {\n escStart = i;\n switch (text[i + 1]) {\n case 'x':\n i += 3;\n break;\n case 'u':\n i += 5;\n break;\n case 'U':\n i += 9;\n break;\n default:\n i += 1;\n }\n escEnd = i;\n }\n if (ch === '\\n') {\n if (mode === FOLD_BLOCK)\n i = consumeMoreIndentedLines(text, i, indent.length);\n end = i + indent.length + endStep;\n split = undefined;\n }\n else {\n if (ch === ' ' &&\n prev &&\n prev !== ' ' &&\n prev !== '\\n' &&\n prev !== '\\t') {\n // space surrounded by non-space can be replaced with newline + indent\n const next = text[i + 1];\n if (next && next !== ' ' && next !== '\\n' && next !== '\\t')\n split = i;\n }\n if (i >= end) {\n if (split) {\n folds.push(split);\n end = split + endStep;\n split = undefined;\n }\n else if (mode === FOLD_QUOTED) {\n // white-space collected at end may stretch past lineWidth\n while (prev === ' ' || prev === '\\t') {\n prev = ch;\n ch = text[(i += 1)];\n overflow = true;\n }\n // Account for newline escape, but don't break preceding escape\n const j = i > escEnd + 1 ? i - 2 : escStart - 1;\n // Bail out if lineWidth & minContentWidth are shorter than an escape string\n if (escapedFolds[j])\n return text;\n folds.push(j);\n escapedFolds[j] = true;\n end = j + endStep;\n split = undefined;\n }\n else {\n overflow = true;\n }\n }\n }\n prev = ch;\n }\n if (overflow && onOverflow)\n onOverflow();\n if (folds.length === 0)\n return text;\n if (onFold)\n onFold();\n let res = text.slice(0, folds[0]);\n for (let i = 0; i < folds.length; ++i) {\n const fold = folds[i];\n const end = folds[i + 1] || text.length;\n if (fold === 0)\n res = `\\n${indent}${text.slice(0, end)}`;\n else {\n if (mode === FOLD_QUOTED && escapedFolds[fold])\n res += `${text[fold]}\\\\`;\n res += `\\n${indent}${text.slice(fold + 1, end)}`;\n }\n }\n return res;\n}\n/**\n * Presumes `i + 1` is at the start of a line\n * @returns index of last newline in more-indented block\n */\nfunction consumeMoreIndentedLines(text, i, indent) {\n let end = i;\n let start = i + 1;\n let ch = text[start];\n while (ch === ' ' || ch === '\\t') {\n if (i < start + indent) {\n ch = text[++i];\n }\n else {\n do {\n ch = text[++i];\n } while (ch && ch !== '\\n');\n end = i;\n start = i + 1;\n ch = text[start];\n }\n }\n return end;\n}\n\nexports.FOLD_BLOCK = FOLD_BLOCK;\nexports.FOLD_FLOW = FOLD_FLOW;\nexports.FOLD_QUOTED = FOLD_QUOTED;\nexports.foldFlowLines = foldFlowLines;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar foldFlowLines = require('./foldFlowLines.js');\n\nconst getFoldOptions = (ctx, isBlock) => ({\n indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,\n lineWidth: ctx.options.lineWidth,\n minContentWidth: ctx.options.minContentWidth\n});\n// Also checks for lines starting with %, as parsing the output as YAML 1.1 will\n// presume that's starting a new document.\nconst containsDocumentMarker = (str) => /^(%|---|\\.\\.\\.)/m.test(str);\nfunction lineLengthOverLimit(str, lineWidth, indentLength) {\n if (!lineWidth || lineWidth < 0)\n return false;\n const limit = lineWidth - indentLength;\n const strLen = str.length;\n if (strLen <= limit)\n return false;\n for (let i = 0, start = 0; i < strLen; ++i) {\n if (str[i] === '\\n') {\n if (i - start > limit)\n return true;\n start = i + 1;\n if (strLen - start <= limit)\n return false;\n }\n }\n return true;\n}\nfunction doubleQuotedString(value, ctx) {\n const json = JSON.stringify(value);\n if (ctx.options.doubleQuotedAsJSON)\n return json;\n const { implicitKey } = ctx;\n const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n let str = '';\n let start = 0;\n for (let i = 0, ch = json[i]; ch; ch = json[++i]) {\n if (ch === ' ' && json[i + 1] === '\\\\' && json[i + 2] === 'n') {\n // space before newline needs to be escaped to not be folded\n str += json.slice(start, i) + '\\\\ ';\n i += 1;\n start = i;\n ch = '\\\\';\n }\n if (ch === '\\\\')\n switch (json[i + 1]) {\n case 'u':\n {\n str += json.slice(start, i);\n const code = json.substr(i + 2, 4);\n switch (code) {\n case '0000':\n str += '\\\\0';\n break;\n case '0007':\n str += '\\\\a';\n break;\n case '000b':\n str += '\\\\v';\n break;\n case '001b':\n str += '\\\\e';\n break;\n case '0085':\n str += '\\\\N';\n break;\n case '00a0':\n str += '\\\\_';\n break;\n case '2028':\n str += '\\\\L';\n break;\n case '2029':\n str += '\\\\P';\n break;\n default:\n if (code.substr(0, 2) === '00')\n str += '\\\\x' + code.substr(2);\n else\n str += json.substr(i, 6);\n }\n i += 5;\n start = i + 1;\n }\n break;\n case 'n':\n if (implicitKey ||\n json[i + 2] === '\"' ||\n json.length < minMultiLineLength) {\n i += 1;\n }\n else {\n // folding will eat first newline\n str += json.slice(start, i) + '\\n\\n';\n while (json[i + 2] === '\\\\' &&\n json[i + 3] === 'n' &&\n json[i + 4] !== '\"') {\n str += '\\n';\n i += 2;\n }\n str += indent;\n // space after newline needs to be escaped to not be folded\n if (json[i + 2] === ' ')\n str += '\\\\';\n i += 1;\n start = i + 1;\n }\n break;\n default:\n i += 1;\n }\n }\n str = start ? str + json.slice(start) : json;\n return implicitKey\n ? str\n : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_QUOTED, getFoldOptions(ctx, false));\n}\nfunction singleQuotedString(value, ctx) {\n if (ctx.options.singleQuote === false ||\n (ctx.implicitKey && value.includes('\\n')) ||\n /[ \\t]\\n|\\n[ \\t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline\n )\n return doubleQuotedString(value, ctx);\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n const res = \"'\" + value.replace(/'/g, \"''\").replace(/\\n+/g, `$&\\n${indent}`) + \"'\";\n return ctx.implicitKey\n ? res\n : foldFlowLines.foldFlowLines(res, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction quotedString(value, ctx) {\n const { singleQuote } = ctx.options;\n let qs;\n if (singleQuote === false)\n qs = doubleQuotedString;\n else {\n const hasDouble = value.includes('\"');\n const hasSingle = value.includes(\"'\");\n if (hasDouble && !hasSingle)\n qs = singleQuotedString;\n else if (hasSingle && !hasDouble)\n qs = doubleQuotedString;\n else\n qs = singleQuote ? singleQuotedString : doubleQuotedString;\n }\n return qs(value, ctx);\n}\n// The negative lookbehind avoids a polynomial search,\n// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind\nlet blockEndNewlines;\ntry {\n blockEndNewlines = new RegExp('(^|(?<!\\n))\\n+(?!\\n|$)', 'g');\n}\ncatch {\n blockEndNewlines = /\\n+(?!\\n|$)/g;\n}\nfunction blockString({ comment, type, value }, ctx, onComment, onChompKeep) {\n const { blockQuote, commentString, lineWidth } = ctx.options;\n // 1. Block can't end in whitespace unless the last line is non-empty.\n // 2. Strings consisting of only whitespace are best rendered explicitly.\n if (!blockQuote || /\\n[\\t ]+$/.test(value)) {\n return quotedString(value, ctx);\n }\n const indent = ctx.indent ||\n (ctx.forceBlockIndent || containsDocumentMarker(value) ? ' ' : '');\n const literal = blockQuote === 'literal'\n ? true\n : blockQuote === 'folded' || type === Scalar.Scalar.BLOCK_FOLDED\n ? false\n : type === Scalar.Scalar.BLOCK_LITERAL\n ? true\n : !lineLengthOverLimit(value, lineWidth, indent.length);\n if (!value)\n return literal ? '|\\n' : '>\\n';\n // determine chomping from whitespace at value end\n let chomp;\n let endStart;\n for (endStart = value.length; endStart > 0; --endStart) {\n const ch = value[endStart - 1];\n if (ch !== '\\n' && ch !== '\\t' && ch !== ' ')\n break;\n }\n let end = value.substring(endStart);\n const endNlPos = end.indexOf('\\n');\n if (endNlPos === -1) {\n chomp = '-'; // strip\n }\n else if (value === end || endNlPos !== end.length - 1) {\n chomp = '+'; // keep\n if (onChompKeep)\n onChompKeep();\n }\n else {\n chomp = ''; // clip\n }\n if (end) {\n value = value.slice(0, -end.length);\n if (end[end.length - 1] === '\\n')\n end = end.slice(0, -1);\n end = end.replace(blockEndNewlines, `$&${indent}`);\n }\n // determine indent indicator from whitespace at value start\n let startWithSpace = false;\n let startEnd;\n let startNlPos = -1;\n for (startEnd = 0; startEnd < value.length; ++startEnd) {\n const ch = value[startEnd];\n if (ch === ' ')\n startWithSpace = true;\n else if (ch === '\\n')\n startNlPos = startEnd;\n else\n break;\n }\n let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);\n if (start) {\n value = value.substring(start.length);\n start = start.replace(/\\n+/g, `$&${indent}`);\n }\n const indentSize = indent ? '2' : '1'; // root is at -1\n // Leading | or > is added later\n let header = (startWithSpace ? indentSize : '') + chomp;\n if (comment) {\n header += ' ' + commentString(comment.replace(/ ?[\\r\\n]+/g, ' '));\n if (onComment)\n onComment();\n }\n if (!literal) {\n const foldedValue = value\n .replace(/\\n+/g, '\\n$&')\n .replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g, '$1$2') // more-indented lines aren't folded\n // ^ more-ind. ^ empty ^ capture next empty lines only at end of indent\n .replace(/\\n+/g, `$&${indent}`);\n let literalFallback = false;\n const foldOptions = getFoldOptions(ctx, true);\n if (blockQuote !== 'folded' && type !== Scalar.Scalar.BLOCK_FOLDED) {\n foldOptions.onOverflow = () => {\n literalFallback = true;\n };\n }\n const body = foldFlowLines.foldFlowLines(`${start}${foldedValue}${end}`, indent, foldFlowLines.FOLD_BLOCK, foldOptions);\n if (!literalFallback)\n return `>${header}\\n${indent}${body}`;\n }\n value = value.replace(/\\n+/g, `$&${indent}`);\n return `|${header}\\n${indent}${start}${value}${end}`;\n}\nfunction plainString(item, ctx, onComment, onChompKeep) {\n const { type, value } = item;\n const { actualString, implicitKey, indent, indentStep, inFlow } = ctx;\n if ((implicitKey && value.includes('\\n')) ||\n (inFlow && /[[\\]{},]/.test(value))) {\n return quotedString(value, ctx);\n }\n if (/^[\\n\\t ,[\\]{}#&*!|>'\"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(value)) {\n // not allowed:\n // - '-' or '?'\n // - start with an indicator character (except [?:-]) or /[?-] /\n // - '\\n ', ': ' or ' \\n' anywhere\n // - '#' not preceded by a non-space char\n // - end with ' ' or ':'\n return implicitKey || inFlow || !value.includes('\\n')\n ? quotedString(value, ctx)\n : blockString(item, ctx, onComment, onChompKeep);\n }\n if (!implicitKey &&\n !inFlow &&\n type !== Scalar.Scalar.PLAIN &&\n value.includes('\\n')) {\n // Where allowed & type not set explicitly, prefer block style for multiline strings\n return blockString(item, ctx, onComment, onChompKeep);\n }\n if (containsDocumentMarker(value)) {\n if (indent === '') {\n ctx.forceBlockIndent = true;\n return blockString(item, ctx, onComment, onChompKeep);\n }\n else if (implicitKey && indent === indentStep) {\n return quotedString(value, ctx);\n }\n }\n const str = value.replace(/\\n+/g, `$&\\n${indent}`);\n // Verify that output will be parsed as a string, as e.g. plain numbers and\n // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),\n // and others in v1.1.\n if (actualString) {\n const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str);\n const { compat, tags } = ctx.doc.schema;\n if (tags.some(test) || compat?.some(test))\n return quotedString(value, ctx);\n }\n return implicitKey\n ? str\n : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction stringifyString(item, ctx, onComment, onChompKeep) {\n const { implicitKey, inFlow } = ctx;\n const ss = typeof item.value === 'string'\n ? item\n : Object.assign({}, item, { value: String(item.value) });\n let { type } = item;\n if (type !== Scalar.Scalar.QUOTE_DOUBLE) {\n // force double quotes on control characters & unpaired surrogates\n if (/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(ss.value))\n type = Scalar.Scalar.QUOTE_DOUBLE;\n }\n const _stringify = (_type) => {\n switch (_type) {\n case Scalar.Scalar.BLOCK_FOLDED:\n case Scalar.Scalar.BLOCK_LITERAL:\n return implicitKey || inFlow\n ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers\n : blockString(ss, ctx, onComment, onChompKeep);\n case Scalar.Scalar.QUOTE_DOUBLE:\n return doubleQuotedString(ss.value, ctx);\n case Scalar.Scalar.QUOTE_SINGLE:\n return singleQuotedString(ss.value, ctx);\n case Scalar.Scalar.PLAIN:\n return plainString(ss, ctx, onComment, onChompKeep);\n default:\n return null;\n }\n };\n let res = _stringify(type);\n if (res === null) {\n const { defaultKeyType, defaultStringType } = ctx.options;\n const t = (implicitKey && defaultKeyType) || defaultStringType;\n res = _stringify(t);\n if (res === null)\n throw new Error(`Unsupported default string type ${t}`);\n }\n return res;\n}\n\nexports.stringifyString = stringifyString;\n","'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar identity = require('../nodes/identity.js');\nvar stringifyComment = require('./stringifyComment.js');\nvar stringifyString = require('./stringifyString.js');\n\nfunction createStringifyContext(doc, options) {\n const opt = Object.assign({\n blockQuote: true,\n commentString: stringifyComment.stringifyComment,\n defaultKeyType: null,\n defaultStringType: 'PLAIN',\n directives: null,\n doubleQuotedAsJSON: false,\n doubleQuotedMinMultiLineLength: 40,\n falseStr: 'false',\n flowCollectionPadding: true,\n indentSeq: true,\n lineWidth: 80,\n minContentWidth: 20,\n nullStr: 'null',\n simpleKeys: false,\n singleQuote: null,\n trueStr: 'true',\n verifyAliasOrder: true\n }, doc.schema.toStringOptions, options);\n let inFlow;\n switch (opt.collectionStyle) {\n case 'block':\n inFlow = false;\n break;\n case 'flow':\n inFlow = true;\n break;\n default:\n inFlow = null;\n }\n return {\n anchors: new Set(),\n doc,\n flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',\n indent: '',\n indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : ' ',\n inFlow,\n options: opt\n };\n}\nfunction getTagObject(tags, item) {\n if (item.tag) {\n const match = tags.filter(t => t.tag === item.tag);\n if (match.length > 0)\n return match.find(t => t.format === item.format) ?? match[0];\n }\n let tagObj = undefined;\n let obj;\n if (identity.isScalar(item)) {\n obj = item.value;\n let match = tags.filter(t => t.identify?.(obj));\n if (match.length > 1) {\n const testMatch = match.filter(t => t.test);\n if (testMatch.length > 0)\n match = testMatch;\n }\n tagObj =\n match.find(t => t.format === item.format) ?? match.find(t => !t.format);\n }\n else {\n obj = item;\n tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n }\n if (!tagObj) {\n const name = obj?.constructor?.name ?? (obj === null ? 'null' : typeof obj);\n throw new Error(`Tag not resolved for ${name} value`);\n }\n return tagObj;\n}\n// needs to be called before value stringifier to allow for circular anchor refs\nfunction stringifyProps(node, tagObj, { anchors: anchors$1, doc }) {\n if (!doc.directives)\n return '';\n const props = [];\n const anchor = (identity.isScalar(node) || identity.isCollection(node)) && node.anchor;\n if (anchor && anchors.anchorIsValid(anchor)) {\n anchors$1.add(anchor);\n props.push(`&${anchor}`);\n }\n const tag = node.tag ?? (tagObj.default ? null : tagObj.tag);\n if (tag)\n props.push(doc.directives.tagString(tag));\n return props.join(' ');\n}\nfunction stringify(item, ctx, onComment, onChompKeep) {\n if (identity.isPair(item))\n return item.toString(ctx, onComment, onChompKeep);\n if (identity.isAlias(item)) {\n if (ctx.doc.directives)\n return item.toString(ctx);\n if (ctx.resolvedAliases?.has(item)) {\n throw new TypeError(`Cannot stringify circular structure without alias nodes`);\n }\n else {\n if (ctx.resolvedAliases)\n ctx.resolvedAliases.add(item);\n else\n ctx.resolvedAliases = new Set([item]);\n item = item.resolve(ctx.doc);\n }\n }\n let tagObj = undefined;\n const node = identity.isNode(item)\n ? item\n : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });\n tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));\n const props = stringifyProps(node, tagObj, ctx);\n if (props.length > 0)\n ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;\n const str = typeof tagObj.stringify === 'function'\n ? tagObj.stringify(node, ctx, onComment, onChompKeep)\n : identity.isScalar(node)\n ? stringifyString.stringifyString(node, ctx, onComment, onChompKeep)\n : node.toString(ctx, onComment, onChompKeep);\n if (!props)\n return str;\n return identity.isScalar(node) || str[0] === '{' || str[0] === '['\n ? `${props} ${str}`\n : `${props}\\n${ctx.indent}${str}`;\n}\n\nexports.createStringifyContext = createStringifyContext;\nexports.stringify = stringify;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyPair({ key, value }, ctx, onComment, onChompKeep) {\n const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;\n let keyComment = (identity.isNode(key) && key.comment) || null;\n if (simpleKeys) {\n if (keyComment) {\n throw new Error('With simple keys, key nodes cannot have comments');\n }\n if (identity.isCollection(key) || (!identity.isNode(key) && typeof key === 'object')) {\n const msg = 'With simple keys, collection cannot be used as a key value';\n throw new Error(msg);\n }\n }\n let explicitKey = !simpleKeys &&\n (!key ||\n (keyComment && value == null && !ctx.inFlow) ||\n identity.isCollection(key) ||\n (identity.isScalar(key)\n ? key.type === Scalar.Scalar.BLOCK_FOLDED || key.type === Scalar.Scalar.BLOCK_LITERAL\n : typeof key === 'object'));\n ctx = Object.assign({}, ctx, {\n allNullValues: false,\n implicitKey: !explicitKey && (simpleKeys || !allNullValues),\n indent: indent + indentStep\n });\n let keyCommentDone = false;\n let chompKeep = false;\n let str = stringify.stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));\n if (!explicitKey && !ctx.inFlow && str.length > 1024) {\n if (simpleKeys)\n throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n explicitKey = true;\n }\n if (ctx.inFlow) {\n if (allNullValues || value == null) {\n if (keyCommentDone && onComment)\n onComment();\n return str === '' ? '?' : explicitKey ? `? ${str}` : str;\n }\n }\n else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {\n str = `? ${str}`;\n if (keyComment && !keyCommentDone) {\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n }\n if (keyCommentDone)\n keyComment = null;\n if (explicitKey) {\n if (keyComment)\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n str = `? ${str}\\n${indent}:`;\n }\n else {\n str = `${str}:`;\n if (keyComment)\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n }\n let vsb, vcb, valueComment;\n if (identity.isNode(value)) {\n vsb = !!value.spaceBefore;\n vcb = value.commentBefore;\n valueComment = value.comment;\n }\n else {\n vsb = false;\n vcb = null;\n valueComment = null;\n if (value && typeof value === 'object')\n value = doc.createNode(value);\n }\n ctx.implicitKey = false;\n if (!explicitKey && !keyComment && identity.isScalar(value))\n ctx.indentAtStart = str.length + 1;\n chompKeep = false;\n if (!indentSeq &&\n indentStep.length >= 2 &&\n !ctx.inFlow &&\n !explicitKey &&\n identity.isSeq(value) &&\n !value.flow &&\n !value.tag &&\n !value.anchor) {\n // If indentSeq === false, consider '- ' as part of indentation where possible\n ctx.indent = ctx.indent.substring(2);\n }\n let valueCommentDone = false;\n const valueStr = stringify.stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));\n let ws = ' ';\n if (keyComment || vsb || vcb) {\n ws = vsb ? '\\n' : '';\n if (vcb) {\n const cs = commentString(vcb);\n ws += `\\n${stringifyComment.indentComment(cs, ctx.indent)}`;\n }\n if (valueStr === '' && !ctx.inFlow) {\n if (ws === '\\n' && valueComment)\n ws = '\\n\\n';\n }\n else {\n ws += `\\n${ctx.indent}`;\n }\n }\n else if (!explicitKey && identity.isCollection(value)) {\n const vs0 = valueStr[0];\n const nl0 = valueStr.indexOf('\\n');\n const hasNewline = nl0 !== -1;\n const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;\n if (hasNewline || !flow) {\n let hasPropsLine = false;\n if (hasNewline && (vs0 === '&' || vs0 === '!')) {\n let sp0 = valueStr.indexOf(' ');\n if (vs0 === '&' &&\n sp0 !== -1 &&\n sp0 < nl0 &&\n valueStr[sp0 + 1] === '!') {\n sp0 = valueStr.indexOf(' ', sp0 + 1);\n }\n if (sp0 === -1 || nl0 < sp0)\n hasPropsLine = true;\n }\n if (!hasPropsLine)\n ws = `\\n${ctx.indent}`;\n }\n }\n else if (valueStr === '' || valueStr[0] === '\\n') {\n ws = '';\n }\n str += ws + valueStr;\n if (ctx.inFlow) {\n if (valueCommentDone && onComment)\n onComment();\n }\n else if (valueComment && !valueCommentDone) {\n str += stringifyComment.lineComment(str, ctx.indent, commentString(valueComment));\n }\n else if (chompKeep && onChompKeep) {\n onChompKeep();\n }\n return str;\n}\n\nexports.stringifyPair = stringifyPair;\n","'use strict';\n\nvar node_process = require('process');\n\nfunction debug(logLevel, ...messages) {\n if (logLevel === 'debug')\n console.log(...messages);\n}\nfunction warn(logLevel, warning) {\n if (logLevel === 'debug' || logLevel === 'warn') {\n if (typeof node_process.emitWarning === 'function')\n node_process.emitWarning(warning);\n else\n console.warn(warning);\n }\n}\n\nexports.debug = debug;\nexports.warn = warn;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Scalar = require('../../nodes/Scalar.js');\n\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nconst MERGE_KEY = '<<';\nconst merge = {\n identify: value => value === MERGE_KEY ||\n (typeof value === 'symbol' && value.description === MERGE_KEY),\n default: 'key',\n tag: 'tag:yaml.org,2002:merge',\n test: /^<<$/,\n resolve: () => Object.assign(new Scalar.Scalar(Symbol(MERGE_KEY)), {\n addToJSMap: addMergeToJSMap\n }),\n stringify: () => MERGE_KEY\n};\nconst isMergeKey = (ctx, key) => (merge.identify(key) ||\n (identity.isScalar(key) &&\n (!key.type || key.type === Scalar.Scalar.PLAIN) &&\n merge.identify(key.value))) &&\n ctx?.doc.schema.tags.some(tag => tag.tag === merge.tag && tag.default);\nfunction addMergeToJSMap(ctx, map, value) {\n value = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;\n if (identity.isSeq(value))\n for (const it of value.items)\n mergeValue(ctx, map, it);\n else if (Array.isArray(value))\n for (const it of value)\n mergeValue(ctx, map, it);\n else\n mergeValue(ctx, map, value);\n}\nfunction mergeValue(ctx, map, value) {\n const source = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;\n if (!identity.isMap(source))\n throw new Error('Merge sources must be maps or map aliases');\n const srcMap = source.toJSON(null, ctx, Map);\n for (const [key, value] of srcMap) {\n if (map instanceof Map) {\n if (!map.has(key))\n map.set(key, value);\n }\n else if (map instanceof Set) {\n map.add(key);\n }\n else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n Object.defineProperty(map, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true\n });\n }\n }\n return map;\n}\n\nexports.addMergeToJSMap = addMergeToJSMap;\nexports.isMergeKey = isMergeKey;\nexports.merge = merge;\n","'use strict';\n\nvar log = require('../log.js');\nvar merge = require('../schema/yaml-1.1/merge.js');\nvar stringify = require('../stringify/stringify.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nfunction addPairToJSMap(ctx, map, { key, value }) {\n if (identity.isNode(key) && key.addToJSMap)\n key.addToJSMap(ctx, map, value);\n // TODO: Should drop this special case for bare << handling\n else if (merge.isMergeKey(ctx, key))\n merge.addMergeToJSMap(ctx, map, value);\n else {\n const jsKey = toJS.toJS(key, '', ctx);\n if (map instanceof Map) {\n map.set(jsKey, toJS.toJS(value, jsKey, ctx));\n }\n else if (map instanceof Set) {\n map.add(jsKey);\n }\n else {\n const stringKey = stringifyKey(key, jsKey, ctx);\n const jsValue = toJS.toJS(value, stringKey, ctx);\n if (stringKey in map)\n Object.defineProperty(map, stringKey, {\n value: jsValue,\n writable: true,\n enumerable: true,\n configurable: true\n });\n else\n map[stringKey] = jsValue;\n }\n }\n return map;\n}\nfunction stringifyKey(key, jsKey, ctx) {\n if (jsKey === null)\n return '';\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n if (typeof jsKey !== 'object')\n return String(jsKey);\n if (identity.isNode(key) && ctx?.doc) {\n const strCtx = stringify.createStringifyContext(ctx.doc, {});\n strCtx.anchors = new Set();\n for (const node of ctx.anchors.keys())\n strCtx.anchors.add(node.anchor);\n strCtx.inFlow = true;\n strCtx.inStringifyKey = true;\n const strKey = key.toString(strCtx);\n if (!ctx.mapKeyWarned) {\n let jsonStr = JSON.stringify(strKey);\n if (jsonStr.length > 40)\n jsonStr = jsonStr.substring(0, 36) + '...\"';\n log.warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);\n ctx.mapKeyWarned = true;\n }\n return strKey;\n }\n return JSON.stringify(jsKey);\n}\n\nexports.addPairToJSMap = addPairToJSMap;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar stringifyPair = require('../stringify/stringifyPair.js');\nvar addPairToJSMap = require('./addPairToJSMap.js');\nvar identity = require('./identity.js');\n\nfunction createPair(key, value, ctx) {\n const k = createNode.createNode(key, undefined, ctx);\n const v = createNode.createNode(value, undefined, ctx);\n return new Pair(k, v);\n}\nclass Pair {\n constructor(key, value = null) {\n Object.defineProperty(this, identity.NODE_TYPE, { value: identity.PAIR });\n this.key = key;\n this.value = value;\n }\n clone(schema) {\n let { key, value } = this;\n if (identity.isNode(key))\n key = key.clone(schema);\n if (identity.isNode(value))\n value = value.clone(schema);\n return new Pair(key, value);\n }\n toJSON(_, ctx) {\n const pair = ctx?.mapAsMap ? new Map() : {};\n return addPairToJSMap.addPairToJSMap(ctx, pair, this);\n }\n toString(ctx, onComment, onChompKeep) {\n return ctx?.doc\n ? stringifyPair.stringifyPair(this, ctx, onComment, onChompKeep)\n : JSON.stringify(this);\n }\n}\n\nexports.Pair = Pair;\nexports.createPair = createPair;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyCollection(collection, ctx, options) {\n const flow = ctx.inFlow ?? collection.flow;\n const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;\n return stringify(collection, ctx, options);\n}\nfunction stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {\n const { indent, options: { commentString } } = ctx;\n const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });\n let chompKeep = false; // flag for the preceding node's status\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (identity.isNode(item)) {\n if (!chompKeep && item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, chompKeep);\n if (item.comment)\n comment = item.comment;\n }\n else if (identity.isPair(item)) {\n const ik = identity.isNode(item.key) ? item.key : null;\n if (ik) {\n if (!chompKeep && ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);\n }\n }\n chompKeep = false;\n let str = stringify.stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));\n if (comment)\n str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n if (chompKeep && comment)\n chompKeep = false;\n lines.push(blockItemPrefix + str);\n }\n let str;\n if (lines.length === 0) {\n str = flowChars.start + flowChars.end;\n }\n else {\n str = lines[0];\n for (let i = 1; i < lines.length; ++i) {\n const line = lines[i];\n str += line ? `\\n${indent}${line}` : '\\n';\n }\n }\n if (comment) {\n str += '\\n' + stringifyComment.indentComment(commentString(comment), indent);\n if (onComment)\n onComment();\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n}\nfunction stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {\n const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;\n itemIndent += indentStep;\n const itemCtx = Object.assign({}, ctx, {\n indent: itemIndent,\n inFlow: true,\n type: null\n });\n let reqNewline = false;\n let linesAtValue = 0;\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (identity.isNode(item)) {\n if (item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, false);\n if (item.comment)\n comment = item.comment;\n }\n else if (identity.isPair(item)) {\n const ik = identity.isNode(item.key) ? item.key : null;\n if (ik) {\n if (ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, false);\n if (ik.comment)\n reqNewline = true;\n }\n const iv = identity.isNode(item.value) ? item.value : null;\n if (iv) {\n if (iv.comment)\n comment = iv.comment;\n if (iv.commentBefore)\n reqNewline = true;\n }\n else if (item.value == null && ik?.comment) {\n comment = ik.comment;\n }\n }\n if (comment)\n reqNewline = true;\n let str = stringify.stringify(item, itemCtx, () => (comment = null));\n if (i < items.length - 1)\n str += ',';\n if (comment)\n str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n if (!reqNewline && (lines.length > linesAtValue || str.includes('\\n')))\n reqNewline = true;\n lines.push(str);\n linesAtValue = lines.length;\n }\n const { start, end } = flowChars;\n if (lines.length === 0) {\n return start + end;\n }\n else {\n if (!reqNewline) {\n const len = lines.reduce((sum, line) => sum + line.length + 2, 2);\n reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;\n }\n if (reqNewline) {\n let str = start;\n for (const line of lines)\n str += line ? `\\n${indentStep}${indent}${line}` : '\\n';\n return `${str}\\n${indent}${end}`;\n }\n else {\n return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;\n }\n }\n}\nfunction addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {\n if (comment && chompKeep)\n comment = comment.replace(/^\\n+/, '');\n if (comment) {\n const ic = stringifyComment.indentComment(commentString(comment), indent);\n lines.push(ic.trimStart()); // Avoid double indent on first line\n }\n}\n\nexports.stringifyCollection = stringifyCollection;\n","'use strict';\n\nvar stringifyCollection = require('../stringify/stringifyCollection.js');\nvar addPairToJSMap = require('./addPairToJSMap.js');\nvar Collection = require('./Collection.js');\nvar identity = require('./identity.js');\nvar Pair = require('./Pair.js');\nvar Scalar = require('./Scalar.js');\n\nfunction findPair(items, key) {\n const k = identity.isScalar(key) ? key.value : key;\n for (const it of items) {\n if (identity.isPair(it)) {\n if (it.key === key || it.key === k)\n return it;\n if (identity.isScalar(it.key) && it.key.value === k)\n return it;\n }\n }\n return undefined;\n}\nclass YAMLMap extends Collection.Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:map';\n }\n constructor(schema) {\n super(identity.MAP, schema);\n this.items = [];\n }\n /**\n * A generic collection parsing method that can be extended\n * to other node classes that inherit from YAMLMap\n */\n static from(schema, obj, ctx) {\n const { keepUndefined, replacer } = ctx;\n const map = new this(schema);\n const add = (key, value) => {\n if (typeof replacer === 'function')\n value = replacer.call(obj, key, value);\n else if (Array.isArray(replacer) && !replacer.includes(key))\n return;\n if (value !== undefined || keepUndefined)\n map.items.push(Pair.createPair(key, value, ctx));\n };\n if (obj instanceof Map) {\n for (const [key, value] of obj)\n add(key, value);\n }\n else if (obj && typeof obj === 'object') {\n for (const key of Object.keys(obj))\n add(key, obj[key]);\n }\n if (typeof schema.sortMapEntries === 'function') {\n map.items.sort(schema.sortMapEntries);\n }\n return map;\n }\n /**\n * Adds a value to the collection.\n *\n * @param overwrite - If not set `true`, using a key that is already in the\n * collection will throw. Otherwise, overwrites the previous value.\n */\n add(pair, overwrite) {\n let _pair;\n if (identity.isPair(pair))\n _pair = pair;\n else if (!pair || typeof pair !== 'object' || !('key' in pair)) {\n // In TypeScript, this never happens.\n _pair = new Pair.Pair(pair, pair?.value);\n }\n else\n _pair = new Pair.Pair(pair.key, pair.value);\n const prev = findPair(this.items, _pair.key);\n const sortEntries = this.schema?.sortMapEntries;\n if (prev) {\n if (!overwrite)\n throw new Error(`Key ${_pair.key} already set`);\n // For scalars, keep the old node & its comments and anchors\n if (identity.isScalar(prev.value) && Scalar.isScalarValue(_pair.value))\n prev.value.value = _pair.value;\n else\n prev.value = _pair.value;\n }\n else if (sortEntries) {\n const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);\n if (i === -1)\n this.items.push(_pair);\n else\n this.items.splice(i, 0, _pair);\n }\n else {\n this.items.push(_pair);\n }\n }\n delete(key) {\n const it = findPair(this.items, key);\n if (!it)\n return false;\n const del = this.items.splice(this.items.indexOf(it), 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const it = findPair(this.items, key);\n const node = it?.value;\n return (!keepScalar && identity.isScalar(node) ? node.value : node) ?? undefined;\n }\n has(key) {\n return !!findPair(this.items, key);\n }\n set(key, value) {\n this.add(new Pair.Pair(key, value), true);\n }\n /**\n * @param ctx - Conversion context, originally set in Document#toJS()\n * @param {Class} Type - If set, forces the returned collection type\n * @returns Instance of Type, Map, or Object\n */\n toJSON(_, ctx, Type) {\n const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {};\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const item of this.items)\n addPairToJSMap.addPairToJSMap(ctx, map, item);\n return map;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n for (const item of this.items) {\n if (!identity.isPair(item))\n throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n }\n if (!ctx.allNullValues && this.hasAllNullValues(false))\n ctx = Object.assign({}, ctx, { allNullValues: true });\n return stringifyCollection.stringifyCollection(this, ctx, {\n blockItemPrefix: '',\n flowChars: { start: '{', end: '}' },\n itemIndent: ctx.indent || '',\n onChompKeep,\n onComment\n });\n }\n}\n\nexports.YAMLMap = YAMLMap;\nexports.findPair = findPair;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\n\nconst map = {\n collection: 'map',\n default: true,\n nodeClass: YAMLMap.YAMLMap,\n tag: 'tag:yaml.org,2002:map',\n resolve(map, onError) {\n if (!identity.isMap(map))\n onError('Expected a mapping for this tag');\n return map;\n },\n createNode: (schema, obj, ctx) => YAMLMap.YAMLMap.from(schema, obj, ctx)\n};\n\nexports.map = map;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar stringifyCollection = require('../stringify/stringifyCollection.js');\nvar Collection = require('./Collection.js');\nvar identity = require('./identity.js');\nvar Scalar = require('./Scalar.js');\nvar toJS = require('./toJS.js');\n\nclass YAMLSeq extends Collection.Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:seq';\n }\n constructor(schema) {\n super(identity.SEQ, schema);\n this.items = [];\n }\n add(value) {\n this.items.push(value);\n }\n /**\n * Removes a value from the collection.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n *\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return false;\n const del = this.items.splice(idx, 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return undefined;\n const it = this.items[idx];\n return !keepScalar && identity.isScalar(it) ? it.value : it;\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n */\n has(key) {\n const idx = asItemIndex(key);\n return typeof idx === 'number' && idx < this.items.length;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n *\n * If `key` does not contain a representation of an integer, this will throw.\n * It may be wrapped in a `Scalar`.\n */\n set(key, value) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n throw new Error(`Expected a valid index, not ${key}.`);\n const prev = this.items[idx];\n if (identity.isScalar(prev) && Scalar.isScalarValue(value))\n prev.value = value;\n else\n this.items[idx] = value;\n }\n toJSON(_, ctx) {\n const seq = [];\n if (ctx?.onCreate)\n ctx.onCreate(seq);\n let i = 0;\n for (const item of this.items)\n seq.push(toJS.toJS(item, String(i++), ctx));\n return seq;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n return stringifyCollection.stringifyCollection(this, ctx, {\n blockItemPrefix: '- ',\n flowChars: { start: '[', end: ']' },\n itemIndent: (ctx.indent || '') + ' ',\n onChompKeep,\n onComment\n });\n }\n static from(schema, obj, ctx) {\n const { replacer } = ctx;\n const seq = new this(schema);\n if (obj && Symbol.iterator in Object(obj)) {\n let i = 0;\n for (let it of obj) {\n if (typeof replacer === 'function') {\n const key = obj instanceof Set ? it : String(i++);\n it = replacer.call(obj, key, it);\n }\n seq.items.push(createNode.createNode(it, undefined, ctx));\n }\n }\n return seq;\n }\n}\nfunction asItemIndex(key) {\n let idx = identity.isScalar(key) ? key.value : key;\n if (idx && typeof idx === 'string')\n idx = Number(idx);\n return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0\n ? idx\n : null;\n}\n\nexports.YAMLSeq = YAMLSeq;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\n\nconst seq = {\n collection: 'seq',\n default: true,\n nodeClass: YAMLSeq.YAMLSeq,\n tag: 'tag:yaml.org,2002:seq',\n resolve(seq, onError) {\n if (!identity.isSeq(seq))\n onError('Expected a sequence for this tag');\n return seq;\n },\n createNode: (schema, obj, ctx) => YAMLSeq.YAMLSeq.from(schema, obj, ctx)\n};\n\nexports.seq = seq;\n","'use strict';\n\nvar stringifyString = require('../../stringify/stringifyString.js');\n\nconst string = {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify(item, ctx, onComment, onChompKeep) {\n ctx = Object.assign({ actualString: true }, ctx);\n return stringifyString.stringifyString(item, ctx, onComment, onChompKeep);\n }\n};\n\nexports.string = string;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst nullTag = {\n identify: value => value == null,\n createNode: () => new Scalar.Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^(?:~|[Nn]ull|NULL)?$/,\n resolve: () => new Scalar.Scalar(null),\n stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)\n ? source\n : ctx.options.nullStr\n};\n\nexports.nullTag = nullTag;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst boolTag = {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n resolve: str => new Scalar.Scalar(str[0] === 't' || str[0] === 'T'),\n stringify({ source, value }, ctx) {\n if (source && boolTag.test.test(source)) {\n const sv = source[0] === 't' || source[0] === 'T';\n if (value === sv)\n return source;\n }\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n }\n};\n\nexports.boolTag = boolTag;\n","'use strict';\n\nfunction stringifyNumber({ format, minFractionDigits, tag, value }) {\n if (typeof value === 'bigint')\n return String(value);\n const num = typeof value === 'number' ? value : Number(value);\n if (!isFinite(num))\n return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n let n = Object.is(value, -0) ? '-0' : JSON.stringify(value);\n if (!format &&\n minFractionDigits &&\n (!tag || tag === 'tag:yaml.org,2002:float') &&\n /^\\d/.test(n)) {\n let i = n.indexOf('.');\n if (i < 0) {\n i = n.length;\n n += '.';\n }\n let d = minFractionDigits - (n.length - i - 1);\n while (d-- > 0)\n n += '0';\n }\n return n;\n}\n\nexports.stringifyNumber = stringifyNumber;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: str => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber.stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,\n resolve: str => parseFloat(str),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,\n resolve(str) {\n const node = new Scalar.Scalar(parseFloat(str));\n const dot = str.indexOf('.');\n if (dot !== -1 && str[str.length - 1] === '0')\n node.minFractionDigits = str.length - dot - 1;\n return node;\n },\n stringify: stringifyNumber.stringifyNumber\n};\n\nexports.float = float;\nexports.floatExp = floatExp;\nexports.floatNaN = floatNaN;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nconst intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value) && value >= 0)\n return prefix + value.toString(radix);\n return stringifyNumber.stringifyNumber(node);\n}\nconst intOct = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^0o[0-7]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),\n stringify: node => intStringify(node, 8, '0o')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber.stringifyNumber\n};\nconst intHex = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^0x[0-9a-fA-F]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexports.int = int;\nexports.intHex = intHex;\nexports.intOct = intOct;\n","'use strict';\n\nvar map = require('../common/map.js');\nvar _null = require('../common/null.js');\nvar seq = require('../common/seq.js');\nvar string = require('../common/string.js');\nvar bool = require('./bool.js');\nvar float = require('./float.js');\nvar int = require('./int.js');\n\nconst schema = [\n map.map,\n seq.seq,\n string.string,\n _null.nullTag,\n bool.boolTag,\n int.intOct,\n int.int,\n int.intHex,\n float.floatNaN,\n float.floatExp,\n float.float\n];\n\nexports.schema = schema;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar map = require('../common/map.js');\nvar seq = require('../common/seq.js');\n\nfunction intIdentify(value) {\n return typeof value === 'bigint' || Number.isInteger(value);\n}\nconst stringifyJSON = ({ value }) => JSON.stringify(value);\nconst jsonScalars = [\n {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify: stringifyJSON\n },\n {\n identify: value => value == null,\n createNode: () => new Scalar.Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^null$/,\n resolve: () => null,\n stringify: stringifyJSON\n },\n {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^true$|^false$/,\n resolve: str => str === 'true',\n stringify: stringifyJSON\n },\n {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^-?(?:0|[1-9][0-9]*)$/,\n resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),\n stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)\n },\n {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,\n resolve: str => parseFloat(str),\n stringify: stringifyJSON\n }\n];\nconst jsonError = {\n default: true,\n tag: '',\n test: /^/,\n resolve(str, onError) {\n onError(`Unresolved plain scalar ${JSON.stringify(str)}`);\n return str;\n }\n};\nconst schema = [map.map, seq.seq].concat(jsonScalars, jsonError);\n\nexports.schema = schema;\n","'use strict';\n\nvar node_buffer = require('buffer');\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyString = require('../../stringify/stringifyString.js');\n\nconst binary = {\n identify: value => value instanceof Uint8Array, // Buffer inherits from Uint8Array\n default: false,\n tag: 'tag:yaml.org,2002:binary',\n /**\n * Returns a Buffer in node and an Uint8Array in browsers\n *\n * To use the resulting buffer as an image, you'll want to do something like:\n *\n * const blob = new Blob([buffer], { type: 'image/jpeg' })\n * document.querySelector('#photo').src = URL.createObjectURL(blob)\n */\n resolve(src, onError) {\n if (typeof node_buffer.Buffer === 'function') {\n return node_buffer.Buffer.from(src, 'base64');\n }\n else if (typeof atob === 'function') {\n // On IE 11, atob() can't handle newlines\n const str = atob(src.replace(/[\\n\\r]/g, ''));\n const buffer = new Uint8Array(str.length);\n for (let i = 0; i < str.length; ++i)\n buffer[i] = str.charCodeAt(i);\n return buffer;\n }\n else {\n onError('This environment does not support reading binary tags; either Buffer or atob is required');\n return src;\n }\n },\n stringify({ comment, type, value }, ctx, onComment, onChompKeep) {\n if (!value)\n return '';\n const buf = value; // checked earlier by binary.identify()\n let str;\n if (typeof node_buffer.Buffer === 'function') {\n str =\n buf instanceof node_buffer.Buffer\n ? buf.toString('base64')\n : node_buffer.Buffer.from(buf.buffer).toString('base64');\n }\n else if (typeof btoa === 'function') {\n let s = '';\n for (let i = 0; i < buf.length; ++i)\n s += String.fromCharCode(buf[i]);\n str = btoa(s);\n }\n else {\n throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');\n }\n type ?? (type = Scalar.Scalar.BLOCK_LITERAL);\n if (type !== Scalar.Scalar.QUOTE_DOUBLE) {\n const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);\n const n = Math.ceil(str.length / lineWidth);\n const lines = new Array(n);\n for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {\n lines[i] = str.substr(o, lineWidth);\n }\n str = lines.join(type === Scalar.Scalar.BLOCK_LITERAL ? '\\n' : ' ');\n }\n return stringifyString.stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);\n }\n};\n\nexports.binary = binary;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Pair = require('../../nodes/Pair.js');\nvar Scalar = require('../../nodes/Scalar.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\n\nfunction resolvePairs(seq, onError) {\n if (identity.isSeq(seq)) {\n for (let i = 0; i < seq.items.length; ++i) {\n let item = seq.items[i];\n if (identity.isPair(item))\n continue;\n else if (identity.isMap(item)) {\n if (item.items.length > 1)\n onError('Each pair must have its own sequence indicator');\n const pair = item.items[0] || new Pair.Pair(new Scalar.Scalar(null));\n if (item.commentBefore)\n pair.key.commentBefore = pair.key.commentBefore\n ? `${item.commentBefore}\\n${pair.key.commentBefore}`\n : item.commentBefore;\n if (item.comment) {\n const cn = pair.value ?? pair.key;\n cn.comment = cn.comment\n ? `${item.comment}\\n${cn.comment}`\n : item.comment;\n }\n item = pair;\n }\n seq.items[i] = identity.isPair(item) ? item : new Pair.Pair(item);\n }\n }\n else\n onError('Expected a sequence for this tag');\n return seq;\n}\nfunction createPairs(schema, iterable, ctx) {\n const { replacer } = ctx;\n const pairs = new YAMLSeq.YAMLSeq(schema);\n pairs.tag = 'tag:yaml.org,2002:pairs';\n let i = 0;\n if (iterable && Symbol.iterator in Object(iterable))\n for (let it of iterable) {\n if (typeof replacer === 'function')\n it = replacer.call(iterable, String(i++), it);\n let key, value;\n if (Array.isArray(it)) {\n if (it.length === 2) {\n key = it[0];\n value = it[1];\n }\n else\n throw new TypeError(`Expected [key, value] tuple: ${it}`);\n }\n else if (it && it instanceof Object) {\n const keys = Object.keys(it);\n if (keys.length === 1) {\n key = keys[0];\n value = it[key];\n }\n else {\n throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);\n }\n }\n else {\n key = it;\n }\n pairs.items.push(Pair.createPair(key, value, ctx));\n }\n return pairs;\n}\nconst pairs = {\n collection: 'seq',\n default: false,\n tag: 'tag:yaml.org,2002:pairs',\n resolve: resolvePairs,\n createNode: createPairs\n};\n\nexports.createPairs = createPairs;\nexports.pairs = pairs;\nexports.resolvePairs = resolvePairs;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar toJS = require('../../nodes/toJS.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\nvar pairs = require('./pairs.js');\n\nclass YAMLOMap extends YAMLSeq.YAMLSeq {\n constructor() {\n super();\n this.add = YAMLMap.YAMLMap.prototype.add.bind(this);\n this.delete = YAMLMap.YAMLMap.prototype.delete.bind(this);\n this.get = YAMLMap.YAMLMap.prototype.get.bind(this);\n this.has = YAMLMap.YAMLMap.prototype.has.bind(this);\n this.set = YAMLMap.YAMLMap.prototype.set.bind(this);\n this.tag = YAMLOMap.tag;\n }\n /**\n * If `ctx` is given, the return type is actually `Map<unknown, unknown>`,\n * but TypeScript won't allow widening the signature of a child method.\n */\n toJSON(_, ctx) {\n if (!ctx)\n return super.toJSON(_);\n const map = new Map();\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const pair of this.items) {\n let key, value;\n if (identity.isPair(pair)) {\n key = toJS.toJS(pair.key, '', ctx);\n value = toJS.toJS(pair.value, key, ctx);\n }\n else {\n key = toJS.toJS(pair, '', ctx);\n }\n if (map.has(key))\n throw new Error('Ordered maps must not include duplicate keys');\n map.set(key, value);\n }\n return map;\n }\n static from(schema, iterable, ctx) {\n const pairs$1 = pairs.createPairs(schema, iterable, ctx);\n const omap = new this();\n omap.items = pairs$1.items;\n return omap;\n }\n}\nYAMLOMap.tag = 'tag:yaml.org,2002:omap';\nconst omap = {\n collection: 'seq',\n identify: value => value instanceof Map,\n nodeClass: YAMLOMap,\n default: false,\n tag: 'tag:yaml.org,2002:omap',\n resolve(seq, onError) {\n const pairs$1 = pairs.resolvePairs(seq, onError);\n const seenKeys = [];\n for (const { key } of pairs$1.items) {\n if (identity.isScalar(key)) {\n if (seenKeys.includes(key.value)) {\n onError(`Ordered maps must not include duplicate keys: ${key.value}`);\n }\n else {\n seenKeys.push(key.value);\n }\n }\n }\n return Object.assign(new YAMLOMap(), pairs$1);\n },\n createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx)\n};\n\nexports.YAMLOMap = YAMLOMap;\nexports.omap = omap;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nfunction boolStringify({ value, source }, ctx) {\n const boolObj = value ? trueTag : falseTag;\n if (source && boolObj.test.test(source))\n return source;\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n}\nconst trueTag = {\n identify: value => value === true,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,\n resolve: () => new Scalar.Scalar(true),\n stringify: boolStringify\n};\nconst falseTag = {\n identify: value => value === false,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,\n resolve: () => new Scalar.Scalar(false),\n stringify: boolStringify\n};\n\nexports.falseTag = falseTag;\nexports.trueTag = trueTag;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: (str) => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber.stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,\n resolve: (str) => parseFloat(str.replace(/_/g, '')),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,\n resolve(str) {\n const node = new Scalar.Scalar(parseFloat(str.replace(/_/g, '')));\n const dot = str.indexOf('.');\n if (dot !== -1) {\n const f = str.substring(dot + 1).replace(/_/g, '');\n if (f[f.length - 1] === '0')\n node.minFractionDigits = f.length;\n }\n return node;\n },\n stringify: stringifyNumber.stringifyNumber\n};\n\nexports.float = float;\nexports.floatExp = floatExp;\nexports.floatNaN = floatNaN;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nfunction intResolve(str, offset, radix, { intAsBigInt }) {\n const sign = str[0];\n if (sign === '-' || sign === '+')\n offset += 1;\n str = str.substring(offset).replace(/_/g, '');\n if (intAsBigInt) {\n switch (radix) {\n case 2:\n str = `0b${str}`;\n break;\n case 8:\n str = `0o${str}`;\n break;\n case 16:\n str = `0x${str}`;\n break;\n }\n const n = BigInt(str);\n return sign === '-' ? BigInt(-1) * n : n;\n }\n const n = parseInt(str, radix);\n return sign === '-' ? -1 * n : n;\n}\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value)) {\n const str = value.toString(radix);\n return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;\n }\n return stringifyNumber.stringifyNumber(node);\n}\nconst intBin = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'BIN',\n test: /^[-+]?0b[0-1_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),\n stringify: node => intStringify(node, 2, '0b')\n};\nconst intOct = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^[-+]?0[0-7_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),\n stringify: node => intStringify(node, 8, '0')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9][0-9_]*$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber.stringifyNumber\n};\nconst intHex = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^[-+]?0x[0-9a-fA-F_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexports.int = int;\nexports.intBin = intBin;\nexports.intHex = intHex;\nexports.intOct = intOct;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Pair = require('../../nodes/Pair.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\n\nclass YAMLSet extends YAMLMap.YAMLMap {\n constructor(schema) {\n super(schema);\n this.tag = YAMLSet.tag;\n }\n add(key) {\n let pair;\n if (identity.isPair(key))\n pair = key;\n else if (key &&\n typeof key === 'object' &&\n 'key' in key &&\n 'value' in key &&\n key.value === null)\n pair = new Pair.Pair(key.key, null);\n else\n pair = new Pair.Pair(key, null);\n const prev = YAMLMap.findPair(this.items, pair.key);\n if (!prev)\n this.items.push(pair);\n }\n /**\n * If `keepPair` is `true`, returns the Pair matching `key`.\n * Otherwise, returns the value of that Pair's key.\n */\n get(key, keepPair) {\n const pair = YAMLMap.findPair(this.items, key);\n return !keepPair && identity.isPair(pair)\n ? identity.isScalar(pair.key)\n ? pair.key.value\n : pair.key\n : pair;\n }\n set(key, value) {\n if (typeof value !== 'boolean')\n throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);\n const prev = YAMLMap.findPair(this.items, key);\n if (prev && !value) {\n this.items.splice(this.items.indexOf(prev), 1);\n }\n else if (!prev && value) {\n this.items.push(new Pair.Pair(key));\n }\n }\n toJSON(_, ctx) {\n return super.toJSON(_, ctx, Set);\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n if (this.hasAllNullValues(true))\n return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);\n else\n throw new Error('Set items must all have null values');\n }\n static from(schema, iterable, ctx) {\n const { replacer } = ctx;\n const set = new this(schema);\n if (iterable && Symbol.iterator in Object(iterable))\n for (let value of iterable) {\n if (typeof replacer === 'function')\n value = replacer.call(iterable, value, value);\n set.items.push(Pair.createPair(value, null, ctx));\n }\n return set;\n }\n}\nYAMLSet.tag = 'tag:yaml.org,2002:set';\nconst set = {\n collection: 'map',\n identify: value => value instanceof Set,\n nodeClass: YAMLSet,\n default: false,\n tag: 'tag:yaml.org,2002:set',\n createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),\n resolve(map, onError) {\n if (identity.isMap(map)) {\n if (map.hasAllNullValues(true))\n return Object.assign(new YAMLSet(), map);\n else\n onError('Set items must all have null values');\n }\n else\n onError('Expected a mapping for this tag');\n return map;\n }\n};\n\nexports.YAMLSet = YAMLSet;\nexports.set = set;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\n/** Internal types handle bigint as number, because TS can't figure it out. */\nfunction parseSexagesimal(str, asBigInt) {\n const sign = str[0];\n const parts = sign === '-' || sign === '+' ? str.substring(1) : str;\n const num = (n) => asBigInt ? BigInt(n) : Number(n);\n const res = parts\n .replace(/_/g, '')\n .split(':')\n .reduce((res, p) => res * num(60) + num(p), num(0));\n return (sign === '-' ? num(-1) * res : res);\n}\n/**\n * hhhh:mm:ss.sss\n *\n * Internal types handle bigint as number, because TS can't figure it out.\n */\nfunction stringifySexagesimal(node) {\n let { value } = node;\n let num = (n) => n;\n if (typeof value === 'bigint')\n num = n => BigInt(n);\n else if (isNaN(value) || !isFinite(value))\n return stringifyNumber.stringifyNumber(node);\n let sign = '';\n if (value < 0) {\n sign = '-';\n value *= num(-1);\n }\n const _60 = num(60);\n const parts = [value % _60]; // seconds, including ms\n if (value < 60) {\n parts.unshift(0); // at least one : is required\n }\n else {\n value = (value - parts[0]) / _60;\n parts.unshift(value % _60); // minutes\n if (value >= 60) {\n value = (value - parts[0]) / _60;\n parts.unshift(value); // hours\n }\n }\n return (sign +\n parts\n .map(n => String(n).padStart(2, '0'))\n .join(':')\n .replace(/000000\\d*$/, '') // % 60 may introduce error\n );\n}\nconst intTime = {\n identify: value => typeof value === 'bigint' || Number.isInteger(value),\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,\n resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),\n stringify: stringifySexagesimal\n};\nconst floatTime = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,\n resolve: str => parseSexagesimal(str, false),\n stringify: stringifySexagesimal\n};\nconst timestamp = {\n identify: value => value instanceof Date,\n default: true,\n tag: 'tag:yaml.org,2002:timestamp',\n // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part\n // may be omitted altogether, resulting in a date format. In such a case, the time part is\n // assumed to be 00:00:00Z (start of day, UTC).\n test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd\n '(?:' + // time is optional\n '(?:t|T|[ \\\\t]+)' + // t | T | whitespace\n '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?\n '(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30\n ')?$'),\n resolve(str) {\n const match = str.match(timestamp.test);\n if (!match)\n throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');\n const [, year, month, day, hour, minute, second] = match.map(Number);\n const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;\n let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);\n const tz = match[8];\n if (tz && tz !== 'Z') {\n let d = parseSexagesimal(tz, false);\n if (Math.abs(d) < 30)\n d *= 60;\n date -= 60000 * d;\n }\n return new Date(date);\n },\n stringify: ({ value }) => value?.toISOString().replace(/(T00:00:00)?\\.000Z$/, '') ?? ''\n};\n\nexports.floatTime = floatTime;\nexports.intTime = intTime;\nexports.timestamp = timestamp;\n","'use strict';\n\nvar map = require('../common/map.js');\nvar _null = require('../common/null.js');\nvar seq = require('../common/seq.js');\nvar string = require('../common/string.js');\nvar binary = require('./binary.js');\nvar bool = require('./bool.js');\nvar float = require('./float.js');\nvar int = require('./int.js');\nvar merge = require('./merge.js');\nvar omap = require('./omap.js');\nvar pairs = require('./pairs.js');\nvar set = require('./set.js');\nvar timestamp = require('./timestamp.js');\n\nconst schema = [\n map.map,\n seq.seq,\n string.string,\n _null.nullTag,\n bool.trueTag,\n bool.falseTag,\n int.intBin,\n int.intOct,\n int.int,\n int.intHex,\n float.floatNaN,\n float.floatExp,\n float.float,\n binary.binary,\n merge.merge,\n omap.omap,\n pairs.pairs,\n set.set,\n timestamp.intTime,\n timestamp.floatTime,\n timestamp.timestamp\n];\n\nexports.schema = schema;\n","'use strict';\n\nvar map = require('./common/map.js');\nvar _null = require('./common/null.js');\nvar seq = require('./common/seq.js');\nvar string = require('./common/string.js');\nvar bool = require('./core/bool.js');\nvar float = require('./core/float.js');\nvar int = require('./core/int.js');\nvar schema = require('./core/schema.js');\nvar schema$1 = require('./json/schema.js');\nvar binary = require('./yaml-1.1/binary.js');\nvar merge = require('./yaml-1.1/merge.js');\nvar omap = require('./yaml-1.1/omap.js');\nvar pairs = require('./yaml-1.1/pairs.js');\nvar schema$2 = require('./yaml-1.1/schema.js');\nvar set = require('./yaml-1.1/set.js');\nvar timestamp = require('./yaml-1.1/timestamp.js');\n\nconst schemas = new Map([\n ['core', schema.schema],\n ['failsafe', [map.map, seq.seq, string.string]],\n ['json', schema$1.schema],\n ['yaml11', schema$2.schema],\n ['yaml-1.1', schema$2.schema]\n]);\nconst tagsByName = {\n binary: binary.binary,\n bool: bool.boolTag,\n float: float.float,\n floatExp: float.floatExp,\n floatNaN: float.floatNaN,\n floatTime: timestamp.floatTime,\n int: int.int,\n intHex: int.intHex,\n intOct: int.intOct,\n intTime: timestamp.intTime,\n map: map.map,\n merge: merge.merge,\n null: _null.nullTag,\n omap: omap.omap,\n pairs: pairs.pairs,\n seq: seq.seq,\n set: set.set,\n timestamp: timestamp.timestamp\n};\nconst coreKnownTags = {\n 'tag:yaml.org,2002:binary': binary.binary,\n 'tag:yaml.org,2002:merge': merge.merge,\n 'tag:yaml.org,2002:omap': omap.omap,\n 'tag:yaml.org,2002:pairs': pairs.pairs,\n 'tag:yaml.org,2002:set': set.set,\n 'tag:yaml.org,2002:timestamp': timestamp.timestamp\n};\nfunction getTags(customTags, schemaName, addMergeTag) {\n const schemaTags = schemas.get(schemaName);\n if (schemaTags && !customTags) {\n return addMergeTag && !schemaTags.includes(merge.merge)\n ? schemaTags.concat(merge.merge)\n : schemaTags.slice();\n }\n let tags = schemaTags;\n if (!tags) {\n if (Array.isArray(customTags))\n tags = [];\n else {\n const keys = Array.from(schemas.keys())\n .filter(key => key !== 'yaml11')\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown schema \"${schemaName}\"; use one of ${keys} or define customTags array`);\n }\n }\n if (Array.isArray(customTags)) {\n for (const tag of customTags)\n tags = tags.concat(tag);\n }\n else if (typeof customTags === 'function') {\n tags = customTags(tags.slice());\n }\n if (addMergeTag)\n tags = tags.concat(merge.merge);\n return tags.reduce((tags, tag) => {\n const tagObj = typeof tag === 'string' ? tagsByName[tag] : tag;\n if (!tagObj) {\n const tagName = JSON.stringify(tag);\n const keys = Object.keys(tagsByName)\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`);\n }\n if (!tags.includes(tagObj))\n tags.push(tagObj);\n return tags;\n }, []);\n}\n\nexports.coreKnownTags = coreKnownTags;\nexports.getTags = getTags;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar map = require('./common/map.js');\nvar seq = require('./common/seq.js');\nvar string = require('./common/string.js');\nvar tags = require('./tags.js');\n\nconst sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;\nclass Schema {\n constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {\n this.compat = Array.isArray(compat)\n ? tags.getTags(compat, 'compat')\n : compat\n ? tags.getTags(null, compat)\n : null;\n this.name = (typeof schema === 'string' && schema) || 'core';\n this.knownTags = resolveKnownTags ? tags.coreKnownTags : {};\n this.tags = tags.getTags(customTags, this.name, merge);\n this.toStringOptions = toStringDefaults ?? null;\n Object.defineProperty(this, identity.MAP, { value: map.map });\n Object.defineProperty(this, identity.SCALAR, { value: string.string });\n Object.defineProperty(this, identity.SEQ, { value: seq.seq });\n // Used by createMap()\n this.sortMapEntries =\n typeof sortMapEntries === 'function'\n ? sortMapEntries\n : sortMapEntries === true\n ? sortMapEntriesByKey\n : null;\n }\n clone() {\n const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));\n copy.tags = this.tags.slice();\n return copy;\n }\n}\n\nexports.Schema = Schema;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyDocument(doc, options) {\n const lines = [];\n let hasDirectives = options.directives === true;\n if (options.directives !== false && doc.directives) {\n const dir = doc.directives.toString(doc);\n if (dir) {\n lines.push(dir);\n hasDirectives = true;\n }\n else if (doc.directives.docStart)\n hasDirectives = true;\n }\n if (hasDirectives)\n lines.push('---');\n const ctx = stringify.createStringifyContext(doc, options);\n const { commentString } = ctx.options;\n if (doc.commentBefore) {\n if (lines.length !== 1)\n lines.unshift('');\n const cs = commentString(doc.commentBefore);\n lines.unshift(stringifyComment.indentComment(cs, ''));\n }\n let chompKeep = false;\n let contentComment = null;\n if (doc.contents) {\n if (identity.isNode(doc.contents)) {\n if (doc.contents.spaceBefore && hasDirectives)\n lines.push('');\n if (doc.contents.commentBefore) {\n const cs = commentString(doc.contents.commentBefore);\n lines.push(stringifyComment.indentComment(cs, ''));\n }\n // top-level block scalars need to be indented if followed by a comment\n ctx.forceBlockIndent = !!doc.comment;\n contentComment = doc.contents.comment;\n }\n const onChompKeep = contentComment ? undefined : () => (chompKeep = true);\n let body = stringify.stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);\n if (contentComment)\n body += stringifyComment.lineComment(body, '', commentString(contentComment));\n if ((body[0] === '|' || body[0] === '>') &&\n lines[lines.length - 1] === '---') {\n // Top-level block scalars with a preceding doc marker ought to use the\n // same line for their header.\n lines[lines.length - 1] = `--- ${body}`;\n }\n else\n lines.push(body);\n }\n else {\n lines.push(stringify.stringify(doc.contents, ctx));\n }\n if (doc.directives?.docEnd) {\n if (doc.comment) {\n const cs = commentString(doc.comment);\n if (cs.includes('\\n')) {\n lines.push('...');\n lines.push(stringifyComment.indentComment(cs, ''));\n }\n else {\n lines.push(`... ${cs}`);\n }\n }\n else {\n lines.push('...');\n }\n }\n else {\n let dc = doc.comment;\n if (dc && chompKeep)\n dc = dc.replace(/^\\n+/, '');\n if (dc) {\n if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')\n lines.push('');\n lines.push(stringifyComment.indentComment(commentString(dc), ''));\n }\n }\n return lines.join('\\n') + '\\n';\n}\n\nexports.stringifyDocument = stringifyDocument;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar Collection = require('../nodes/Collection.js');\nvar identity = require('../nodes/identity.js');\nvar Pair = require('../nodes/Pair.js');\nvar toJS = require('../nodes/toJS.js');\nvar Schema = require('../schema/Schema.js');\nvar stringifyDocument = require('../stringify/stringifyDocument.js');\nvar anchors = require('./anchors.js');\nvar applyReviver = require('./applyReviver.js');\nvar createNode = require('./createNode.js');\nvar directives = require('./directives.js');\n\nclass Document {\n constructor(value, replacer, options) {\n /** A comment before this Document */\n this.commentBefore = null;\n /** A comment immediately after this Document */\n this.comment = null;\n /** Errors encountered during parsing. */\n this.errors = [];\n /** Warnings encountered during parsing. */\n this.warnings = [];\n Object.defineProperty(this, identity.NODE_TYPE, { value: identity.DOC });\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const opt = Object.assign({\n intAsBigInt: false,\n keepSourceTokens: false,\n logLevel: 'warn',\n prettyErrors: true,\n strict: true,\n stringKeys: false,\n uniqueKeys: true,\n version: '1.2'\n }, options);\n this.options = opt;\n let { version } = opt;\n if (options?._directives) {\n this.directives = options._directives.atDocument();\n if (this.directives.yaml.explicit)\n version = this.directives.yaml.version;\n }\n else\n this.directives = new directives.Directives({ version });\n this.setSchema(version, options);\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents =\n value === undefined ? null : this.createNode(value, _replacer, options);\n }\n /**\n * Create a deep copy of this Document and its contents.\n *\n * Custom Node values that inherit from `Object` still refer to their original instances.\n */\n clone() {\n const copy = Object.create(Document.prototype, {\n [identity.NODE_TYPE]: { value: identity.DOC }\n });\n copy.commentBefore = this.commentBefore;\n copy.comment = this.comment;\n copy.errors = this.errors.slice();\n copy.warnings = this.warnings.slice();\n copy.options = Object.assign({}, this.options);\n if (this.directives)\n copy.directives = this.directives.clone();\n copy.schema = this.schema.clone();\n // @ts-expect-error We can't really know that this matches Contents.\n copy.contents = identity.isNode(this.contents)\n ? this.contents.clone(copy.schema)\n : this.contents;\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** Adds a value to the document. */\n add(value) {\n if (assertCollection(this.contents))\n this.contents.add(value);\n }\n /** Adds a value to the document. */\n addIn(path, value) {\n if (assertCollection(this.contents))\n this.contents.addIn(path, value);\n }\n /**\n * Create a new `Alias` node, ensuring that the target `node` has the required anchor.\n *\n * If `node` already has an anchor, `name` is ignored.\n * Otherwise, the `node.anchor` value will be set to `name`,\n * or if an anchor with that name is already present in the document,\n * `name` will be used as a prefix for a new unique anchor.\n * If `name` is undefined, the generated anchor will use 'a' as a prefix.\n */\n createAlias(node, name) {\n if (!node.anchor) {\n const prev = anchors.anchorNames(this);\n node.anchor =\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n !name || prev.has(name) ? anchors.findNewAnchor(name || 'a', prev) : name;\n }\n return new Alias.Alias(node.anchor);\n }\n createNode(value, replacer, options) {\n let _replacer = undefined;\n if (typeof replacer === 'function') {\n value = replacer.call({ '': value }, '', value);\n _replacer = replacer;\n }\n else if (Array.isArray(replacer)) {\n const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;\n const asStr = replacer.filter(keyToStr).map(String);\n if (asStr.length > 0)\n replacer = replacer.concat(asStr);\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {};\n const { onAnchor, setAnchors, sourceObjects } = anchors.createNodeAnchors(this, \n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n anchorPrefix || 'a');\n const ctx = {\n aliasDuplicateObjects: aliasDuplicateObjects ?? true,\n keepUndefined: keepUndefined ?? false,\n onAnchor,\n onTagObj,\n replacer: _replacer,\n schema: this.schema,\n sourceObjects\n };\n const node = createNode.createNode(value, tag, ctx);\n if (flow && identity.isCollection(node))\n node.flow = true;\n setAnchors();\n return node;\n }\n /**\n * Convert a key and a value into a `Pair` using the current schema,\n * recursively wrapping all values as `Scalar` or `Collection` nodes.\n */\n createPair(key, value, options = {}) {\n const k = this.createNode(key, null, options);\n const v = this.createNode(value, null, options);\n return new Pair.Pair(k, v);\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n return assertCollection(this.contents) ? this.contents.delete(key) : false;\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n if (Collection.isEmptyPath(path)) {\n if (this.contents == null)\n return false;\n // @ts-expect-error Presumed impossible if Strict extends false\n this.contents = null;\n return true;\n }\n return assertCollection(this.contents)\n ? this.contents.deleteIn(path)\n : false;\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n get(key, keepScalar) {\n return identity.isCollection(this.contents)\n ? this.contents.get(key, keepScalar)\n : undefined;\n }\n /**\n * Returns item at `path`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n if (Collection.isEmptyPath(path))\n return !keepScalar && identity.isScalar(this.contents)\n ? this.contents.value\n : this.contents;\n return identity.isCollection(this.contents)\n ? this.contents.getIn(path, keepScalar)\n : undefined;\n }\n /**\n * Checks if the document includes a value with the key `key`.\n */\n has(key) {\n return identity.isCollection(this.contents) ? this.contents.has(key) : false;\n }\n /**\n * Checks if the document includes a value at `path`.\n */\n hasIn(path) {\n if (Collection.isEmptyPath(path))\n return this.contents !== undefined;\n return identity.isCollection(this.contents) ? this.contents.hasIn(path) : false;\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n set(key, value) {\n if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = Collection.collectionFromPath(this.schema, [key], value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.set(key, value);\n }\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n if (Collection.isEmptyPath(path)) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = value;\n }\n else if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = Collection.collectionFromPath(this.schema, Array.from(path), value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.setIn(path, value);\n }\n }\n /**\n * Change the YAML version and schema used by the document.\n * A `null` version disables support for directives, explicit tags, anchors, and aliases.\n * It also requires the `schema` option to be given as a `Schema` instance value.\n *\n * Overrides all previously set schema options.\n */\n setSchema(version, options = {}) {\n if (typeof version === 'number')\n version = String(version);\n let opt;\n switch (version) {\n case '1.1':\n if (this.directives)\n this.directives.yaml.version = '1.1';\n else\n this.directives = new directives.Directives({ version: '1.1' });\n opt = { resolveKnownTags: false, schema: 'yaml-1.1' };\n break;\n case '1.2':\n case 'next':\n if (this.directives)\n this.directives.yaml.version = version;\n else\n this.directives = new directives.Directives({ version });\n opt = { resolveKnownTags: true, schema: 'core' };\n break;\n case null:\n if (this.directives)\n delete this.directives;\n opt = null;\n break;\n default: {\n const sv = JSON.stringify(version);\n throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);\n }\n }\n // Not using `instanceof Schema` to allow for duck typing\n if (options.schema instanceof Object)\n this.schema = options.schema;\n else if (opt)\n this.schema = new Schema.Schema(Object.assign(opt, options));\n else\n throw new Error(`With a null YAML version, the { schema: Schema } option is required`);\n }\n // json & jsonArg are only used from toJSON()\n toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n const ctx = {\n anchors: new Map(),\n doc: this,\n keep: !json,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS.toJS(this.contents, jsonArg ?? '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n /**\n * A JSON representation of the document `contents`.\n *\n * @param jsonArg Used by `JSON.stringify` to indicate the array index or\n * property name.\n */\n toJSON(jsonArg, onAnchor) {\n return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });\n }\n /** A YAML representation of the document. */\n toString(options = {}) {\n if (this.errors.length > 0)\n throw new Error('Document with errors cannot be stringified');\n if ('indent' in options &&\n (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {\n const s = JSON.stringify(options.indent);\n throw new Error(`\"indent\" option must be a positive integer, not ${s}`);\n }\n return stringifyDocument.stringifyDocument(this, options);\n }\n}\nfunction assertCollection(contents) {\n if (identity.isCollection(contents))\n return true;\n throw new Error('Expected a YAML collection as document contents');\n}\n\nexports.Document = Document;\n","'use strict';\n\nclass YAMLError extends Error {\n constructor(name, pos, code, message) {\n super();\n this.name = name;\n this.code = code;\n this.message = message;\n this.pos = pos;\n }\n}\nclass YAMLParseError extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLParseError', pos, code, message);\n }\n}\nclass YAMLWarning extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLWarning', pos, code, message);\n }\n}\nconst prettifyError = (src, lc) => (error) => {\n if (error.pos[0] === -1)\n return;\n error.linePos = error.pos.map(pos => lc.linePos(pos));\n const { line, col } = error.linePos[0];\n error.message += ` at line ${line}, column ${col}`;\n let ci = col - 1;\n let lineStr = src\n .substring(lc.lineStarts[line - 1], lc.lineStarts[line])\n .replace(/[\\n\\r]+$/, '');\n // Trim to max 80 chars, keeping col position near the middle\n if (ci >= 60 && lineStr.length > 80) {\n const trimStart = Math.min(ci - 39, lineStr.length - 79);\n lineStr = '…' + lineStr.substring(trimStart);\n ci -= trimStart - 1;\n }\n if (lineStr.length > 80)\n lineStr = lineStr.substring(0, 79) + '…';\n // Include previous line in context if pointing at line start\n if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {\n // Regexp won't match if start is trimmed\n let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);\n if (prev.length > 80)\n prev = prev.substring(0, 79) + '…\\n';\n lineStr = prev + lineStr;\n }\n if (/[^ ]/.test(lineStr)) {\n let count = 1;\n const end = error.linePos[1];\n if (end?.line === line && end.col > col) {\n count = Math.max(1, Math.min(end.col - col, 80 - ci));\n }\n const pointer = ' '.repeat(ci) + '^'.repeat(count);\n error.message += `:\\n\\n${lineStr}\\n${pointer}\\n`;\n }\n};\n\nexports.YAMLError = YAMLError;\nexports.YAMLParseError = YAMLParseError;\nexports.YAMLWarning = YAMLWarning;\nexports.prettifyError = prettifyError;\n","'use strict';\n\nfunction resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {\n let spaceBefore = false;\n let atNewline = startOnNewline;\n let hasSpace = startOnNewline;\n let comment = '';\n let commentSep = '';\n let hasNewline = false;\n let reqSpace = false;\n let tab = null;\n let anchor = null;\n let tag = null;\n let newlineAfterProp = null;\n let comma = null;\n let found = null;\n let start = null;\n for (const token of tokens) {\n if (reqSpace) {\n if (token.type !== 'space' &&\n token.type !== 'newline' &&\n token.type !== 'comma')\n onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n reqSpace = false;\n }\n if (tab) {\n if (atNewline && token.type !== 'comment' && token.type !== 'newline') {\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n }\n tab = null;\n }\n switch (token.type) {\n case 'space':\n // At the doc level, tabs at line start may be parsed\n // as leading white space rather than indentation.\n // In a flow collection, only the parser handles indent.\n if (!flow &&\n (indicator !== 'doc-start' || next?.type !== 'flow-collection') &&\n token.source.includes('\\t')) {\n tab = token;\n }\n hasSpace = true;\n break;\n case 'comment': {\n if (!hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = token.source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += commentSep + cb;\n commentSep = '';\n atNewline = false;\n break;\n }\n case 'newline':\n if (atNewline) {\n if (comment)\n comment += token.source;\n else if (!found || indicator !== 'seq-item-ind')\n spaceBefore = true;\n }\n else\n commentSep += token.source;\n atNewline = true;\n hasNewline = true;\n if (anchor || tag)\n newlineAfterProp = token;\n hasSpace = true;\n break;\n case 'anchor':\n if (anchor)\n onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor');\n if (token.source.endsWith(':'))\n onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true);\n anchor = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n case 'tag': {\n if (tag)\n onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag');\n tag = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n }\n case indicator:\n // Could here handle preceding comments differently\n if (anchor || tag)\n onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);\n if (found)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow ?? 'collection'}`);\n found = token;\n atNewline =\n indicator === 'seq-item-ind' || indicator === 'explicit-key-ind';\n hasSpace = false;\n break;\n case 'comma':\n if (flow) {\n if (comma)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`);\n comma = token;\n atNewline = false;\n hasSpace = false;\n break;\n }\n // else fallthrough\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`);\n atNewline = false;\n hasSpace = false;\n }\n }\n const last = tokens[tokens.length - 1];\n const end = last ? last.offset + last.source.length : offset;\n if (reqSpace &&\n next &&\n next.type !== 'space' &&\n next.type !== 'newline' &&\n next.type !== 'comma' &&\n (next.type !== 'scalar' || next.source !== '')) {\n onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n }\n if (tab &&\n ((atNewline && tab.indent <= parentIndent) ||\n next?.type === 'block-map' ||\n next?.type === 'block-seq'))\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n return {\n comma,\n found,\n spaceBefore,\n comment,\n hasNewline,\n anchor,\n tag,\n newlineAfterProp,\n end,\n start: start ?? end\n };\n}\n\nexports.resolveProps = resolveProps;\n","'use strict';\n\nfunction containsNewline(key) {\n if (!key)\n return null;\n switch (key.type) {\n case 'alias':\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n if (key.source.includes('\\n'))\n return true;\n if (key.end)\n for (const st of key.end)\n if (st.type === 'newline')\n return true;\n return false;\n case 'flow-collection':\n for (const it of key.items) {\n for (const st of it.start)\n if (st.type === 'newline')\n return true;\n if (it.sep)\n for (const st of it.sep)\n if (st.type === 'newline')\n return true;\n if (containsNewline(it.key) || containsNewline(it.value))\n return true;\n }\n return false;\n default:\n return true;\n }\n}\n\nexports.containsNewline = containsNewline;\n","'use strict';\n\nvar utilContainsNewline = require('./util-contains-newline.js');\n\nfunction flowIndentCheck(indent, fc, onError) {\n if (fc?.type === 'flow-collection') {\n const end = fc.end[0];\n if (end.indent === indent &&\n (end.source === ']' || end.source === '}') &&\n utilContainsNewline.containsNewline(fc)) {\n const msg = 'Flow end indicator should be more indented than parent';\n onError(end, 'BAD_INDENT', msg, true);\n }\n }\n}\n\nexports.flowIndentCheck = flowIndentCheck;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\n\nfunction mapIncludes(ctx, items, search) {\n const { uniqueKeys } = ctx.options;\n if (uniqueKeys === false)\n return false;\n const isEqual = typeof uniqueKeys === 'function'\n ? uniqueKeys\n : (a, b) => a === b || (identity.isScalar(a) && identity.isScalar(b) && a.value === b.value);\n return items.some(pair => isEqual(pair.key, search));\n}\n\nexports.mapIncludes = mapIncludes;\n","'use strict';\n\nvar Pair = require('../nodes/Pair.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilContainsNewline = require('./util-contains-newline.js');\nvar utilFlowIndentCheck = require('./util-flow-indent-check.js');\nvar utilMapIncludes = require('./util-map-includes.js');\n\nconst startColMsg = 'All mapping items must start at the same column';\nfunction resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLMap.YAMLMap;\n const map = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n let offset = bm.offset;\n let commentEnd = null;\n for (const collItem of bm.items) {\n const { start, key, sep, value } = collItem;\n // key properties\n const keyProps = resolveProps.resolveProps(start, {\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: bm.indent,\n startOnNewline: true\n });\n const implicitKey = !keyProps.found;\n if (implicitKey) {\n if (key) {\n if (key.type === 'block-seq')\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key');\n else if ('indent' in key && key.indent !== bm.indent)\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n if (!keyProps.anchor && !keyProps.tag && !sep) {\n commentEnd = keyProps.end;\n if (keyProps.comment) {\n if (map.comment)\n map.comment += '\\n' + keyProps.comment;\n else\n map.comment = keyProps.comment;\n }\n continue;\n }\n if (keyProps.newlineAfterProp || utilContainsNewline.containsNewline(key)) {\n onError(key ?? start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line');\n }\n }\n else if (keyProps.found?.indent !== bm.indent) {\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n // key value\n ctx.atKey = true;\n const keyStart = keyProps.end;\n const keyNode = key\n ? composeNode(ctx, key, keyProps, onError)\n : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bm.indent, key, onError);\n ctx.atKey = false;\n if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n // value properties\n const valueProps = resolveProps.resolveProps(sep ?? [], {\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: bm.indent,\n startOnNewline: !key || key.type === 'block-scalar'\n });\n offset = valueProps.end;\n if (valueProps.found) {\n if (implicitKey) {\n if (value?.type === 'block-map' && !valueProps.hasNewline)\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings');\n if (ctx.options.strict &&\n keyProps.start < valueProps.found.offset - 1024)\n onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key');\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : composeEmptyNode(ctx, offset, sep, null, valueProps, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bm.indent, value, onError);\n offset = valueNode.range[2];\n const pair = new Pair.Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n else {\n // key with no value\n if (implicitKey)\n onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values');\n if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair.Pair(keyNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n }\n if (commentEnd && commentEnd < offset)\n onError(commentEnd, 'IMPOSSIBLE', 'Map comment with trailing content');\n map.range = [bm.offset, offset, commentEnd ?? offset];\n return map;\n}\n\nexports.resolveBlockMap = resolveBlockMap;\n","'use strict';\n\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilFlowIndentCheck = require('./util-flow-indent-check.js');\n\nfunction resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLSeq.YAMLSeq;\n const seq = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = bs.offset;\n let commentEnd = null;\n for (const { start, value } of bs.items) {\n const props = resolveProps.resolveProps(start, {\n indicator: 'seq-item-ind',\n next: value,\n offset,\n onError,\n parentIndent: bs.indent,\n startOnNewline: true\n });\n if (!props.found) {\n if (props.anchor || props.tag || value) {\n if (value?.type === 'block-seq')\n onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column');\n else\n onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');\n }\n else {\n commentEnd = props.end;\n if (props.comment)\n seq.comment = props.comment;\n continue;\n }\n }\n const node = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, start, null, props, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bs.indent, value, onError);\n offset = node.range[2];\n seq.items.push(node);\n }\n seq.range = [bs.offset, offset, commentEnd ?? offset];\n return seq;\n}\n\nexports.resolveBlockSeq = resolveBlockSeq;\n","'use strict';\n\nfunction resolveEnd(end, offset, reqSpace, onError) {\n let comment = '';\n if (end) {\n let hasSpace = false;\n let sep = '';\n for (const token of end) {\n const { source, type } = token;\n switch (type) {\n case 'space':\n hasSpace = true;\n break;\n case 'comment': {\n if (reqSpace && !hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += sep + cb;\n sep = '';\n break;\n }\n case 'newline':\n if (comment)\n sep += source;\n hasSpace = true;\n break;\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`);\n }\n offset += source.length;\n }\n }\n return { comment, offset };\n}\n\nexports.resolveEnd = resolveEnd;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Pair = require('../nodes/Pair.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilContainsNewline = require('./util-contains-newline.js');\nvar utilMapIncludes = require('./util-map-includes.js');\n\nconst blockMsg = 'Block collections are not allowed within flow collections';\nconst isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');\nfunction resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) {\n const isMap = fc.start.source === '{';\n const fcName = isMap ? 'flow map' : 'flow sequence';\n const NodeClass = (tag?.nodeClass ?? (isMap ? YAMLMap.YAMLMap : YAMLSeq.YAMLSeq));\n const coll = new NodeClass(ctx.schema);\n coll.flow = true;\n const atRoot = ctx.atRoot;\n if (atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = fc.offset + fc.start.source.length;\n for (let i = 0; i < fc.items.length; ++i) {\n const collItem = fc.items[i];\n const { start, key, sep, value } = collItem;\n const props = resolveProps.resolveProps(start, {\n flow: fcName,\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (!props.found) {\n if (!props.anchor && !props.tag && !sep && !value) {\n if (i === 0 && props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n else if (i < fc.items.length - 1)\n onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`);\n if (props.comment) {\n if (coll.comment)\n coll.comment += '\\n' + props.comment;\n else\n coll.comment = props.comment;\n }\n offset = props.end;\n continue;\n }\n if (!isMap && ctx.options.strict && utilContainsNewline.containsNewline(key))\n onError(key, // checked by containsNewline()\n 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n }\n if (i === 0) {\n if (props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n }\n else {\n if (!props.comma)\n onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`);\n if (props.comment) {\n let prevItemComment = '';\n loop: for (const st of start) {\n switch (st.type) {\n case 'comma':\n case 'space':\n break;\n case 'comment':\n prevItemComment = st.source.substring(1);\n break loop;\n default:\n break loop;\n }\n }\n if (prevItemComment) {\n let prev = coll.items[coll.items.length - 1];\n if (identity.isPair(prev))\n prev = prev.value ?? prev.key;\n if (prev.comment)\n prev.comment += '\\n' + prevItemComment;\n else\n prev.comment = prevItemComment;\n props.comment = props.comment.substring(prevItemComment.length + 1);\n }\n }\n }\n if (!isMap && !sep && !props.found) {\n // item is a value in a seq\n // → key & sep are empty, start does not include ? or :\n const valueNode = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, sep, null, props, onError);\n coll.items.push(valueNode);\n offset = valueNode.range[2];\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else {\n // item is a key+value pair\n // key value\n ctx.atKey = true;\n const keyStart = props.end;\n const keyNode = key\n ? composeNode(ctx, key, props, onError)\n : composeEmptyNode(ctx, keyStart, start, null, props, onError);\n if (isBlock(key))\n onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);\n ctx.atKey = false;\n // value properties\n const valueProps = resolveProps.resolveProps(sep ?? [], {\n flow: fcName,\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (valueProps.found) {\n if (!isMap && !props.found && ctx.options.strict) {\n if (sep)\n for (const st of sep) {\n if (st === valueProps.found)\n break;\n if (st.type === 'newline') {\n onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n break;\n }\n }\n if (props.start < valueProps.found.offset - 1024)\n onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key');\n }\n }\n else if (value) {\n if ('source' in value && value.source?.[0] === ':')\n onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);\n else\n onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : valueProps.found\n ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError)\n : null;\n if (valueNode) {\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair.Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n if (isMap) {\n const map = coll;\n if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n map.items.push(pair);\n }\n else {\n const map = new YAMLMap.YAMLMap(ctx.schema);\n map.flow = true;\n map.items.push(pair);\n const endRange = (valueNode ?? keyNode).range;\n map.range = [keyNode.range[0], endRange[1], endRange[2]];\n coll.items.push(map);\n }\n offset = valueNode ? valueNode.range[2] : valueProps.end;\n }\n }\n const expectedEnd = isMap ? '}' : ']';\n const [ce, ...ee] = fc.end;\n let cePos = offset;\n if (ce?.source === expectedEnd)\n cePos = ce.offset + ce.source.length;\n else {\n const name = fcName[0].toUpperCase() + fcName.substring(1);\n const msg = atRoot\n ? `${name} must end with a ${expectedEnd}`\n : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;\n onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg);\n if (ce && ce.source.length !== 1)\n ee.unshift(ce);\n }\n if (ee.length > 0) {\n const end = resolveEnd.resolveEnd(ee, cePos, ctx.options.strict, onError);\n if (end.comment) {\n if (coll.comment)\n coll.comment += '\\n' + end.comment;\n else\n coll.comment = end.comment;\n }\n coll.range = [fc.offset, cePos, end.offset];\n }\n else {\n coll.range = [fc.offset, cePos, cePos];\n }\n return coll;\n}\n\nexports.resolveFlowCollection = resolveFlowCollection;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveBlockMap = require('./resolve-block-map.js');\nvar resolveBlockSeq = require('./resolve-block-seq.js');\nvar resolveFlowCollection = require('./resolve-flow-collection.js');\n\nfunction resolveCollection(CN, ctx, token, onError, tagName, tag) {\n const coll = token.type === 'block-map'\n ? resolveBlockMap.resolveBlockMap(CN, ctx, token, onError, tag)\n : token.type === 'block-seq'\n ? resolveBlockSeq.resolveBlockSeq(CN, ctx, token, onError, tag)\n : resolveFlowCollection.resolveFlowCollection(CN, ctx, token, onError, tag);\n const Coll = coll.constructor;\n // If we got a tagName matching the class, or the tag name is '!',\n // then use the tagName from the node class used to create it.\n if (tagName === '!' || tagName === Coll.tagName) {\n coll.tag = Coll.tagName;\n return coll;\n }\n if (tagName)\n coll.tag = tagName;\n return coll;\n}\nfunction composeCollection(CN, ctx, token, props, onError) {\n const tagToken = props.tag;\n const tagName = !tagToken\n ? null\n : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));\n if (token.type === 'block-seq') {\n const { anchor, newlineAfterProp: nl } = props;\n const lastProp = anchor && tagToken\n ? anchor.offset > tagToken.offset\n ? anchor\n : tagToken\n : (anchor ?? tagToken);\n if (lastProp && (!nl || nl.offset < lastProp.offset)) {\n const message = 'Missing newline after block sequence props';\n onError(lastProp, 'MISSING_CHAR', message);\n }\n }\n const expType = token.type === 'block-map'\n ? 'map'\n : token.type === 'block-seq'\n ? 'seq'\n : token.start.source === '{'\n ? 'map'\n : 'seq';\n // shortcut: check if it's a generic YAMLMap or YAMLSeq\n // before jumping into the custom tag logic.\n if (!tagToken ||\n !tagName ||\n tagName === '!' ||\n (tagName === YAMLMap.YAMLMap.tagName && expType === 'map') ||\n (tagName === YAMLSeq.YAMLSeq.tagName && expType === 'seq')) {\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType);\n if (!tag) {\n const kt = ctx.schema.knownTags[tagName];\n if (kt?.collection === expType) {\n ctx.schema.tags.push(Object.assign({}, kt, { default: false }));\n tag = kt;\n }\n else {\n if (kt) {\n onError(tagToken, 'BAD_COLLECTION_TYPE', `${kt.tag} used for ${expType} collection, but expects ${kt.collection ?? 'scalar'}`, true);\n }\n else {\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true);\n }\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n }\n const coll = resolveCollection(CN, ctx, token, onError, tagName, tag);\n const res = tag.resolve?.(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options) ?? coll;\n const node = identity.isNode(res)\n ? res\n : new Scalar.Scalar(res);\n node.range = coll.range;\n node.tag = tagName;\n if (tag?.format)\n node.format = tag.format;\n return node;\n}\n\nexports.composeCollection = composeCollection;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\n\nfunction resolveBlockScalar(ctx, scalar, onError) {\n const start = scalar.offset;\n const header = parseBlockScalarHeader(scalar, ctx.options.strict, onError);\n if (!header)\n return { value: '', type: null, comment: '', range: [start, start, start] };\n const type = header.mode === '>' ? Scalar.Scalar.BLOCK_FOLDED : Scalar.Scalar.BLOCK_LITERAL;\n const lines = scalar.source ? splitLines(scalar.source) : [];\n // determine the end of content & start of chomping\n let chompStart = lines.length;\n for (let i = lines.length - 1; i >= 0; --i) {\n const content = lines[i][1];\n if (content === '' || content === '\\r')\n chompStart = i;\n else\n break;\n }\n // shortcut for empty contents\n if (chompStart === 0) {\n const value = header.chomp === '+' && lines.length > 0\n ? '\\n'.repeat(Math.max(1, lines.length - 1))\n : '';\n let end = start + header.length;\n if (scalar.source)\n end += scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n }\n // find the indentation level to trim from start\n let trimIndent = scalar.indent + header.indent;\n let offset = scalar.offset + header.length;\n let contentStart = 0;\n for (let i = 0; i < chompStart; ++i) {\n const [indent, content] = lines[i];\n if (content === '' || content === '\\r') {\n if (header.indent === 0 && indent.length > trimIndent)\n trimIndent = indent.length;\n }\n else {\n if (indent.length < trimIndent) {\n const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';\n onError(offset + indent.length, 'MISSING_CHAR', message);\n }\n if (header.indent === 0)\n trimIndent = indent.length;\n contentStart = i;\n if (trimIndent === 0 && !ctx.atRoot) {\n const message = 'Block scalar values in collections must be indented';\n onError(offset, 'BAD_INDENT', message);\n }\n break;\n }\n offset += indent.length + content.length + 1;\n }\n // include trailing more-indented empty lines in content\n for (let i = lines.length - 1; i >= chompStart; --i) {\n if (lines[i][0].length > trimIndent)\n chompStart = i + 1;\n }\n let value = '';\n let sep = '';\n let prevMoreIndented = false;\n // leading whitespace is kept intact\n for (let i = 0; i < contentStart; ++i)\n value += lines[i][0].slice(trimIndent) + '\\n';\n for (let i = contentStart; i < chompStart; ++i) {\n let [indent, content] = lines[i];\n offset += indent.length + content.length + 1;\n const crlf = content[content.length - 1] === '\\r';\n if (crlf)\n content = content.slice(0, -1);\n /* istanbul ignore if already caught in lexer */\n if (content && indent.length < trimIndent) {\n const src = header.indent\n ? 'explicit indentation indicator'\n : 'first line';\n const message = `Block scalar lines must not be less indented than their ${src}`;\n onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message);\n indent = '';\n }\n if (type === Scalar.Scalar.BLOCK_LITERAL) {\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n }\n else if (indent.length > trimIndent || content[0] === '\\t') {\n // more-indented content within a folded block\n if (sep === ' ')\n sep = '\\n';\n else if (!prevMoreIndented && sep === '\\n')\n sep = '\\n\\n';\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n prevMoreIndented = true;\n }\n else if (content === '') {\n // empty line\n if (sep === '\\n')\n value += '\\n';\n else\n sep = '\\n';\n }\n else {\n value += sep + content;\n sep = ' ';\n prevMoreIndented = false;\n }\n }\n switch (header.chomp) {\n case '-':\n break;\n case '+':\n for (let i = chompStart; i < lines.length; ++i)\n value += '\\n' + lines[i][0].slice(trimIndent);\n if (value[value.length - 1] !== '\\n')\n value += '\\n';\n break;\n default:\n value += '\\n';\n }\n const end = start + header.length + scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n}\nfunction parseBlockScalarHeader({ offset, props }, strict, onError) {\n /* istanbul ignore if should not happen */\n if (props[0].type !== 'block-scalar-header') {\n onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found');\n return null;\n }\n const { source } = props[0];\n const mode = source[0];\n let indent = 0;\n let chomp = '';\n let error = -1;\n for (let i = 1; i < source.length; ++i) {\n const ch = source[i];\n if (!chomp && (ch === '-' || ch === '+'))\n chomp = ch;\n else {\n const n = Number(ch);\n if (!indent && n)\n indent = n;\n else if (error === -1)\n error = offset + i;\n }\n }\n if (error !== -1)\n onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`);\n let hasSpace = false;\n let comment = '';\n let length = source.length;\n for (let i = 1; i < props.length; ++i) {\n const token = props[i];\n switch (token.type) {\n case 'space':\n hasSpace = true;\n // fallthrough\n case 'newline':\n length += token.source.length;\n break;\n case 'comment':\n if (strict && !hasSpace) {\n const message = 'Comments must be separated from other tokens by white space characters';\n onError(token, 'MISSING_CHAR', message);\n }\n length += token.source.length;\n comment = token.source.substring(1);\n break;\n case 'error':\n onError(token, 'UNEXPECTED_TOKEN', token.message);\n length += token.source.length;\n break;\n /* istanbul ignore next should not happen */\n default: {\n const message = `Unexpected token in block scalar header: ${token.type}`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n const ts = token.source;\n if (ts && typeof ts === 'string')\n length += ts.length;\n }\n }\n }\n return { mode, indent, chomp, comment, length };\n}\n/** @returns Array of lines split up as `[indent, content]` */\nfunction splitLines(source) {\n const split = source.split(/\\n( *)/);\n const first = split[0];\n const m = first.match(/^( *)/);\n const line0 = m?.[1]\n ? [m[1], first.slice(m[1].length)]\n : ['', first];\n const lines = [line0];\n for (let i = 1; i < split.length; i += 2)\n lines.push([split[i], split[i + 1]]);\n return lines;\n}\n\nexports.resolveBlockScalar = resolveBlockScalar;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction resolveFlowScalar(scalar, strict, onError) {\n const { offset, type, source, end } = scalar;\n let _type;\n let value;\n const _onError = (rel, code, msg) => onError(offset + rel, code, msg);\n switch (type) {\n case 'scalar':\n _type = Scalar.Scalar.PLAIN;\n value = plainValue(source, _onError);\n break;\n case 'single-quoted-scalar':\n _type = Scalar.Scalar.QUOTE_SINGLE;\n value = singleQuotedValue(source, _onError);\n break;\n case 'double-quoted-scalar':\n _type = Scalar.Scalar.QUOTE_DOUBLE;\n value = doubleQuotedValue(source, _onError);\n break;\n /* istanbul ignore next should not happen */\n default:\n onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);\n return {\n value: '',\n type: null,\n comment: '',\n range: [offset, offset + source.length, offset + source.length]\n };\n }\n const valueEnd = offset + source.length;\n const re = resolveEnd.resolveEnd(end, valueEnd, strict, onError);\n return {\n value,\n type: _type,\n comment: re.comment,\n range: [offset, valueEnd, re.offset]\n };\n}\nfunction plainValue(source, onError) {\n let badChar = '';\n switch (source[0]) {\n /* istanbul ignore next should not happen */\n case '\\t':\n badChar = 'a tab character';\n break;\n case ',':\n badChar = 'flow indicator character ,';\n break;\n case '%':\n badChar = 'directive indicator character %';\n break;\n case '|':\n case '>': {\n badChar = `block scalar indicator ${source[0]}`;\n break;\n }\n case '@':\n case '`': {\n badChar = `reserved character ${source[0]}`;\n break;\n }\n }\n if (badChar)\n onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);\n return foldLines(source);\n}\nfunction singleQuotedValue(source, onError) {\n if (source[source.length - 1] !== \"'\" || source.length === 1)\n onError(source.length, 'MISSING_CHAR', \"Missing closing 'quote\");\n return foldLines(source.slice(1, -1)).replace(/''/g, \"'\");\n}\nfunction foldLines(source) {\n /**\n * The negative lookbehind here and in the `re` RegExp is to\n * prevent causing a polynomial search time in certain cases.\n *\n * The try-catch is for Safari, which doesn't support this yet:\n * https://caniuse.com/js-regexp-lookbehind\n */\n let first, line;\n try {\n first = new RegExp('(.*?)(?<![ \\t])[ \\t]*\\r?\\n', 'sy');\n line = new RegExp('[ \\t]*(.*?)(?:(?<![ \\t])[ \\t]*)?\\r?\\n', 'sy');\n }\n catch {\n first = /(.*?)[ \\t]*\\r?\\n/sy;\n line = /[ \\t]*(.*?)[ \\t]*\\r?\\n/sy;\n }\n let match = first.exec(source);\n if (!match)\n return source;\n let res = match[1];\n let sep = ' ';\n let pos = first.lastIndex;\n line.lastIndex = pos;\n while ((match = line.exec(source))) {\n if (match[1] === '') {\n if (sep === '\\n')\n res += sep;\n else\n sep = '\\n';\n }\n else {\n res += sep + match[1];\n sep = ' ';\n }\n pos = line.lastIndex;\n }\n const last = /[ \\t]*(.*)/sy;\n last.lastIndex = pos;\n match = last.exec(source);\n return res + sep + (match?.[1] ?? '');\n}\nfunction doubleQuotedValue(source, onError) {\n let res = '';\n for (let i = 1; i < source.length - 1; ++i) {\n const ch = source[i];\n if (ch === '\\r' && source[i + 1] === '\\n')\n continue;\n if (ch === '\\n') {\n const { fold, offset } = foldNewline(source, i);\n res += fold;\n i = offset;\n }\n else if (ch === '\\\\') {\n let next = source[++i];\n const cc = escapeCodes[next];\n if (cc)\n res += cc;\n else if (next === '\\n') {\n // skip escaped newlines, but still trim the following line\n next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === '\\r' && source[i + 1] === '\\n') {\n // skip escaped CRLF newlines, but still trim the following line\n next = source[++i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === 'x' || next === 'u' || next === 'U') {\n const length = { x: 2, u: 4, U: 8 }[next];\n res += parseCharCode(source, i + 1, length, onError);\n i += length;\n }\n else {\n const raw = source.substr(i - 1, 2);\n onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n res += raw;\n }\n }\n else if (ch === ' ' || ch === '\\t') {\n // trim trailing whitespace\n const wsStart = i;\n let next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n if (next !== '\\n' && !(next === '\\r' && source[i + 2] === '\\n'))\n res += i > wsStart ? source.slice(wsStart, i + 1) : ch;\n }\n else {\n res += ch;\n }\n }\n if (source[source.length - 1] !== '\"' || source.length === 1)\n onError(source.length, 'MISSING_CHAR', 'Missing closing \"quote');\n return res;\n}\n/**\n * Fold a single newline into a space, multiple newlines to N - 1 newlines.\n * Presumes `source[offset] === '\\n'`\n */\nfunction foldNewline(source, offset) {\n let fold = '';\n let ch = source[offset + 1];\n while (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n if (ch === '\\r' && source[offset + 2] !== '\\n')\n break;\n if (ch === '\\n')\n fold += '\\n';\n offset += 1;\n ch = source[offset + 1];\n }\n if (!fold)\n fold = ' ';\n return { fold, offset };\n}\nconst escapeCodes = {\n '0': '\\0', // null character\n a: '\\x07', // bell character\n b: '\\b', // backspace\n e: '\\x1b', // escape character\n f: '\\f', // form feed\n n: '\\n', // line feed\n r: '\\r', // carriage return\n t: '\\t', // horizontal tab\n v: '\\v', // vertical tab\n N: '\\u0085', // Unicode next line\n _: '\\u00a0', // Unicode non-breaking space\n L: '\\u2028', // Unicode line separator\n P: '\\u2029', // Unicode paragraph separator\n ' ': ' ',\n '\"': '\"',\n '/': '/',\n '\\\\': '\\\\',\n '\\t': '\\t'\n};\nfunction parseCharCode(source, offset, length, onError) {\n const cc = source.substr(offset, length);\n const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n const code = ok ? parseInt(cc, 16) : NaN;\n if (isNaN(code)) {\n const raw = source.substr(offset - 2, length + 2);\n onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n return raw;\n }\n return String.fromCodePoint(code);\n}\n\nexports.resolveFlowScalar = resolveFlowScalar;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveBlockScalar = require('./resolve-block-scalar.js');\nvar resolveFlowScalar = require('./resolve-flow-scalar.js');\n\nfunction composeScalar(ctx, token, tagToken, onError) {\n const { value, type, comment, range } = token.type === 'block-scalar'\n ? resolveBlockScalar.resolveBlockScalar(ctx, token, onError)\n : resolveFlowScalar.resolveFlowScalar(token, ctx.options.strict, onError);\n const tagName = tagToken\n ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))\n : null;\n let tag;\n if (ctx.options.stringKeys && ctx.atKey) {\n tag = ctx.schema[identity.SCALAR];\n }\n else if (tagName)\n tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError);\n else if (token.type === 'scalar')\n tag = findScalarTagByTest(ctx, value, token, onError);\n else\n tag = ctx.schema[identity.SCALAR];\n let scalar;\n try {\n const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options);\n scalar = identity.isScalar(res) ? res : new Scalar.Scalar(res);\n }\n catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg);\n scalar = new Scalar.Scalar(value);\n }\n scalar.range = range;\n scalar.source = value;\n if (type)\n scalar.type = type;\n if (tagName)\n scalar.tag = tagName;\n if (tag.format)\n scalar.format = tag.format;\n if (comment)\n scalar.comment = comment;\n return scalar;\n}\nfunction findScalarTagByName(schema, value, tagName, tagToken, onError) {\n if (tagName === '!')\n return schema[identity.SCALAR]; // non-specific tag\n const matchWithTest = [];\n for (const tag of schema.tags) {\n if (!tag.collection && tag.tag === tagName) {\n if (tag.default && tag.test)\n matchWithTest.push(tag);\n else\n return tag;\n }\n }\n for (const tag of matchWithTest)\n if (tag.test?.test(value))\n return tag;\n const kt = schema.knownTags[tagName];\n if (kt && !kt.collection) {\n // Ensure that the known tag is available for stringifying,\n // but does not get used by default.\n schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));\n return kt;\n }\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');\n return schema[identity.SCALAR];\n}\nfunction findScalarTagByTest({ atKey, directives, schema }, value, token, onError) {\n const tag = schema.tags.find(tag => (tag.default === true || (atKey && tag.default === 'key')) &&\n tag.test?.test(value)) || schema[identity.SCALAR];\n if (schema.compat) {\n const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ??\n schema[identity.SCALAR];\n if (tag.tag !== compat.tag) {\n const ts = directives.tagString(tag.tag);\n const cs = directives.tagString(compat.tag);\n const msg = `Value may be parsed as either ${ts} or ${cs}`;\n onError(token, 'TAG_RESOLVE_FAILED', msg, true);\n }\n }\n return tag;\n}\n\nexports.composeScalar = composeScalar;\n","'use strict';\n\nfunction emptyScalarPosition(offset, before, pos) {\n if (before) {\n pos ?? (pos = before.length);\n for (let i = pos - 1; i >= 0; --i) {\n let st = before[i];\n switch (st.type) {\n case 'space':\n case 'comment':\n case 'newline':\n offset -= st.source.length;\n continue;\n }\n // Technically, an empty scalar is immediately after the last non-empty\n // node, but it's more useful to place it after any whitespace.\n st = before[++i];\n while (st?.type === 'space') {\n offset += st.source.length;\n st = before[++i];\n }\n break;\n }\n }\n return offset;\n}\n\nexports.emptyScalarPosition = emptyScalarPosition;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar composeCollection = require('./compose-collection.js');\nvar composeScalar = require('./compose-scalar.js');\nvar resolveEnd = require('./resolve-end.js');\nvar utilEmptyScalarPosition = require('./util-empty-scalar-position.js');\n\nconst CN = { composeNode, composeEmptyNode };\nfunction composeNode(ctx, token, props, onError) {\n const atKey = ctx.atKey;\n const { spaceBefore, comment, anchor, tag } = props;\n let node;\n let isSrcToken = true;\n switch (token.type) {\n case 'alias':\n node = composeAlias(ctx, token, onError);\n if (anchor || tag)\n onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');\n break;\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'block-scalar':\n node = composeScalar.composeScalar(ctx, token, tag, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n case 'block-map':\n case 'block-seq':\n case 'flow-collection':\n node = composeCollection.composeCollection(CN, ctx, token, props, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n default: {\n const message = token.type === 'error'\n ? token.message\n : `Unsupported token (type: ${token.type})`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError);\n isSrcToken = false;\n }\n }\n if (anchor && node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n if (atKey &&\n ctx.options.stringKeys &&\n (!identity.isScalar(node) ||\n typeof node.value !== 'string' ||\n (node.tag && node.tag !== 'tag:yaml.org,2002:str'))) {\n const msg = 'With stringKeys, all keys must be strings';\n onError(tag ?? token, 'NON_STRING_KEY', msg);\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n if (token.type === 'scalar' && token.source === '')\n node.comment = comment;\n else\n node.commentBefore = comment;\n }\n // @ts-expect-error Type checking misses meaning of isSrcToken\n if (ctx.options.keepSourceTokens && isSrcToken)\n node.srcToken = token;\n return node;\n}\nfunction composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {\n const token = {\n type: 'scalar',\n offset: utilEmptyScalarPosition.emptyScalarPosition(offset, before, pos),\n indent: -1,\n source: ''\n };\n const node = composeScalar.composeScalar(ctx, token, tag, onError);\n if (anchor) {\n node.anchor = anchor.source.substring(1);\n if (node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n node.comment = comment;\n node.range[2] = end;\n }\n return node;\n}\nfunction composeAlias({ options }, { offset, source, end }, onError) {\n const alias = new Alias.Alias(source.substring(1));\n if (alias.source === '')\n onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');\n if (alias.source.endsWith(':'))\n onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);\n const valueEnd = offset + source.length;\n const re = resolveEnd.resolveEnd(end, valueEnd, options.strict, onError);\n alias.range = [offset, valueEnd, re.offset];\n if (re.comment)\n alias.comment = re.comment;\n return alias;\n}\n\nexports.composeEmptyNode = composeEmptyNode;\nexports.composeNode = composeNode;\n","'use strict';\n\nvar Document = require('../doc/Document.js');\nvar composeNode = require('./compose-node.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\n\nfunction composeDoc(options, directives, { offset, start, value, end }, onError) {\n const opts = Object.assign({ _directives: directives }, options);\n const doc = new Document.Document(undefined, opts);\n const ctx = {\n atKey: false,\n atRoot: true,\n directives: doc.directives,\n options: doc.options,\n schema: doc.schema\n };\n const props = resolveProps.resolveProps(start, {\n indicator: 'doc-start',\n next: value ?? end?.[0],\n offset,\n onError,\n parentIndent: 0,\n startOnNewline: true\n });\n if (props.found) {\n doc.directives.docStart = true;\n if (value &&\n (value.type === 'block-map' || value.type === 'block-seq') &&\n !props.hasNewline)\n onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');\n }\n // @ts-expect-error If Contents is set, let's trust the user\n doc.contents = value\n ? composeNode.composeNode(ctx, value, props, onError)\n : composeNode.composeEmptyNode(ctx, props.end, start, null, props, onError);\n const contentEnd = doc.contents.range[2];\n const re = resolveEnd.resolveEnd(end, contentEnd, false, onError);\n if (re.comment)\n doc.comment = re.comment;\n doc.range = [offset, contentEnd, re.offset];\n return doc;\n}\n\nexports.composeDoc = composeDoc;\n","'use strict';\n\nvar node_process = require('process');\nvar directives = require('../doc/directives.js');\nvar Document = require('../doc/Document.js');\nvar errors = require('../errors.js');\nvar identity = require('../nodes/identity.js');\nvar composeDoc = require('./compose-doc.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction getErrorPos(src) {\n if (typeof src === 'number')\n return [src, src + 1];\n if (Array.isArray(src))\n return src.length === 2 ? src : [src[0], src[1]];\n const { offset, source } = src;\n return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n let comment = '';\n let atComment = false;\n let afterEmptyLine = false;\n for (let i = 0; i < prelude.length; ++i) {\n const source = prelude[i];\n switch (source[0]) {\n case '#':\n comment +=\n (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n (source.substring(1) || ' ');\n atComment = true;\n afterEmptyLine = false;\n break;\n case '%':\n if (prelude[i + 1]?.[0] !== '#')\n i += 1;\n atComment = false;\n break;\n default:\n // This may be wrong after doc-end, but in that case it doesn't matter\n if (!atComment)\n afterEmptyLine = true;\n atComment = false;\n }\n }\n return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n constructor(options = {}) {\n this.doc = null;\n this.atDirectives = false;\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n this.onError = (source, code, message, warning) => {\n const pos = getErrorPos(source);\n if (warning)\n this.warnings.push(new errors.YAMLWarning(pos, code, message));\n else\n this.errors.push(new errors.YAMLParseError(pos, code, message));\n };\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.directives = new directives.Directives({ version: options.version || '1.2' });\n this.options = options;\n }\n decorate(doc, afterDoc) {\n const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n //console.log({ dc: doc.comment, prelude, comment })\n if (comment) {\n const dc = doc.contents;\n if (afterDoc) {\n doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n }\n else if (afterEmptyLine || doc.directives.docStart || !dc) {\n doc.commentBefore = comment;\n }\n else if (identity.isCollection(dc) && !dc.flow && dc.items.length > 0) {\n let it = dc.items[0];\n if (identity.isPair(it))\n it = it.key;\n const cb = it.commentBefore;\n it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n else {\n const cb = dc.commentBefore;\n dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n }\n if (afterDoc) {\n Array.prototype.push.apply(doc.errors, this.errors);\n Array.prototype.push.apply(doc.warnings, this.warnings);\n }\n else {\n doc.errors = this.errors;\n doc.warnings = this.warnings;\n }\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n }\n /**\n * Current stream status information.\n *\n * Mostly useful at the end of input for an empty stream.\n */\n streamInfo() {\n return {\n comment: parsePrelude(this.prelude).comment,\n directives: this.directives,\n errors: this.errors,\n warnings: this.warnings\n };\n }\n /**\n * Compose tokens into documents.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *compose(tokens, forceDoc = false, endOffset = -1) {\n for (const token of tokens)\n yield* this.next(token);\n yield* this.end(forceDoc, endOffset);\n }\n /** Advance the composer by one CST token. */\n *next(token) {\n if (node_process.env.LOG_STREAM)\n console.dir(token, { depth: null });\n switch (token.type) {\n case 'directive':\n this.directives.add(token.source, (offset, message, warning) => {\n const pos = getErrorPos(token);\n pos[0] += offset;\n this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n });\n this.prelude.push(token.source);\n this.atDirectives = true;\n break;\n case 'document': {\n const doc = composeDoc.composeDoc(this.options, this.directives, token, this.onError);\n if (this.atDirectives && !doc.directives.docStart)\n this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n this.decorate(doc, false);\n if (this.doc)\n yield this.doc;\n this.doc = doc;\n this.atDirectives = false;\n break;\n }\n case 'byte-order-mark':\n case 'space':\n break;\n case 'comment':\n case 'newline':\n this.prelude.push(token.source);\n break;\n case 'error': {\n const msg = token.source\n ? `${token.message}: ${JSON.stringify(token.source)}`\n : token.message;\n const error = new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n if (this.atDirectives || !this.doc)\n this.errors.push(error);\n else\n this.doc.errors.push(error);\n break;\n }\n case 'doc-end': {\n if (!this.doc) {\n const msg = 'Unexpected doc-end without preceding document';\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n break;\n }\n this.doc.directives.docEnd = true;\n const end = resolveEnd.resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n this.decorate(this.doc, true);\n if (end.comment) {\n const dc = this.doc.comment;\n this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n }\n this.doc.range[2] = end.offset;\n break;\n }\n default:\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n }\n }\n /**\n * Call at end of input to yield any remaining document.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *end(forceDoc = false, endOffset = -1) {\n if (this.doc) {\n this.decorate(this.doc, true);\n yield this.doc;\n this.doc = null;\n }\n else if (forceDoc) {\n const opts = Object.assign({ _directives: this.directives }, this.options);\n const doc = new Document.Document(undefined, opts);\n if (this.atDirectives)\n this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n doc.range = [0, endOffset, endOffset];\n this.decorate(doc, false);\n yield doc;\n }\n }\n}\n\nexports.Composer = Composer;\n","'use strict';\n\nvar resolveBlockScalar = require('../compose/resolve-block-scalar.js');\nvar resolveFlowScalar = require('../compose/resolve-flow-scalar.js');\nvar errors = require('../errors.js');\nvar stringifyString = require('../stringify/stringifyString.js');\n\nfunction resolveAsScalar(token, strict = true, onError) {\n if (token) {\n const _onError = (pos, code, message) => {\n const offset = typeof pos === 'number' ? pos : Array.isArray(pos) ? pos[0] : pos.offset;\n if (onError)\n onError(offset, code, message);\n else\n throw new errors.YAMLParseError([offset, offset + 1], code, message);\n };\n switch (token.type) {\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return resolveFlowScalar.resolveFlowScalar(token, strict, _onError);\n case 'block-scalar':\n return resolveBlockScalar.resolveBlockScalar({ options: { strict } }, token, _onError);\n }\n }\n return null;\n}\n/**\n * Create a new scalar token with `value`\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.end Comments and whitespace after the end of the value, or after the block scalar header. If undefined, a newline will be added.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.indent The indent level of the token.\n * @param context.inFlow Is this scalar within a flow collection? This may affect the resolved type of the token's value.\n * @param context.offset The offset position of the token.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction createScalarToken(value, context) {\n const { implicitKey = false, indent, inFlow = false, offset = -1, type = 'PLAIN' } = context;\n const source = stringifyString.stringifyString({ type, value }, {\n implicitKey,\n indent: indent > 0 ? ' '.repeat(indent) : '',\n inFlow,\n options: { blockQuote: true, lineWidth: -1 }\n });\n const end = context.end ?? [\n { type: 'newline', offset: -1, indent, source: '\\n' }\n ];\n switch (source[0]) {\n case '|':\n case '>': {\n const he = source.indexOf('\\n');\n const head = source.substring(0, he);\n const body = source.substring(he + 1) + '\\n';\n const props = [\n { type: 'block-scalar-header', offset, indent, source: head }\n ];\n if (!addEndtoBlockProps(props, end))\n props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n return { type: 'block-scalar', offset, indent, props, source: body };\n }\n case '\"':\n return { type: 'double-quoted-scalar', offset, indent, source, end };\n case \"'\":\n return { type: 'single-quoted-scalar', offset, indent, source, end };\n default:\n return { type: 'scalar', offset, indent, source, end };\n }\n}\n/**\n * Set the value of `token` to the given string `value`, overwriting any previous contents and type that it may have.\n *\n * Best efforts are made to retain any comments previously associated with the `token`,\n * though all contents within a collection's `items` will be overwritten.\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param token Any token. If it does not include an `indent` value, the value will be stringified as if it were an implicit key.\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.afterKey In most cases, values after a key should have an additional level of indentation.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.inFlow Being within a flow collection may affect the resolved type of the token's value.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction setScalarValue(token, value, context = {}) {\n let { afterKey = false, implicitKey = false, inFlow = false, type } = context;\n let indent = 'indent' in token ? token.indent : null;\n if (afterKey && typeof indent === 'number')\n indent += 2;\n if (!type)\n switch (token.type) {\n case 'single-quoted-scalar':\n type = 'QUOTE_SINGLE';\n break;\n case 'double-quoted-scalar':\n type = 'QUOTE_DOUBLE';\n break;\n case 'block-scalar': {\n const header = token.props[0];\n if (header.type !== 'block-scalar-header')\n throw new Error('Invalid block scalar header');\n type = header.source[0] === '>' ? 'BLOCK_FOLDED' : 'BLOCK_LITERAL';\n break;\n }\n default:\n type = 'PLAIN';\n }\n const source = stringifyString.stringifyString({ type, value }, {\n implicitKey: implicitKey || indent === null,\n indent: indent !== null && indent > 0 ? ' '.repeat(indent) : '',\n inFlow,\n options: { blockQuote: true, lineWidth: -1 }\n });\n switch (source[0]) {\n case '|':\n case '>':\n setBlockScalarValue(token, source);\n break;\n case '\"':\n setFlowScalarValue(token, source, 'double-quoted-scalar');\n break;\n case \"'\":\n setFlowScalarValue(token, source, 'single-quoted-scalar');\n break;\n default:\n setFlowScalarValue(token, source, 'scalar');\n }\n}\nfunction setBlockScalarValue(token, source) {\n const he = source.indexOf('\\n');\n const head = source.substring(0, he);\n const body = source.substring(he + 1) + '\\n';\n if (token.type === 'block-scalar') {\n const header = token.props[0];\n if (header.type !== 'block-scalar-header')\n throw new Error('Invalid block scalar header');\n header.source = head;\n token.source = body;\n }\n else {\n const { offset } = token;\n const indent = 'indent' in token ? token.indent : -1;\n const props = [\n { type: 'block-scalar-header', offset, indent, source: head }\n ];\n if (!addEndtoBlockProps(props, 'end' in token ? token.end : undefined))\n props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n for (const key of Object.keys(token))\n if (key !== 'type' && key !== 'offset')\n delete token[key];\n Object.assign(token, { type: 'block-scalar', indent, props, source: body });\n }\n}\n/** @returns `true` if last token is a newline */\nfunction addEndtoBlockProps(props, end) {\n if (end)\n for (const st of end)\n switch (st.type) {\n case 'space':\n case 'comment':\n props.push(st);\n break;\n case 'newline':\n props.push(st);\n return true;\n }\n return false;\n}\nfunction setFlowScalarValue(token, source, type) {\n switch (token.type) {\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n token.type = type;\n token.source = source;\n break;\n case 'block-scalar': {\n const end = token.props.slice(1);\n let oa = source.length;\n if (token.props[0].type === 'block-scalar-header')\n oa -= token.props[0].source.length;\n for (const tok of end)\n tok.offset += oa;\n delete token.props;\n Object.assign(token, { type, source, end });\n break;\n }\n case 'block-map':\n case 'block-seq': {\n const offset = token.offset + source.length;\n const nl = { type: 'newline', offset, indent: token.indent, source: '\\n' };\n delete token.items;\n Object.assign(token, { type, source, end: [nl] });\n break;\n }\n default: {\n const indent = 'indent' in token ? token.indent : -1;\n const end = 'end' in token && Array.isArray(token.end)\n ? token.end.filter(st => st.type === 'space' ||\n st.type === 'comment' ||\n st.type === 'newline')\n : [];\n for (const key of Object.keys(token))\n if (key !== 'type' && key !== 'offset')\n delete token[key];\n Object.assign(token, { type, indent, source, end });\n }\n }\n}\n\nexports.createScalarToken = createScalarToken;\nexports.resolveAsScalar = resolveAsScalar;\nexports.setScalarValue = setScalarValue;\n","'use strict';\n\n/**\n * Stringify a CST document, token, or collection item\n *\n * Fair warning: This applies no validation whatsoever, and\n * simply concatenates the sources in their logical order.\n */\nconst stringify = (cst) => 'type' in cst ? stringifyToken(cst) : stringifyItem(cst);\nfunction stringifyToken(token) {\n switch (token.type) {\n case 'block-scalar': {\n let res = '';\n for (const tok of token.props)\n res += stringifyToken(tok);\n return res + token.source;\n }\n case 'block-map':\n case 'block-seq': {\n let res = '';\n for (const item of token.items)\n res += stringifyItem(item);\n return res;\n }\n case 'flow-collection': {\n let res = token.start.source;\n for (const item of token.items)\n res += stringifyItem(item);\n for (const st of token.end)\n res += st.source;\n return res;\n }\n case 'document': {\n let res = stringifyItem(token);\n if (token.end)\n for (const st of token.end)\n res += st.source;\n return res;\n }\n default: {\n let res = token.source;\n if ('end' in token && token.end)\n for (const st of token.end)\n res += st.source;\n return res;\n }\n }\n}\nfunction stringifyItem({ start, key, sep, value }) {\n let res = '';\n for (const st of start)\n res += st.source;\n if (key)\n res += stringifyToken(key);\n if (sep)\n for (const st of sep)\n res += st.source;\n if (value)\n res += stringifyToken(value);\n return res;\n}\n\nexports.stringify = stringify;\n","'use strict';\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove item');\n/**\n * Apply a visitor to a CST document or item.\n *\n * Walks through the tree (depth-first) starting from the root, calling a\n * `visitor` function with two arguments when entering each item:\n * - `item`: The current item, which included the following members:\n * - `start: SourceToken[]` – Source tokens before the key or value,\n * possibly including its anchor or tag.\n * - `key?: Token | null` – Set for pair values. May then be `null`, if\n * the key before the `:` separator is empty.\n * - `sep?: SourceToken[]` – Source tokens between the key and the value,\n * which should include the `:` map value indicator if `value` is set.\n * - `value?: Token` – The value of a sequence item, or of a map pair.\n * - `path`: The steps from the root to the current node, as an array of\n * `['key' | 'value', number]` tuples.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this token, continue with\n * next sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current item, then continue with the next one\n * - `number`: Set the index of the next step. This is useful especially if\n * the index of the current token has changed.\n * - `function`: Define the next visitor for this item. After the original\n * visitor is called on item entry, next visitors are called after handling\n * a non-empty `key` and when exiting the item.\n */\nfunction visit(cst, visitor) {\n if ('type' in cst && cst.type === 'document')\n cst = { start: cst.start, value: cst.value };\n _visit(Object.freeze([]), cst, visitor);\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current item */\nvisit.SKIP = SKIP;\n/** Remove the current item */\nvisit.REMOVE = REMOVE;\n/** Find the item at `path` from `cst` as the root */\nvisit.itemAtPath = (cst, path) => {\n let item = cst;\n for (const [field, index] of path) {\n const tok = item?.[field];\n if (tok && 'items' in tok) {\n item = tok.items[index];\n }\n else\n return undefined;\n }\n return item;\n};\n/**\n * Get the immediate parent collection of the item at `path` from `cst` as the root.\n *\n * Throws an error if the collection is not found, which should never happen if the item itself exists.\n */\nvisit.parentCollection = (cst, path) => {\n const parent = visit.itemAtPath(cst, path.slice(0, -1));\n const field = path[path.length - 1][0];\n const coll = parent?.[field];\n if (coll && 'items' in coll)\n return coll;\n throw new Error('Parent collection not found');\n};\nfunction _visit(path, item, visitor) {\n let ctrl = visitor(item, path);\n if (typeof ctrl === 'symbol')\n return ctrl;\n for (const field of ['key', 'value']) {\n const token = item[field];\n if (token && 'items' in token) {\n for (let i = 0; i < token.items.length; ++i) {\n const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n token.items.splice(i, 1);\n i -= 1;\n }\n }\n if (typeof ctrl === 'function' && field === 'key')\n ctrl = ctrl(item, path);\n }\n }\n return typeof ctrl === 'function' ? ctrl(item, path) : ctrl;\n}\n\nexports.visit = visit;\n","'use strict';\n\nvar cstScalar = require('./cst-scalar.js');\nvar cstStringify = require('./cst-stringify.js');\nvar cstVisit = require('./cst-visit.js');\n\n/** The byte order mark */\nconst BOM = '\\u{FEFF}';\n/** Start of doc-mode */\nconst DOCUMENT = '\\x02'; // C0: Start of Text\n/** Unexpected end of flow-mode */\nconst FLOW_END = '\\x18'; // C0: Cancel\n/** Next token is a scalar value */\nconst SCALAR = '\\x1f'; // C0: Unit Separator\n/** @returns `true` if `token` is a flow or block collection */\nconst isCollection = (token) => !!token && 'items' in token;\n/** @returns `true` if `token` is a flow or block scalar; not an alias */\nconst isScalar = (token) => !!token &&\n (token.type === 'scalar' ||\n token.type === 'single-quoted-scalar' ||\n token.type === 'double-quoted-scalar' ||\n token.type === 'block-scalar');\n/* istanbul ignore next */\n/** Get a printable representation of a lexer token */\nfunction prettyToken(token) {\n switch (token) {\n case BOM:\n return '<BOM>';\n case DOCUMENT:\n return '<DOC>';\n case FLOW_END:\n return '<FLOW_END>';\n case SCALAR:\n return '<SCALAR>';\n default:\n return JSON.stringify(token);\n }\n}\n/** Identify the type of a lexer token. May return `null` for unknown tokens. */\nfunction tokenType(source) {\n switch (source) {\n case BOM:\n return 'byte-order-mark';\n case DOCUMENT:\n return 'doc-mode';\n case FLOW_END:\n return 'flow-error-end';\n case SCALAR:\n return 'scalar';\n case '---':\n return 'doc-start';\n case '...':\n return 'doc-end';\n case '':\n case '\\n':\n case '\\r\\n':\n return 'newline';\n case '-':\n return 'seq-item-ind';\n case '?':\n return 'explicit-key-ind';\n case ':':\n return 'map-value-ind';\n case '{':\n return 'flow-map-start';\n case '}':\n return 'flow-map-end';\n case '[':\n return 'flow-seq-start';\n case ']':\n return 'flow-seq-end';\n case ',':\n return 'comma';\n }\n switch (source[0]) {\n case ' ':\n case '\\t':\n return 'space';\n case '#':\n return 'comment';\n case '%':\n return 'directive-line';\n case '*':\n return 'alias';\n case '&':\n return 'anchor';\n case '!':\n return 'tag';\n case \"'\":\n return 'single-quoted-scalar';\n case '\"':\n return 'double-quoted-scalar';\n case '|':\n case '>':\n return 'block-scalar-header';\n }\n return null;\n}\n\nexports.createScalarToken = cstScalar.createScalarToken;\nexports.resolveAsScalar = cstScalar.resolveAsScalar;\nexports.setScalarValue = cstScalar.setScalarValue;\nexports.stringify = cstStringify.stringify;\nexports.visit = cstVisit.visit;\nexports.BOM = BOM;\nexports.DOCUMENT = DOCUMENT;\nexports.FLOW_END = FLOW_END;\nexports.SCALAR = SCALAR;\nexports.isCollection = isCollection;\nexports.isScalar = isScalar;\nexports.prettyToken = prettyToken;\nexports.tokenType = tokenType;\n","'use strict';\n\nvar cst = require('./cst.js');\n\n/*\nSTART -> stream\n\nstream\n directive -> line-end -> stream\n indent + line-end -> stream\n [else] -> line-start\n\nline-end\n comment -> line-end\n newline -> .\n input-end -> END\n\nline-start\n doc-start -> doc\n doc-end -> stream\n [else] -> indent -> block-start\n\nblock-start\n seq-item-start -> block-start\n explicit-key-start -> block-start\n map-value-start -> block-start\n [else] -> doc\n\ndoc\n line-end -> line-start\n spaces -> doc\n anchor -> doc\n tag -> doc\n flow-start -> flow -> doc\n flow-end -> error -> doc\n seq-item-start -> error -> doc\n explicit-key-start -> error -> doc\n map-value-start -> doc\n alias -> doc\n quote-start -> quoted-scalar -> doc\n block-scalar-header -> line-end -> block-scalar(min) -> line-start\n [else] -> plain-scalar(false, min) -> doc\n\nflow\n line-end -> flow\n spaces -> flow\n anchor -> flow\n tag -> flow\n flow-start -> flow -> flow\n flow-end -> .\n seq-item-start -> error -> flow\n explicit-key-start -> flow\n map-value-start -> flow\n alias -> flow\n quote-start -> quoted-scalar -> flow\n comma -> flow\n [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n quote-end -> .\n [else] -> quoted-scalar\n\nblock-scalar(min)\n newline + peek(indent < min) -> .\n [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n scalar-end(is-flow) -> .\n peek(newline + (indent < min)) -> .\n [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n switch (ch) {\n case undefined:\n case ' ':\n case '\\n':\n case '\\r':\n case '\\t':\n return true;\n default:\n return false;\n }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n constructor() {\n /**\n * Flag indicating whether the end of the current buffer marks the end of\n * all input\n */\n this.atEnd = false;\n /**\n * Explicit indent set in block scalar header, as an offset from the current\n * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n * explicitly set.\n */\n this.blockScalarIndent = -1;\n /**\n * Block scalars that include a + (keep) chomping indicator in their header\n * include trailing empty lines, which are otherwise excluded from the\n * scalar's contents.\n */\n this.blockScalarKeep = false;\n /** Current input */\n this.buffer = '';\n /**\n * Flag noting whether the map value indicator : can immediately follow this\n * node within a flow context.\n */\n this.flowKey = false;\n /** Count of surrounding flow collection levels. */\n this.flowLevel = 0;\n /**\n * Minimum level of indentation required for next lines to be parsed as a\n * part of the current scalar value.\n */\n this.indentNext = 0;\n /** Indentation level of the current line. */\n this.indentValue = 0;\n /** Position of the next \\n character. */\n this.lineEndPos = null;\n /** Stores the state of the lexer if reaching the end of incpomplete input */\n this.next = null;\n /** A pointer to `buffer`; the current position of the lexer. */\n this.pos = 0;\n }\n /**\n * Generate YAML tokens from the `source` string. If `incomplete`,\n * a part of the last line may be left as a buffer for the next call.\n *\n * @returns A generator of lexical tokens\n */\n *lex(source, incomplete = false) {\n if (source) {\n if (typeof source !== 'string')\n throw TypeError('source is not a string');\n this.buffer = this.buffer ? this.buffer + source : source;\n this.lineEndPos = null;\n }\n this.atEnd = !incomplete;\n let next = this.next ?? 'stream';\n while (next && (incomplete || this.hasChars(1)))\n next = yield* this.parseNext(next);\n }\n atLineEnd() {\n let i = this.pos;\n let ch = this.buffer[i];\n while (ch === ' ' || ch === '\\t')\n ch = this.buffer[++i];\n if (!ch || ch === '#' || ch === '\\n')\n return true;\n if (ch === '\\r')\n return this.buffer[i + 1] === '\\n';\n return false;\n }\n charAt(n) {\n return this.buffer[this.pos + n];\n }\n continueScalar(offset) {\n let ch = this.buffer[offset];\n if (this.indentNext > 0) {\n let indent = 0;\n while (ch === ' ')\n ch = this.buffer[++indent + offset];\n if (ch === '\\r') {\n const next = this.buffer[indent + offset + 1];\n if (next === '\\n' || (!next && !this.atEnd))\n return offset + indent + 1;\n }\n return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n ? offset + indent\n : -1;\n }\n if (ch === '-' || ch === '.') {\n const dt = this.buffer.substr(offset, 3);\n if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n return -1;\n }\n return offset;\n }\n getLine() {\n let end = this.lineEndPos;\n if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n end = this.buffer.indexOf('\\n', this.pos);\n this.lineEndPos = end;\n }\n if (end === -1)\n return this.atEnd ? this.buffer.substring(this.pos) : null;\n if (this.buffer[end - 1] === '\\r')\n end -= 1;\n return this.buffer.substring(this.pos, end);\n }\n hasChars(n) {\n return this.pos + n <= this.buffer.length;\n }\n setNext(state) {\n this.buffer = this.buffer.substring(this.pos);\n this.pos = 0;\n this.lineEndPos = null;\n this.next = state;\n return null;\n }\n peek(n) {\n return this.buffer.substr(this.pos, n);\n }\n *parseNext(next) {\n switch (next) {\n case 'stream':\n return yield* this.parseStream();\n case 'line-start':\n return yield* this.parseLineStart();\n case 'block-start':\n return yield* this.parseBlockStart();\n case 'doc':\n return yield* this.parseDocument();\n case 'flow':\n return yield* this.parseFlowCollection();\n case 'quoted-scalar':\n return yield* this.parseQuotedScalar();\n case 'block-scalar':\n return yield* this.parseBlockScalar();\n case 'plain-scalar':\n return yield* this.parsePlainScalar();\n }\n }\n *parseStream() {\n let line = this.getLine();\n if (line === null)\n return this.setNext('stream');\n if (line[0] === cst.BOM) {\n yield* this.pushCount(1);\n line = line.substring(1);\n }\n if (line[0] === '%') {\n let dirEnd = line.length;\n let cs = line.indexOf('#');\n while (cs !== -1) {\n const ch = line[cs - 1];\n if (ch === ' ' || ch === '\\t') {\n dirEnd = cs - 1;\n break;\n }\n else {\n cs = line.indexOf('#', cs + 1);\n }\n }\n while (true) {\n const ch = line[dirEnd - 1];\n if (ch === ' ' || ch === '\\t')\n dirEnd -= 1;\n else\n break;\n }\n const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n yield* this.pushCount(line.length - n); // possible comment\n this.pushNewline();\n return 'stream';\n }\n if (this.atLineEnd()) {\n const sp = yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - sp);\n yield* this.pushNewline();\n return 'stream';\n }\n yield cst.DOCUMENT;\n return yield* this.parseLineStart();\n }\n *parseLineStart() {\n const ch = this.charAt(0);\n if (!ch && !this.atEnd)\n return this.setNext('line-start');\n if (ch === '-' || ch === '.') {\n if (!this.atEnd && !this.hasChars(4))\n return this.setNext('line-start');\n const s = this.peek(3);\n if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n yield* this.pushCount(3);\n this.indentValue = 0;\n this.indentNext = 0;\n return s === '---' ? 'doc' : 'stream';\n }\n }\n this.indentValue = yield* this.pushSpaces(false);\n if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n this.indentNext = this.indentValue;\n return yield* this.parseBlockStart();\n }\n *parseBlockStart() {\n const [ch0, ch1] = this.peek(2);\n if (!ch1 && !this.atEnd)\n return this.setNext('block-start');\n if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n this.indentNext = this.indentValue + 1;\n this.indentValue += n;\n return yield* this.parseBlockStart();\n }\n return 'doc';\n }\n *parseDocument() {\n yield* this.pushSpaces(true);\n const line = this.getLine();\n if (line === null)\n return this.setNext('doc');\n let n = yield* this.pushIndicators();\n switch (line[n]) {\n case '#':\n yield* this.pushCount(line.length - n);\n // fallthrough\n case undefined:\n yield* this.pushNewline();\n return yield* this.parseLineStart();\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel = 1;\n return 'flow';\n case '}':\n case ']':\n // this is an error\n yield* this.pushCount(1);\n return 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'doc';\n case '\"':\n case \"'\":\n return yield* this.parseQuotedScalar();\n case '|':\n case '>':\n n += yield* this.parseBlockScalarHeader();\n n += yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - n);\n yield* this.pushNewline();\n return yield* this.parseBlockScalar();\n default:\n return yield* this.parsePlainScalar();\n }\n }\n *parseFlowCollection() {\n let nl, sp;\n let indent = -1;\n do {\n nl = yield* this.pushNewline();\n if (nl > 0) {\n sp = yield* this.pushSpaces(false);\n this.indentValue = indent = sp;\n }\n else {\n sp = 0;\n }\n sp += yield* this.pushSpaces(true);\n } while (nl + sp > 0);\n const line = this.getLine();\n if (line === null)\n return this.setNext('flow');\n if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n (indent === 0 &&\n (line.startsWith('---') || line.startsWith('...')) &&\n isEmpty(line[3]))) {\n // Allowing for the terminal ] or } at the same (rather than greater)\n // indent level as the initial [ or { is technically invalid, but\n // failing here would be surprising to users.\n const atFlowEndMarker = indent === this.indentNext - 1 &&\n this.flowLevel === 1 &&\n (line[0] === ']' || line[0] === '}');\n if (!atFlowEndMarker) {\n // this is an error\n this.flowLevel = 0;\n yield cst.FLOW_END;\n return yield* this.parseLineStart();\n }\n }\n let n = 0;\n while (line[n] === ',') {\n n += yield* this.pushCount(1);\n n += yield* this.pushSpaces(true);\n this.flowKey = false;\n }\n n += yield* this.pushIndicators();\n switch (line[n]) {\n case undefined:\n return 'flow';\n case '#':\n yield* this.pushCount(line.length - n);\n return 'flow';\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel += 1;\n return 'flow';\n case '}':\n case ']':\n yield* this.pushCount(1);\n this.flowKey = true;\n this.flowLevel -= 1;\n return this.flowLevel ? 'flow' : 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'flow';\n case '\"':\n case \"'\":\n this.flowKey = true;\n return yield* this.parseQuotedScalar();\n case ':': {\n const next = this.charAt(1);\n if (this.flowKey || isEmpty(next) || next === ',') {\n this.flowKey = false;\n yield* this.pushCount(1);\n yield* this.pushSpaces(true);\n return 'flow';\n }\n }\n // fallthrough\n default:\n this.flowKey = false;\n return yield* this.parsePlainScalar();\n }\n }\n *parseQuotedScalar() {\n const quote = this.charAt(0);\n let end = this.buffer.indexOf(quote, this.pos + 1);\n if (quote === \"'\") {\n while (end !== -1 && this.buffer[end + 1] === \"'\")\n end = this.buffer.indexOf(\"'\", end + 2);\n }\n else {\n // double-quote\n while (end !== -1) {\n let n = 0;\n while (this.buffer[end - 1 - n] === '\\\\')\n n += 1;\n if (n % 2 === 0)\n break;\n end = this.buffer.indexOf('\"', end + 1);\n }\n }\n // Only looking for newlines within the quotes\n const qb = this.buffer.substring(0, end);\n let nl = qb.indexOf('\\n', this.pos);\n if (nl !== -1) {\n while (nl !== -1) {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = qb.indexOf('\\n', cs);\n }\n if (nl !== -1) {\n // this is an error caused by an unexpected unindent\n end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n }\n }\n if (end === -1) {\n if (!this.atEnd)\n return this.setNext('quoted-scalar');\n end = this.buffer.length;\n }\n yield* this.pushToIndex(end + 1, false);\n return this.flowLevel ? 'flow' : 'doc';\n }\n *parseBlockScalarHeader() {\n this.blockScalarIndent = -1;\n this.blockScalarKeep = false;\n let i = this.pos;\n while (true) {\n const ch = this.buffer[++i];\n if (ch === '+')\n this.blockScalarKeep = true;\n else if (ch > '0' && ch <= '9')\n this.blockScalarIndent = Number(ch) - 1;\n else if (ch !== '-')\n break;\n }\n return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n }\n *parseBlockScalar() {\n let nl = this.pos - 1; // may be -1 if this.pos === 0\n let indent = 0;\n let ch;\n loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n switch (ch) {\n case ' ':\n indent += 1;\n break;\n case '\\n':\n nl = i;\n indent = 0;\n break;\n case '\\r': {\n const next = this.buffer[i + 1];\n if (!next && !this.atEnd)\n return this.setNext('block-scalar');\n if (next === '\\n')\n break;\n } // fallthrough\n default:\n break loop;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('block-scalar');\n if (indent >= this.indentNext) {\n if (this.blockScalarIndent === -1)\n this.indentNext = indent;\n else {\n this.indentNext =\n this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n }\n do {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = this.buffer.indexOf('\\n', cs);\n } while (nl !== -1);\n if (nl === -1) {\n if (!this.atEnd)\n return this.setNext('block-scalar');\n nl = this.buffer.length;\n }\n }\n // Trailing insufficiently indented tabs are invalid.\n // To catch that during parsing, we include them in the block scalar value.\n let i = nl + 1;\n ch = this.buffer[i];\n while (ch === ' ')\n ch = this.buffer[++i];\n if (ch === '\\t') {\n while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n ch = this.buffer[++i];\n nl = i - 1;\n }\n else if (!this.blockScalarKeep) {\n do {\n let i = nl - 1;\n let ch = this.buffer[i];\n if (ch === '\\r')\n ch = this.buffer[--i];\n const lastChar = i; // Drop the line if last char not more indented\n while (ch === ' ')\n ch = this.buffer[--i];\n if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n nl = i;\n else\n break;\n } while (true);\n }\n yield cst.SCALAR;\n yield* this.pushToIndex(nl + 1, true);\n return yield* this.parseLineStart();\n }\n *parsePlainScalar() {\n const inFlow = this.flowLevel > 0;\n let end = this.pos - 1;\n let i = this.pos - 1;\n let ch;\n while ((ch = this.buffer[++i])) {\n if (ch === ':') {\n const next = this.buffer[i + 1];\n if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n break;\n end = i;\n }\n else if (isEmpty(ch)) {\n let next = this.buffer[i + 1];\n if (ch === '\\r') {\n if (next === '\\n') {\n i += 1;\n ch = '\\n';\n next = this.buffer[i + 1];\n }\n else\n end = i;\n }\n if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n break;\n if (ch === '\\n') {\n const cs = this.continueScalar(i + 1);\n if (cs === -1)\n break;\n i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n }\n }\n else {\n if (inFlow && flowIndicatorChars.has(ch))\n break;\n end = i;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('plain-scalar');\n yield cst.SCALAR;\n yield* this.pushToIndex(end + 1, true);\n return inFlow ? 'flow' : 'doc';\n }\n *pushCount(n) {\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos += n;\n return n;\n }\n return 0;\n }\n *pushToIndex(i, allowEmpty) {\n const s = this.buffer.slice(this.pos, i);\n if (s) {\n yield s;\n this.pos += s.length;\n return s.length;\n }\n else if (allowEmpty)\n yield '';\n return 0;\n }\n *pushIndicators() {\n switch (this.charAt(0)) {\n case '!':\n return ((yield* this.pushTag()) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n case '&':\n return ((yield* this.pushUntil(isNotAnchorChar)) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n case '-': // this is an error\n case '?': // this is an error outside flow collections\n case ':': {\n const inFlow = this.flowLevel > 0;\n const ch1 = this.charAt(1);\n if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n if (!inFlow)\n this.indentNext = this.indentValue + 1;\n else if (this.flowKey)\n this.flowKey = false;\n return ((yield* this.pushCount(1)) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n }\n }\n }\n return 0;\n }\n *pushTag() {\n if (this.charAt(1) === '<') {\n let i = this.pos + 2;\n let ch = this.buffer[i];\n while (!isEmpty(ch) && ch !== '>')\n ch = this.buffer[++i];\n return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n }\n else {\n let i = this.pos + 1;\n let ch = this.buffer[i];\n while (ch) {\n if (tagChars.has(ch))\n ch = this.buffer[++i];\n else if (ch === '%' &&\n hexDigits.has(this.buffer[i + 1]) &&\n hexDigits.has(this.buffer[i + 2])) {\n ch = this.buffer[(i += 3)];\n }\n else\n break;\n }\n return yield* this.pushToIndex(i, false);\n }\n }\n *pushNewline() {\n const ch = this.buffer[this.pos];\n if (ch === '\\n')\n return yield* this.pushCount(1);\n else if (ch === '\\r' && this.charAt(1) === '\\n')\n return yield* this.pushCount(2);\n else\n return 0;\n }\n *pushSpaces(allowTabs) {\n let i = this.pos - 1;\n let ch;\n do {\n ch = this.buffer[++i];\n } while (ch === ' ' || (allowTabs && ch === '\\t'));\n const n = i - this.pos;\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos = i;\n }\n return n;\n }\n *pushUntil(test) {\n let i = this.pos;\n let ch = this.buffer[i];\n while (!test(ch))\n ch = this.buffer[++i];\n return yield* this.pushToIndex(i, false);\n }\n}\n\nexports.Lexer = Lexer;\n","'use strict';\n\n/**\n * Tracks newlines during parsing in order to provide an efficient API for\n * determining the one-indexed `{ line, col }` position for any offset\n * within the input.\n */\nclass LineCounter {\n constructor() {\n this.lineStarts = [];\n /**\n * Should be called in ascending order. Otherwise, call\n * `lineCounter.lineStarts.sort()` before calling `linePos()`.\n */\n this.addNewLine = (offset) => this.lineStarts.push(offset);\n /**\n * Performs a binary search and returns the 1-indexed { line, col }\n * position of `offset`. If `line === 0`, `addNewLine` has never been\n * called or `offset` is before the first known newline.\n */\n this.linePos = (offset) => {\n let low = 0;\n let high = this.lineStarts.length;\n while (low < high) {\n const mid = (low + high) >> 1; // Math.floor((low + high) / 2)\n if (this.lineStarts[mid] < offset)\n low = mid + 1;\n else\n high = mid;\n }\n if (this.lineStarts[low] === offset)\n return { line: low + 1, col: 1 };\n if (low === 0)\n return { line: 0, col: offset };\n const start = this.lineStarts[low - 1];\n return { line: low, col: offset - start + 1 };\n };\n }\n}\n\nexports.LineCounter = LineCounter;\n","'use strict';\n\nvar node_process = require('process');\nvar cst = require('./cst.js');\nvar lexer = require('./lexer.js');\n\nfunction includesToken(list, type) {\n for (let i = 0; i < list.length; ++i)\n if (list[i].type === type)\n return true;\n return false;\n}\nfunction findNonEmptyIndex(list) {\n for (let i = 0; i < list.length; ++i) {\n switch (list[i].type) {\n case 'space':\n case 'comment':\n case 'newline':\n break;\n default:\n return i;\n }\n }\n return -1;\n}\nfunction isFlowToken(token) {\n switch (token?.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'flow-collection':\n return true;\n default:\n return false;\n }\n}\nfunction getPrevProps(parent) {\n switch (parent.type) {\n case 'document':\n return parent.start;\n case 'block-map': {\n const it = parent.items[parent.items.length - 1];\n return it.sep ?? it.start;\n }\n case 'block-seq':\n return parent.items[parent.items.length - 1].start;\n /* istanbul ignore next should not happen */\n default:\n return [];\n }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n if (prev.length === 0)\n return [];\n let i = prev.length;\n loop: while (--i >= 0) {\n switch (prev[i].type) {\n case 'doc-start':\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n case 'newline':\n break loop;\n }\n }\n while (prev[++i]?.type === 'space') {\n /* loop */\n }\n return prev.splice(i, prev.length);\n}\nfunction fixFlowSeqItems(fc) {\n if (fc.start.type === 'flow-seq-start') {\n for (const it of fc.items) {\n if (it.sep &&\n !it.value &&\n !includesToken(it.start, 'explicit-key-ind') &&\n !includesToken(it.sep, 'map-value-ind')) {\n if (it.key)\n it.value = it.key;\n delete it.key;\n if (isFlowToken(it.value)) {\n if (it.value.end)\n Array.prototype.push.apply(it.value.end, it.sep);\n else\n it.value.end = it.sep;\n }\n else\n Array.prototype.push.apply(it.start, it.sep);\n delete it.sep;\n }\n }\n }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n * // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n * const parser = new Parser()\n * for (const lexeme of lexer.lex(source))\n * yield* parser.next(lexeme)\n * yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n * // token: Token\n * }\n * ```\n */\nclass Parser {\n /**\n * @param onNewLine - If defined, called separately with the start position of\n * each new line (in `parse()`, including the start of input).\n */\n constructor(onNewLine) {\n /** If true, space and sequence indicators count as indentation */\n this.atNewLine = true;\n /** If true, next token is a scalar value */\n this.atScalar = false;\n /** Current indentation level */\n this.indent = 0;\n /** Current offset since the start of parsing */\n this.offset = 0;\n /** On the same line with a block map key */\n this.onKeyLine = false;\n /** Top indicates the node that's currently being built */\n this.stack = [];\n /** The source of the current token, set in parse() */\n this.source = '';\n /** The type of the current token, set in parse() */\n this.type = '';\n // Must be defined after `next()`\n this.lexer = new lexer.Lexer();\n this.onNewLine = onNewLine;\n }\n /**\n * Parse `source` as a YAML stream.\n * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n *\n * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n *\n * @returns A generator of tokens representing each directive, document, and other structure.\n */\n *parse(source, incomplete = false) {\n if (this.onNewLine && this.offset === 0)\n this.onNewLine(0);\n for (const lexeme of this.lexer.lex(source, incomplete))\n yield* this.next(lexeme);\n if (!incomplete)\n yield* this.end();\n }\n /**\n * Advance the parser by the `source` of one lexical token.\n */\n *next(source) {\n this.source = source;\n if (node_process.env.LOG_TOKENS)\n console.log('|', cst.prettyToken(source));\n if (this.atScalar) {\n this.atScalar = false;\n yield* this.step();\n this.offset += source.length;\n return;\n }\n const type = cst.tokenType(source);\n if (!type) {\n const message = `Not a YAML token: ${source}`;\n yield* this.pop({ type: 'error', offset: this.offset, message, source });\n this.offset += source.length;\n }\n else if (type === 'scalar') {\n this.atNewLine = false;\n this.atScalar = true;\n this.type = 'scalar';\n }\n else {\n this.type = type;\n yield* this.step();\n switch (type) {\n case 'newline':\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine)\n this.onNewLine(this.offset + source.length);\n break;\n case 'space':\n if (this.atNewLine && source[0] === ' ')\n this.indent += source.length;\n break;\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n if (this.atNewLine)\n this.indent += source.length;\n break;\n case 'doc-mode':\n case 'flow-error-end':\n return;\n default:\n this.atNewLine = false;\n }\n this.offset += source.length;\n }\n }\n /** Call at end of input to push out any remaining constructions */\n *end() {\n while (this.stack.length > 0)\n yield* this.pop();\n }\n get sourceToken() {\n const st = {\n type: this.type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n return st;\n }\n *step() {\n const top = this.peek(1);\n if (this.type === 'doc-end' && top?.type !== 'doc-end') {\n while (this.stack.length > 0)\n yield* this.pop();\n this.stack.push({\n type: 'doc-end',\n offset: this.offset,\n source: this.source\n });\n return;\n }\n if (!top)\n return yield* this.stream();\n switch (top.type) {\n case 'document':\n return yield* this.document(top);\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return yield* this.scalar(top);\n case 'block-scalar':\n return yield* this.blockScalar(top);\n case 'block-map':\n return yield* this.blockMap(top);\n case 'block-seq':\n return yield* this.blockSequence(top);\n case 'flow-collection':\n return yield* this.flowCollection(top);\n case 'doc-end':\n return yield* this.documentEnd(top);\n }\n /* istanbul ignore next should not happen */\n yield* this.pop();\n }\n peek(n) {\n return this.stack[this.stack.length - n];\n }\n *pop(error) {\n const token = error ?? this.stack.pop();\n /* istanbul ignore if should not happen */\n if (!token) {\n const message = 'Tried to pop an empty stack';\n yield { type: 'error', offset: this.offset, source: '', message };\n }\n else if (this.stack.length === 0) {\n yield token;\n }\n else {\n const top = this.peek(1);\n if (token.type === 'block-scalar') {\n // Block scalars use their parent rather than header indent\n token.indent = 'indent' in top ? top.indent : 0;\n }\n else if (token.type === 'flow-collection' && top.type === 'document') {\n // Ignore all indent for top-level flow collections\n token.indent = 0;\n }\n if (token.type === 'flow-collection')\n fixFlowSeqItems(token);\n switch (top.type) {\n case 'document':\n top.value = token;\n break;\n case 'block-scalar':\n top.props.push(token); // error\n break;\n case 'block-map': {\n const it = top.items[top.items.length - 1];\n if (it.value) {\n top.items.push({ start: [], key: token, sep: [] });\n this.onKeyLine = true;\n return;\n }\n else if (it.sep) {\n it.value = token;\n }\n else {\n Object.assign(it, { key: token, sep: [] });\n this.onKeyLine = !it.explicitKey;\n return;\n }\n break;\n }\n case 'block-seq': {\n const it = top.items[top.items.length - 1];\n if (it.value)\n top.items.push({ start: [], value: token });\n else\n it.value = token;\n break;\n }\n case 'flow-collection': {\n const it = top.items[top.items.length - 1];\n if (!it || it.value)\n top.items.push({ start: [], key: token, sep: [] });\n else if (it.sep)\n it.value = token;\n else\n Object.assign(it, { key: token, sep: [] });\n return;\n }\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.pop(token);\n }\n if ((top.type === 'document' ||\n top.type === 'block-map' ||\n top.type === 'block-seq') &&\n (token.type === 'block-map' || token.type === 'block-seq')) {\n const last = token.items[token.items.length - 1];\n if (last &&\n !last.sep &&\n !last.value &&\n last.start.length > 0 &&\n findNonEmptyIndex(last.start) === -1 &&\n (token.indent === 0 ||\n last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n if (top.type === 'document')\n top.end = last.start;\n else\n top.items.push({ start: last.start });\n token.items.splice(-1, 1);\n }\n }\n }\n }\n *stream() {\n switch (this.type) {\n case 'directive-line':\n yield { type: 'directive', offset: this.offset, source: this.source };\n return;\n case 'byte-order-mark':\n case 'space':\n case 'comment':\n case 'newline':\n yield this.sourceToken;\n return;\n case 'doc-mode':\n case 'doc-start': {\n const doc = {\n type: 'document',\n offset: this.offset,\n start: []\n };\n if (this.type === 'doc-start')\n doc.start.push(this.sourceToken);\n this.stack.push(doc);\n return;\n }\n }\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML stream`,\n source: this.source\n };\n }\n *document(doc) {\n if (doc.value)\n return yield* this.lineEnd(doc);\n switch (this.type) {\n case 'doc-start': {\n if (findNonEmptyIndex(doc.start) !== -1) {\n yield* this.pop();\n yield* this.step();\n }\n else\n doc.start.push(this.sourceToken);\n return;\n }\n case 'anchor':\n case 'tag':\n case 'space':\n case 'comment':\n case 'newline':\n doc.start.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(doc);\n if (bv)\n this.stack.push(bv);\n else {\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML document`,\n source: this.source\n };\n }\n }\n *scalar(scalar) {\n if (this.type === 'map-value-ind') {\n const prev = getPrevProps(this.peek(2));\n const start = getFirstKeyStartProps(prev);\n let sep;\n if (scalar.end) {\n sep = scalar.end;\n sep.push(this.sourceToken);\n delete scalar.end;\n }\n else\n sep = [this.sourceToken];\n const map = {\n type: 'block-map',\n offset: scalar.offset,\n indent: scalar.indent,\n items: [{ start, key: scalar, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else\n yield* this.lineEnd(scalar);\n }\n *blockScalar(scalar) {\n switch (this.type) {\n case 'space':\n case 'comment':\n case 'newline':\n scalar.props.push(this.sourceToken);\n return;\n case 'scalar':\n scalar.source = this.source;\n // block-scalar source includes trailing newline\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n yield* this.pop();\n break;\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.step();\n }\n }\n *blockMap(map) {\n const it = map.items[map.items.length - 1];\n // it.sep is true-ish if pair already has key or : separator\n switch (this.type) {\n case 'newline':\n this.onKeyLine = false;\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'space':\n case 'comment':\n if (it.value) {\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n if (this.atIndentedComment(it.start, map.indent)) {\n const prev = map.items[map.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n Array.prototype.push.apply(end, it.start);\n end.push(this.sourceToken);\n map.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n }\n if (this.indent >= map.indent) {\n const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n const atNextItem = atMapIndent &&\n (it.sep || it.explicitKey) &&\n this.type !== 'seq-item-ind';\n // For empty nodes, assign newline-separated not indented empty tokens to following node\n let start = [];\n if (atNextItem && it.sep && !it.value) {\n const nl = [];\n for (let i = 0; i < it.sep.length; ++i) {\n const st = it.sep[i];\n switch (st.type) {\n case 'newline':\n nl.push(i);\n break;\n case 'space':\n break;\n case 'comment':\n if (st.indent > map.indent)\n nl.length = 0;\n break;\n default:\n nl.length = 0;\n }\n }\n if (nl.length >= 2)\n start = it.sep.splice(nl[1]);\n }\n switch (this.type) {\n case 'anchor':\n case 'tag':\n if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'explicit-key-ind':\n if (!it.sep && !it.explicitKey) {\n it.start.push(this.sourceToken);\n it.explicitKey = true;\n }\n else if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start, explicitKey: true });\n }\n else {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken], explicitKey: true }]\n });\n }\n this.onKeyLine = true;\n return;\n case 'map-value-ind':\n if (it.explicitKey) {\n if (!it.sep) {\n if (includesToken(it.start, 'newline')) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else {\n const start = getFirstKeyStartProps(it.start);\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n }\n else if (it.value) {\n map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n else if (isFlowToken(it.key) &&\n !includesToken(it.sep, 'newline')) {\n const start = getFirstKeyStartProps(it.start);\n const key = it.key;\n const sep = it.sep;\n sep.push(this.sourceToken);\n // @ts-expect-error type guard is wrong here\n delete it.key;\n // @ts-expect-error type guard is wrong here\n delete it.sep;\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key, sep }]\n });\n }\n else if (start.length > 0) {\n // Not actually at next item\n it.sep = it.sep.concat(start, this.sourceToken);\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n else {\n if (!it.sep) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else if (it.value || atNextItem) {\n map.items.push({ start, key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [], key: null, sep: [this.sourceToken] }]\n });\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n this.onKeyLine = true;\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (atNextItem || it.value) {\n map.items.push({ start, key: fs, sep: [] });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n this.stack.push(fs);\n }\n else {\n Object.assign(it, { key: fs, sep: [] });\n this.onKeyLine = true;\n }\n return;\n }\n default: {\n const bv = this.startBlockValue(map);\n if (bv) {\n if (bv.type === 'block-seq') {\n if (!it.explicitKey &&\n it.sep &&\n !includesToken(it.sep, 'newline')) {\n yield* this.pop({\n type: 'error',\n offset: this.offset,\n message: 'Unexpected block-seq-ind on same line with key',\n source: this.source\n });\n return;\n }\n }\n else if (atMapIndent) {\n map.items.push({ start });\n }\n this.stack.push(bv);\n return;\n }\n }\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *blockSequence(seq) {\n const it = seq.items[seq.items.length - 1];\n switch (this.type) {\n case 'newline':\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n seq.items.push({ start: [this.sourceToken] });\n }\n else\n it.start.push(this.sourceToken);\n return;\n case 'space':\n case 'comment':\n if (it.value)\n seq.items.push({ start: [this.sourceToken] });\n else {\n if (this.atIndentedComment(it.start, seq.indent)) {\n const prev = seq.items[seq.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n Array.prototype.push.apply(end, it.start);\n end.push(this.sourceToken);\n seq.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n case 'anchor':\n case 'tag':\n if (it.value || this.indent <= seq.indent)\n break;\n it.start.push(this.sourceToken);\n return;\n case 'seq-item-ind':\n if (this.indent !== seq.indent)\n break;\n if (it.value || includesToken(it.start, 'seq-item-ind'))\n seq.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n }\n if (this.indent > seq.indent) {\n const bv = this.startBlockValue(seq);\n if (bv) {\n this.stack.push(bv);\n return;\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *flowCollection(fc) {\n const it = fc.items[fc.items.length - 1];\n if (this.type === 'flow-error-end') {\n let top;\n do {\n yield* this.pop();\n top = this.peek(1);\n } while (top?.type === 'flow-collection');\n }\n else if (fc.end.length === 0) {\n switch (this.type) {\n case 'comma':\n case 'explicit-key-ind':\n if (!it || it.sep)\n fc.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n case 'map-value-ind':\n if (!it || it.value)\n fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n return;\n case 'space':\n case 'comment':\n case 'newline':\n case 'anchor':\n case 'tag':\n if (!it || it.value)\n fc.items.push({ start: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n it.start.push(this.sourceToken);\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (!it || it.value)\n fc.items.push({ start: [], key: fs, sep: [] });\n else if (it.sep)\n this.stack.push(fs);\n else\n Object.assign(it, { key: fs, sep: [] });\n return;\n }\n case 'flow-map-end':\n case 'flow-seq-end':\n fc.end.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(fc);\n /* istanbul ignore else should not happen */\n if (bv)\n this.stack.push(bv);\n else {\n yield* this.pop();\n yield* this.step();\n }\n }\n else {\n const parent = this.peek(2);\n if (parent.type === 'block-map' &&\n ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n (this.type === 'newline' &&\n !parent.items[parent.items.length - 1].sep))) {\n yield* this.pop();\n yield* this.step();\n }\n else if (this.type === 'map-value-ind' &&\n parent.type !== 'flow-collection') {\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n fixFlowSeqItems(fc);\n const sep = fc.end.splice(1, fc.end.length);\n sep.push(this.sourceToken);\n const map = {\n type: 'block-map',\n offset: fc.offset,\n indent: fc.indent,\n items: [{ start, key: fc, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else {\n yield* this.lineEnd(fc);\n }\n }\n }\n flowScalar(type) {\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n return {\n type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n }\n startBlockValue(parent) {\n switch (this.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return this.flowScalar(this.type);\n case 'block-scalar-header':\n return {\n type: 'block-scalar',\n offset: this.offset,\n indent: this.indent,\n props: [this.sourceToken],\n source: ''\n };\n case 'flow-map-start':\n case 'flow-seq-start':\n return {\n type: 'flow-collection',\n offset: this.offset,\n indent: this.indent,\n start: this.sourceToken,\n items: [],\n end: []\n };\n case 'seq-item-ind':\n return {\n type: 'block-seq',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken] }]\n };\n case 'explicit-key-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n start.push(this.sourceToken);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, explicitKey: true }]\n };\n }\n case 'map-value-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n };\n }\n }\n return null;\n }\n atIndentedComment(start, indent) {\n if (this.type !== 'comment')\n return false;\n if (this.indent <= indent)\n return false;\n return start.every(st => st.type === 'newline' || st.type === 'space');\n }\n *documentEnd(docEnd) {\n if (this.type !== 'doc-mode') {\n if (docEnd.end)\n docEnd.end.push(this.sourceToken);\n else\n docEnd.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n *lineEnd(token) {\n switch (this.type) {\n case 'comma':\n case 'doc-start':\n case 'doc-end':\n case 'flow-seq-end':\n case 'flow-map-end':\n case 'map-value-ind':\n yield* this.pop();\n yield* this.step();\n break;\n case 'newline':\n this.onKeyLine = false;\n // fallthrough\n case 'space':\n case 'comment':\n default:\n // all other values are errors\n if (token.end)\n token.end.push(this.sourceToken);\n else\n token.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n}\n\nexports.Parser = Parser;\n","'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar errors = require('./errors.js');\nvar log = require('./log.js');\nvar identity = require('./nodes/identity.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\n\nfunction parseOptions(options) {\n const prettyErrors = options.prettyErrors !== false;\n const lineCounter$1 = options.lineCounter || (prettyErrors && new lineCounter.LineCounter()) || null;\n return { lineCounter: lineCounter$1, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n * EmptyStream and contain additional stream information. In\n * TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n const composer$1 = new composer.Composer(options);\n const docs = Array.from(composer$1.compose(parser$1.parse(source)));\n if (prettyErrors && lineCounter)\n for (const doc of docs) {\n doc.errors.forEach(errors.prettifyError(source, lineCounter));\n doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n }\n if (docs.length > 0)\n return docs;\n return Object.assign([], { empty: true }, composer$1.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n const composer$1 = new composer.Composer(options);\n // `doc` is always set by compose.end(true) at the very latest\n let doc = null;\n for (const _doc of composer$1.compose(parser$1.parse(source), true, source.length)) {\n if (!doc)\n doc = _doc;\n else if (doc.options.logLevel !== 'silent') {\n doc.errors.push(new errors.YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n break;\n }\n }\n if (prettyErrors && lineCounter) {\n doc.errors.forEach(errors.prettifyError(source, lineCounter));\n doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n }\n return doc;\n}\nfunction parse(src, reviver, options) {\n let _reviver = undefined;\n if (typeof reviver === 'function') {\n _reviver = reviver;\n }\n else if (options === undefined && reviver && typeof reviver === 'object') {\n options = reviver;\n }\n const doc = parseDocument(src, options);\n if (!doc)\n return null;\n doc.warnings.forEach(warning => log.warn(doc.options.logLevel, warning));\n if (doc.errors.length > 0) {\n if (doc.options.logLevel !== 'silent')\n throw doc.errors[0];\n else\n doc.errors = [];\n }\n return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n }\n if (typeof options === 'string')\n options = options.length;\n if (typeof options === 'number') {\n const indent = Math.round(options);\n options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n }\n if (value === undefined) {\n const { keepUndefined } = options ?? replacer ?? {};\n if (!keepUndefined)\n return undefined;\n }\n if (identity.isDocument(value) && !_replacer)\n return value.toString(options);\n return new Document.Document(value, _replacer, options).toString(options);\n}\n\nexports.parse = parse;\nexports.parseAllDocuments = parseAllDocuments;\nexports.parseDocument = parseDocument;\nexports.stringify = stringify;\n","'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar Schema = require('./schema/Schema.js');\nvar errors = require('./errors.js');\nvar Alias = require('./nodes/Alias.js');\nvar identity = require('./nodes/identity.js');\nvar Pair = require('./nodes/Pair.js');\nvar Scalar = require('./nodes/Scalar.js');\nvar YAMLMap = require('./nodes/YAMLMap.js');\nvar YAMLSeq = require('./nodes/YAMLSeq.js');\nvar cst = require('./parse/cst.js');\nvar lexer = require('./parse/lexer.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\nvar publicApi = require('./public-api.js');\nvar visit = require('./visit.js');\n\n\n\nexports.Composer = composer.Composer;\nexports.Document = Document.Document;\nexports.Schema = Schema.Schema;\nexports.YAMLError = errors.YAMLError;\nexports.YAMLParseError = errors.YAMLParseError;\nexports.YAMLWarning = errors.YAMLWarning;\nexports.Alias = Alias.Alias;\nexports.isAlias = identity.isAlias;\nexports.isCollection = identity.isCollection;\nexports.isDocument = identity.isDocument;\nexports.isMap = identity.isMap;\nexports.isNode = identity.isNode;\nexports.isPair = identity.isPair;\nexports.isScalar = identity.isScalar;\nexports.isSeq = identity.isSeq;\nexports.Pair = Pair.Pair;\nexports.Scalar = Scalar.Scalar;\nexports.YAMLMap = YAMLMap.YAMLMap;\nexports.YAMLSeq = YAMLSeq.YAMLSeq;\nexports.CST = cst;\nexports.Lexer = lexer.Lexer;\nexports.LineCounter = lineCounter.LineCounter;\nexports.Parser = parser.Parser;\nexports.parse = publicApi.parse;\nexports.parseAllDocuments = publicApi.parseAllDocuments;\nexports.parseDocument = publicApi.parseDocument;\nexports.stringify = publicApi.stringify;\nexports.visit = visit.visit;\nexports.visitAsync = visit.visitAsync;\n","{\n \"name\": \"dotenv\",\n \"version\": \"17.2.3\",\n \"description\": \"Loads environment variables from .env file\",\n \"main\": \"lib/main.js\",\n \"types\": \"lib/main.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/main.d.ts\",\n \"require\": \"./lib/main.js\",\n \"default\": \"./lib/main.js\"\n },\n \"./config\": \"./config.js\",\n \"./config.js\": \"./config.js\",\n \"./lib/env-options\": \"./lib/env-options.js\",\n \"./lib/env-options.js\": \"./lib/env-options.js\",\n \"./lib/cli-options\": \"./lib/cli-options.js\",\n \"./lib/cli-options.js\": \"./lib/cli-options.js\",\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"dts-check\": \"tsc --project tests/types/tsconfig.json\",\n \"lint\": \"standard\",\n \"pretest\": \"npm run lint && npm run dts-check\",\n \"test\": \"tap run tests/**/*.js --allow-empty-coverage --disable-coverage --timeout=60000\",\n \"test:coverage\": \"tap run tests/**/*.js --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov\",\n \"prerelease\": \"npm test\",\n \"release\": \"standard-version\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/motdotla/dotenv.git\"\n },\n \"homepage\": \"https://github.com/motdotla/dotenv#readme\",\n \"funding\": \"https://dotenvx.com\",\n \"keywords\": [\n \"dotenv\",\n \"env\",\n \".env\",\n \"environment\",\n \"variables\",\n \"config\",\n \"settings\"\n ],\n \"readmeFilename\": \"README.md\",\n \"license\": \"BSD-2-Clause\",\n \"devDependencies\": {\n \"@types/node\": \"^18.11.3\",\n \"decache\": \"^4.6.2\",\n \"sinon\": \"^14.0.1\",\n \"standard\": \"^17.0.0\",\n \"standard-version\": \"^9.5.0\",\n \"tap\": \"^19.2.0\",\n \"typescript\": \"^4.8.4\"\n },\n \"engines\": {\n \"node\": \">=12\"\n },\n \"browser\": {\n \"fs\": false\n }\n}\n","const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\n// Array of tips to display randomly\nconst TIPS = [\n '🔐 encrypt with Dotenvx: https://dotenvx.com',\n '🔐 prevent committing .env to code: https://dotenvx.com/precommit',\n '🔐 prevent building .env in docker: https://dotenvx.com/prebuild',\n '📡 add observability to secrets: https://dotenvx.com/ops',\n '👥 sync secrets across teammates & machines: https://dotenvx.com/ops',\n '🗂️ backup and recover secrets: https://dotenvx.com/ops',\n '✅ audit secrets and track compliance: https://dotenvx.com/ops',\n '🔄 add secrets lifecycle management: https://dotenvx.com/ops',\n '🔑 add access controls to secrets: https://dotenvx.com/ops',\n '🛠️ run anywhere with `dotenvx run -- yourcommand`',\n '⚙️ specify custom .env file path with { path: \\'/custom/path/.env\\' }',\n '⚙️ enable debug logging with { debug: true }',\n '⚙️ override existing env vars with { override: true }',\n '⚙️ suppress all logs with { quiet: true }',\n '⚙️ write to custom object with { processEnv: myObject }',\n '⚙️ load multiple .env files with { path: [\\'.env.local\\', \\'.env\\'] }'\n]\n\n// Get a random tip from the tips array\nfunction _getRandomTip () {\n return TIPS[Math.floor(Math.random() * TIPS.length)]\n}\n\nfunction parseBoolean (value) {\n if (typeof value === 'string') {\n return !['false', '0', 'no', 'off', ''].includes(value.toLowerCase())\n }\n return Boolean(value)\n}\n\nfunction supportsAnsi () {\n return process.stdout.isTTY // && process.env.TERM !== 'dumb'\n}\n\nfunction dim (text) {\n return supportsAnsi() ? `\\x1b[2m${text}\\x1b[0m` : text\n}\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n const obj = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n\nfunction _parseVault (options) {\n options = options || {}\n\n const vaultPath = _vaultPath(options)\n options.path = vaultPath // parse .env.vault\n const result = DotenvModule.configDotenv(options)\n if (!result.parsed) {\n const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n err.code = 'MISSING_DATA'\n throw err\n }\n\n // handle scenario for comma separated keys - for use with key rotation\n // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n const keys = _dotenvKey(options).split(',')\n const length = keys.length\n\n let decrypted\n for (let i = 0; i < length; i++) {\n try {\n // Get full key\n const key = keys[i].trim()\n\n // Get instructions for decrypt\n const attrs = _instructions(result, key)\n\n // Decrypt\n decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n break\n } catch (error) {\n // last key\n if (i + 1 >= length) {\n throw error\n }\n // try next key\n }\n }\n\n // Parse decrypted .env string\n return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n console.error(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _log (message) {\n console.log(`[dotenv@${version}] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n // prioritize developer directly setting options.DOTENV_KEY\n if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n return options.DOTENV_KEY\n }\n\n // secondary infra already contains a DOTENV_KEY environment variable\n if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n return process.env.DOTENV_KEY\n }\n\n // fallback to empty string\n return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n // Parse DOTENV_KEY. Format is a URI\n let uri\n try {\n uri = new URL(dotenvKey)\n } catch (error) {\n if (error.code === 'ERR_INVALID_URL') {\n const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n throw error\n }\n\n // Get decrypt key\n const key = uri.password\n if (!key) {\n const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get environment\n const environment = uri.searchParams.get('environment')\n if (!environment) {\n const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get ciphertext payload\n const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n if (!ciphertext) {\n const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n throw err\n }\n\n return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n let possibleVaultPath = null\n\n if (options && options.path && options.path.length > 0) {\n if (Array.isArray(options.path)) {\n for (const filepath of options.path) {\n if (fs.existsSync(filepath)) {\n possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n }\n }\n } else {\n possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n }\n } else {\n possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n }\n\n if (fs.existsSync(possibleVaultPath)) {\n return possibleVaultPath\n }\n\n return null\n}\n\nfunction _resolveHome (envPath) {\n return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n const debug = parseBoolean(process.env.DOTENV_CONFIG_DEBUG || (options && options.debug))\n const quiet = parseBoolean(process.env.DOTENV_CONFIG_QUIET || (options && options.quiet))\n\n if (debug || !quiet) {\n _log('Loading env from encrypted .env.vault')\n }\n\n const parsed = DotenvModule._parseVault(options)\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsed, options)\n\n return { parsed }\n}\n\nfunction configDotenv (options) {\n const dotenvPath = path.resolve(process.cwd(), '.env')\n let encoding = 'utf8'\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n let debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || (options && options.debug))\n let quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || (options && options.quiet))\n\n if (options && options.encoding) {\n encoding = options.encoding\n } else {\n if (debug) {\n _debug('No encoding is specified. UTF-8 is used by default')\n }\n }\n\n let optionPaths = [dotenvPath] // default, look for .env\n if (options && options.path) {\n if (!Array.isArray(options.path)) {\n optionPaths = [_resolveHome(options.path)]\n } else {\n optionPaths = [] // reset default\n for (const filepath of options.path) {\n optionPaths.push(_resolveHome(filepath))\n }\n }\n }\n\n // Build the parsed data in a temporary object (because we need to return it). Once we have the final\n // parsed data, we will combine it with process.env (or options.processEnv if provided).\n let lastError\n const parsedAll = {}\n for (const path of optionPaths) {\n try {\n // Specifying an encoding returns a string instead of a buffer\n const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n DotenvModule.populate(parsedAll, parsed, options)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${path} ${e.message}`)\n }\n lastError = e\n }\n }\n\n const populated = DotenvModule.populate(processEnv, parsedAll, options)\n\n // handle user settings DOTENV_CONFIG_ options inside .env file(s)\n debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || debug)\n quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || quiet)\n\n if (debug || !quiet) {\n const keysCount = Object.keys(populated).length\n const shortPaths = []\n for (const filePath of optionPaths) {\n try {\n const relative = path.relative(process.cwd(), filePath)\n shortPaths.push(relative)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${filePath} ${e.message}`)\n }\n lastError = e\n }\n }\n\n _log(`injecting env (${keysCount}) from ${shortPaths.join(',')} ${dim(`-- tip: ${_getRandomTip()}`)}`)\n }\n\n if (lastError) {\n return { parsed: parsedAll, error: lastError }\n } else {\n return { parsed: parsedAll }\n }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n // fallback to original dotenv if DOTENV_KEY is not set\n if (_dotenvKey(options).length === 0) {\n return DotenvModule.configDotenv(options)\n }\n\n const vaultPath = _vaultPath(options)\n\n // dotenvKey exists but .env.vault file does not exist\n if (!vaultPath) {\n _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n return DotenvModule.configDotenv(options)\n }\n\n return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n const key = Buffer.from(keyStr.slice(-64), 'hex')\n let ciphertext = Buffer.from(encrypted, 'base64')\n\n const nonce = ciphertext.subarray(0, 12)\n const authTag = ciphertext.subarray(-16)\n ciphertext = ciphertext.subarray(12, -16)\n\n try {\n const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n aesgcm.setAuthTag(authTag)\n return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n } catch (error) {\n const isRange = error instanceof RangeError\n const invalidKeyLength = error.message === 'Invalid key length'\n const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n if (isRange || invalidKeyLength) {\n const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n } else if (decryptionFailed) {\n const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n err.code = 'DECRYPTION_FAILED'\n throw err\n } else {\n throw error\n }\n }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n const debug = Boolean(options && options.debug)\n const override = Boolean(options && options.override)\n const populated = {}\n\n if (typeof parsed !== 'object') {\n const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n err.code = 'OBJECT_REQUIRED'\n throw err\n }\n\n // Set process.env\n for (const key of Object.keys(parsed)) {\n if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n if (override === true) {\n processEnv[key] = parsed[key]\n populated[key] = parsed[key]\n }\n\n if (debug) {\n if (override === true) {\n _debug(`\"${key}\" is already defined and WAS overwritten`)\n } else {\n _debug(`\"${key}\" is already defined and was NOT overwritten`)\n }\n }\n } else {\n processEnv[key] = parsed[key]\n populated[key] = parsed[key]\n }\n }\n\n return populated\n}\n\nconst DotenvModule = {\n configDotenv,\n _configVault,\n _parseVault,\n config,\n decrypt,\n parse,\n populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n","import { err, fromThrowable, ok } from \"neverthrow\";\nimport * as yaml from \"yaml\";\nimport { readFile, readdir } from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { basename, join } from \"node:path\";\nimport { parse } from \"dotenv\";\nimport { executeCommand, parseJsonOutput, parseSnapshotRefs } from \"@packages/agent-browser-adapter\";\nimport * as os from \"node:os\";\n\n//#region src/parser/env-resolver.ts\n/**\n* 環境変数リゾルバー\n*\n* フロー内の環境変数参照(${VAR}形式)を解決し、\n* 実際の値に展開する。\n*/\n/**\n* 環境変数マップを統合する\n*\n* 優先順位: processEnv > dotEnv > flowEnv\n* 純粋関数として実装。\n*/\nconst mergeEnvMaps = (processEnv, dotEnv, flowEnv) => {\n\tconst merged = {};\n\tObject.assign(merged, flowEnv);\n\tObject.assign(merged, dotEnv);\n\tfor (const [key, value] of Object.entries(processEnv)) if (value !== void 0) merged[key] = value;\n\treturn merged;\n};\n/**\n* 文字列内の環境変数参照を解決する\n*\n* ${VAR} 形式の全ての参照を置換。\n* 未定義の変数はエラーとして扱う。\n*/\nconst resolveStringVariables = (text, envMap, location) => {\n\tconst matches = [...text.matchAll(/\\$\\{([A-Za-z_][A-Za-z0-9_]*)\\}/g)];\n\tif (matches.length === 0) return ok(text);\n\tlet resolved = text;\n\tfor (const match of matches) {\n\t\tconst fullMatch = match[0];\n\t\tconst varName = match[1];\n\t\tconst value = envMap[varName];\n\t\tif (value === void 0) return err({\n\t\t\ttype: \"undefined_variable\",\n\t\t\tmessage: `Variable \"${varName}\" is not defined`,\n\t\t\tvariableName: varName,\n\t\t\tlocation\n\t\t});\n\t\tresolved = resolved.split(fullMatch).join(value);\n\t}\n\treturn ok(resolved);\n};\n/**\n* 値がRecord型かどうかを判定する型ガード\n*\n* @param value - 判定対象の値\n* @returns Record型の場合true\n*/\nconst isRecord$2 = (value) => {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n/**\n* オブジェクトの全てのプロパティを走査して環境変数を解決する\n*\n* 再帰的に処理(ネストされたオブジェクトに対応)\n* mutableな操作を行うが、structuredCloneされたオブジェクトに対して行うため安全\n*\n* @param obj - 解決対象のオブジェクト\n* @param envMap - 環境変数マップ\n* @param location - エラー報告用のロケーション\n* @returns 成功時: void、失敗時: ParseError\n*/\nconst resolveObjectVariables = (obj, envMap, location) => {\n\tconst entries = Object.entries(obj);\n\t/**\n\t* 単一のエントリを処理する\n\t*/\n\tconst processEntry = ([key, value]) => {\n\t\tif (typeof value === \"string\") return resolveStringVariables(value, envMap, `${location}.${key}`).map((resolved) => {\n\t\t\tobj[key] = resolved;\n\t\t});\n\t\tif (isRecord$2(value)) return resolveObjectVariables(value, envMap, `${location}.${key}`);\n\t\treturn ok(void 0);\n\t};\n\treturn entries.reduce((acc, entry) => acc.andThen(() => processEntry(entry)), ok(void 0));\n};\n/**\n* コマンド内の環境変数を解決する\n*\n* コマンドをディープクローンし、クローン先で環境変数を展開する。\n* structuredCloneにより型安全にクローンを作成し、その後mutableに変更する。\n*\n* @param command - 解決対象のコマンド\n* @param envMap - 環境変数マップ\n* @param commandIndex - コマンドのインデックス(エラー報告用)\n* @returns 成功時: 新しいCommandオブジェクト、失敗時: ParseError\n*/\nconst resolveCommandVariables = (command, envMap, commandIndex) => {\n\tconst cloned = structuredClone(command);\n\treturn resolveObjectVariables(cloned, envMap, `step[${commandIndex}]`).map(() => cloned);\n};\n/**\n* フロー内の環境変数参照を解決する\n*\n* @param flow - パース済みのFlowオブジェクト\n* @param processEnv - プロセス環境変数(process.env)\n* @param dotEnv - .envファイルから読み込んだ環境変数\n* @returns 成功時: 環境変数が展開されたFlow、失敗時: ParseError\n*\n* @remarks\n* 環境変数の優先順位:\n* 1. processEnv(最優先)\n* 2. dotEnv\n* 3. flow.env(最後の選択肢)\n*\n* @example\n* const flow: Flow = {\n* name: 'login',\n* env: { BASE_URL: 'https://example.com' },\n* steps: [\n* { command: 'open', url: '${BASE_URL}' },\n* { command: 'fill', selector: 'password', value: '${PASSWORD}' }\n* ]\n* };\n*\n* const result = resolveEnvVariables(\n* flow,\n* process.env,\n* { PASSWORD: 'secret' }\n* );\n*/\nconst resolveEnvVariables = (flow, processEnv, dotEnv) => {\n\tconst envMap = mergeEnvMaps(processEnv, dotEnv, flow.env);\n\treturn flow.steps.reduce((acc, command, index) => acc.andThen((commands) => resolveCommandVariables(command, envMap, index).map((resolved) => [...commands, resolved])), ok([])).map((resolvedCommands) => ({\n\t\t...flow,\n\t\tsteps: resolvedCommands\n\t}));\n};\n\n//#endregion\n//#region src/parser/validators/type-guards.ts\n/**\n* YAML簡略形式を検出するヘルパー\n*\n* { click: '...' } のような形式で、commandキーが存在しない場合にtrue\n*\n* @param obj - チェック対象のオブジェクト\n* @param key - 検出するキー名\n* @returns YAML簡略形式の場合true\n*/\nconst hasYamlKey = (obj, key) => {\n\treturn key in obj && !(\"command\" in obj);\n};\n/**\n* 値がRecord型かどうかを判定する型ガード\n*\n* unknown型の値がRecord<string, unknown>であることを型安全に判定する。\n* オブジェクトでない場合、nullの場合、配列の場合はfalseを返す。\n*\n* @param value - 変換対象の値\n* @returns Record型の場合true、それ以外false\n*/\nconst isRecord$1 = (value) => {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n/**\n* 型安全なオブジェクト変換ヘルパー\n*\n* unknown型の値をRecord<string, unknown>に変換する。\n* オブジェクトでない場合はnullを返す。\n*\n* @param value - 変換対象の値\n* @returns オブジェクトの場合Record<string, unknown>、それ以外null\n*/\nconst toRecord = (value) => {\n\tif (!isRecord$1(value)) return null;\n\treturn value;\n};\n/**\n* OpenCommandを正規化\n*\n* 正規化済み形式: { command: 'open', url: '...' }\n* YAML簡略形式: { open: '...' }\n*\n* @param value - 検証対象の値\n* @returns 正規化されたOpenCommand、または不正な場合null\n*/\nconst normalizeOpenCommand = (value) => {\n\tconst obj = toRecord(value);\n\tif (obj === null) return null;\n\tif (obj.command === \"open\" && typeof obj.url === \"string\") return {\n\t\tcommand: \"open\",\n\t\turl: obj.url\n\t};\n\tif (hasYamlKey(obj, \"open\") && typeof obj.open === \"string\") return {\n\t\tcommand: \"open\",\n\t\turl: obj.open\n\t};\n\treturn null;\n};\n/**\n* ClickCommandを構築するヘルパー\n*\n* @param selector - セレクタ文字列\n* @returns ClickCommand\n*/\nconst buildClickCommand = (selector) => {\n\treturn {\n\t\tcommand: \"click\",\n\t\tselector\n\t};\n};\n/**\n* 正規化済みClickCommandを検証\n*\n* @param obj - 検証対象のオブジェクト\n* @returns ClickCommand、または不正な場合null\n*/\nconst checkNormalizedClick = (obj) => {\n\tif (obj.command === \"click\" && typeof obj.selector === \"string\") return buildClickCommand(obj.selector);\n\treturn null;\n};\n/**\n* YAML簡略形式のClickCommandを検証\n*\n* @param obj - 検証対象のオブジェクト\n* @returns ClickCommand、または不正な場合null\n*/\nconst checkYamlClick = (obj) => {\n\tif (!hasYamlKey(obj, \"click\")) return null;\n\tif (typeof obj.click === \"string\") return {\n\t\tcommand: \"click\",\n\t\tselector: obj.click\n\t};\n\tconst inner = toRecord(obj.click);\n\tif (inner !== null && typeof inner.selector === \"string\") return buildClickCommand(inner.selector);\n\treturn null;\n};\n/**\n* ClickCommandを正規化\n*\n* 正規化済み形式: { command: 'click', selector: '...' }\n* YAML簡略形式: { click: '...' } または { click: { selector: '...' } }\n*\n* @param value - 検証対象の値\n* @returns 正規化されたClickCommand、または不正な場合null\n*/\nconst normalizeClickCommand = (value) => {\n\tconst obj = toRecord(value);\n\tif (obj === null) return null;\n\tconst normalized = checkNormalizedClick(obj);\n\tif (normalized !== null) return normalized;\n\treturn checkYamlClick(obj);\n};\n/**\n* テキスト値を取得するヘルパー(text または value フィールド)\n*\n* @param obj - オブジェクト\n* @returns テキスト値、または存在しない場合null\n*/\nconst extractTextOrValue = (obj) => {\n\tif (typeof obj.text === \"string\") return obj.text;\n\tif (typeof obj.value === \"string\") return obj.value;\n\treturn null;\n};\n/**\n* TypeCommandを構築するヘルパー\n*\n* @param selector - セレクタ文字列\n* @param value - 入力値\n* @returns TypeCommand\n*/\nconst buildTypeCommand = (selector, value) => {\n\treturn {\n\t\tcommand: \"type\",\n\t\tselector,\n\t\tvalue\n\t};\n};\n/**\n* 正規化済みTypeCommandを検証\n*\n* @param obj - 検証対象のオブジェクト\n* @returns TypeCommand、または不正な場合null\n*/\nconst checkNormalizedType = (obj) => {\n\tif (obj.command === \"type\" && typeof obj.selector === \"string\" && typeof obj.value === \"string\") return buildTypeCommand(obj.selector, obj.value);\n\treturn null;\n};\n/**\n* YAML簡略形式のTypeCommandを検証\n*\n* @param obj - 検証対象のオブジェクト\n* @returns TypeCommand、または不正な場合null\n*/\nconst checkYamlType = (obj) => {\n\tif (!hasYamlKey(obj, \"type\")) return null;\n\tconst inner = toRecord(obj.type);\n\tif (inner === null || typeof inner.selector !== \"string\") return null;\n\tconst text = extractTextOrValue(inner);\n\tif (text === null) return null;\n\treturn buildTypeCommand(inner.selector, text);\n};\n/**\n* TypeCommandを正規化\n*\n* 正規化済み形式: { command: 'type', selector: '...', value: '...' }\n* YAML簡略形式: { type: { selector: '...', text: '...' } } または { type: { selector: '...', value: '...' } }\n*\n* @param value - 検証対象の値\n* @returns 正規化されたTypeCommand、または不正な場合null\n*/\nconst normalizeTypeCommand = (value) => {\n\tconst obj = toRecord(value);\n\tif (obj === null) return null;\n\tconst normalized = checkNormalizedType(obj);\n\tif (normalized !== null) return normalized;\n\treturn checkYamlType(obj);\n};\n/**\n* 正規化済みFillCommandを検証\n*\n* @param obj - 検証対象のオブジェクト\n* @returns FillCommand、または不正な場合null\n*/\nconst checkNormalizedFill = (obj) => {\n\tif (obj.command === \"fill\" && typeof obj.selector === \"string\" && typeof obj.value === \"string\") return {\n\t\tcommand: \"fill\",\n\t\tselector: obj.selector,\n\t\tvalue: obj.value\n\t};\n\treturn null;\n};\n/**\n* YAML簡略形式のFillCommandを検証\n*\n* @param obj - 検証対象のオブジェクト\n* @returns FillCommand、または不正な場合null\n*/\nconst checkYamlFill = (obj) => {\n\tif (!hasYamlKey(obj, \"fill\")) return null;\n\tconst inner = toRecord(obj.fill);\n\tif (inner === null || typeof inner.selector !== \"string\") return null;\n\tconst text = extractTextOrValue(inner);\n\tif (text === null) return null;\n\treturn {\n\t\tcommand: \"fill\",\n\t\tselector: inner.selector,\n\t\tvalue: text\n\t};\n};\n/**\n* FillCommandを正規化\n*\n* 正規化済み形式: { command: 'fill', selector: '...', value: '...' }\n* YAML簡略形式: { fill: { selector: '...', text: '...' } } または { fill: { selector: '...', value: '...' } }\n*\n* @param value - 検証対象の値\n* @returns 正規化されたFillCommand、または不正な場合null\n*/\nconst normalizeFillCommand = (value) => {\n\tconst obj = toRecord(value);\n\tif (obj === null) return null;\n\tconst normalized = checkNormalizedFill(obj);\n\tif (normalized !== null) return normalized;\n\treturn checkYamlFill(obj);\n};\n/**\n* PressCommandを正規化\n*\n* 正規化済み形式: { command: 'press', key: '...' }\n* YAML簡略形式: { press: '...' }\n*\n* @param value - 検証対象の値\n* @returns 正規化されたPressCommand、または不正な場合null\n*/\nconst normalizePressCommand = (value) => {\n\tconst obj = toRecord(value);\n\tif (obj === null) return null;\n\tif (obj.command === \"press\" && typeof obj.key === \"string\") return {\n\t\tcommand: \"press\",\n\t\tkey: obj.key\n\t};\n\tif (hasYamlKey(obj, \"press\") && typeof obj.press === \"string\") return {\n\t\tcommand: \"press\",\n\t\tkey: obj.press\n\t};\n\treturn null;\n};\n/**\n* HoverCommandを正規化\n*\n* 正規化済み形式: { command: 'hover', selector: '...' }\n* YAML簡略形式: { hover: '...' }\n*\n* @param value - 検証対象の値\n* @returns 正規化されたHoverCommand、または不正な場合null\n*/\nconst normalizeHoverCommand = (value) => {\n\tconst obj = toRecord(value);\n\tif (obj === null) return null;\n\tif (obj.command === \"hover\" && typeof obj.selector === \"string\") return {\n\t\tcommand: \"hover\",\n\t\tselector: obj.selector\n\t};\n\tif (hasYamlKey(obj, \"hover\") && typeof obj.hover === \"string\") return {\n\t\tcommand: \"hover\",\n\t\tselector: obj.hover\n\t};\n\treturn null;\n};\n/**\n* 正規化済みSelectCommandを検証\n*\n* @param obj - 検証対象のオブジェクト\n* @returns SelectCommand、または不正な場合null\n*/\nconst checkNormalizedSelect = (obj) => {\n\tif (obj.command === \"select\" && typeof obj.selector === \"string\" && typeof obj.value === \"string\") return {\n\t\tcommand: \"select\",\n\t\tselector: obj.selector,\n\t\tvalue: obj.value\n\t};\n\treturn null;\n};\n/**\n* YAML簡略形式のSelectCommandを検証\n*\n* @param obj - 検証対象のオブジェクト\n* @returns SelectCommand、または不正な場合null\n*/\nconst checkYamlSelect = (obj) => {\n\tif (!hasYamlKey(obj, \"select\")) return null;\n\tconst inner = toRecord(obj.select);\n\tif (inner === null || typeof inner.selector !== \"string\" || typeof inner.value !== \"string\") return null;\n\treturn {\n\t\tcommand: \"select\",\n\t\tselector: inner.selector,\n\t\tvalue: inner.value\n\t};\n};\n/**\n* SelectCommandを正規化\n*\n* 正規化済み形式: { command: 'select', selector: '...', value: '...' }\n* YAML簡略形式: { select: { selector: '...', value: '...' } }\n*\n* @param value - 検証対象の値\n* @returns 正規化されたSelectCommand、または不正な場合null\n*/\nconst normalizeSelectCommand = (value) => {\n\tconst obj = toRecord(value);\n\tif (obj === null) return null;\n\tconst normalized = checkNormalizedSelect(obj);\n\tif (normalized !== null) return normalized;\n\treturn checkYamlSelect(obj);\n};\n/**\n* 正規化済みScrollCommandを検証\n*\n* @param obj - 検証対象のオブジェクト\n* @returns ScrollCommand、または不正な場合null\n*/\n/**\n* スクロール方向の型ガード\n*/\nconst isScrollDirection = (value) => {\n\treturn value === \"up\" || value === \"down\" || value === \"left\" || value === \"right\";\n};\nconst checkNormalizedScroll = (obj) => {\n\tif (obj.command === \"scroll\" && isScrollDirection(obj.direction) && typeof obj.amount === \"number\") return {\n\t\tcommand: \"scroll\",\n\t\tdirection: obj.direction,\n\t\tamount: obj.amount\n\t};\n\treturn null;\n};\n/**\n* YAML簡略形式のScrollCommandを検証\n*\n* @param obj - 検証対象のオブジェクト\n* @returns ScrollCommand、または不正な場合null\n*/\nconst checkYamlScroll = (obj) => {\n\tif (!hasYamlKey(obj, \"scroll\")) return null;\n\tconst inner = toRecord(obj.scroll);\n\tif (inner === null || !isScrollDirection(inner.direction) || typeof inner.amount !== \"number\") return null;\n\treturn {\n\t\tcommand: \"scroll\",\n\t\tdirection: inner.direction,\n\t\tamount: inner.amount\n\t};\n};\n/**\n* ScrollCommandを正規化\n*\n* 正規化済み形式: { command: 'scroll', direction: 'up' | 'down' | 'left' | 'right', amount: number }\n* YAML簡略形式: { scroll: { direction: 'up' | 'down' | 'left' | 'right', amount: number } }\n*\n* @param value - 検証対象の値\n* @returns 正規化されたScrollCommand、または不正な場合null\n*/\nconst normalizeScrollCommand = (value) => {\n\tconst obj = toRecord(value);\n\tif (obj === null) return null;\n\tconst normalized = checkNormalizedScroll(obj);\n\tif (normalized !== null) return normalized;\n\treturn checkYamlScroll(obj);\n};\n/**\n* ScrollIntoViewCommandを正規化\n*\n* 正規化済み形式: { command: 'scrollIntoView', selector: '...' }\n* YAML簡略形式: { scrollIntoView: '...' }\n*\n* @param value - 検証対象の値\n* @returns 正規化されたScrollIntoViewCommand、または不正な場合null\n*/\nconst normalizeScrollIntoViewCommand = (value) => {\n\tconst obj = toRecord(value);\n\tif (obj === null) return null;\n\tif (obj.command === \"scrollIntoView\" && typeof obj.selector === \"string\") return {\n\t\tcommand: \"scrollIntoView\",\n\t\tselector: obj.selector\n\t};\n\tif (hasYamlKey(obj, \"scrollIntoView\") && typeof obj.scrollIntoView === \"string\") return {\n\t\tcommand: \"scrollIntoView\",\n\t\tselector: obj.scrollIntoView\n\t};\n\treturn null;\n};\n/**\n* LoadStateの型ガード\n*\n* @param value - 判定対象の値\n* @returns LoadStateの場合true\n*/\nconst isLoadState = (value) => {\n\treturn value === \"load\" || value === \"domcontentloaded\" || value === \"networkidle\";\n};\n/**\n* 正規化済みWaitCommandを検証(基本形式)\n*\n* @param obj - 検証対象のオブジェクト\n* @returns WaitCommand、または不正な場合null\n*/\nconst checkNormalizedWaitBasic = (obj) => {\n\tif (obj.command !== \"wait\") return null;\n\tif (typeof obj.ms === \"number\") return {\n\t\tcommand: \"wait\",\n\t\tms: obj.ms\n\t};\n\tif (typeof obj.selector === \"string\") return {\n\t\tcommand: \"wait\",\n\t\tselector: obj.selector\n\t};\n\tif (typeof obj.text === \"string\") return {\n\t\tcommand: \"wait\",\n\t\ttext: obj.text\n\t};\n\treturn null;\n};\n/**\n* 正規化済みWaitCommandを検証(拡張形式)\n*\n* @param obj - 検証対象のオブジェクト\n* @returns WaitCommand、または不正な場合null\n*/\nconst checkNormalizedWaitExtended = (obj) => {\n\tif (obj.command !== \"wait\") return null;\n\tif (isLoadState(obj.load)) return {\n\t\tcommand: \"wait\",\n\t\tload: obj.load\n\t};\n\tif (typeof obj.url === \"string\") return {\n\t\tcommand: \"wait\",\n\t\turl: obj.url\n\t};\n\tif (typeof obj.fn === \"string\") return {\n\t\tcommand: \"wait\",\n\t\tfn: obj.fn\n\t};\n\treturn null;\n};\n/**\n* 正規化済みWaitCommandを検証\n*\n* @param obj - 検証対象のオブジェクト\n* @returns WaitCommand、または不正な場合null\n*/\nconst checkNormalizedWait = (obj) => {\n\treturn checkNormalizedWaitBasic(obj) ?? checkNormalizedWaitExtended(obj);\n};\n/**\n* YAML簡略形式のWaitCommandを検証(オブジェクト形式)\n*\n* @param inner - waitオブジェクトの内容\n* @returns WaitCommand、または不正な場合null\n*/\nconst checkYamlWaitObject = (inner) => {\n\tif (typeof inner.text === \"string\") return {\n\t\tcommand: \"wait\",\n\t\ttext: inner.text\n\t};\n\tif (isLoadState(inner.load)) return {\n\t\tcommand: \"wait\",\n\t\tload: inner.load\n\t};\n\tif (typeof inner.url === \"string\") return {\n\t\tcommand: \"wait\",\n\t\turl: inner.url\n\t};\n\tif (typeof inner.fn === \"string\") return {\n\t\tcommand: \"wait\",\n\t\tfn: inner.fn\n\t};\n\treturn null;\n};\n/**\n* YAML簡略形式のWaitCommandを検証\n*\n* @param obj - 検証対象のオブジェクト\n* @returns WaitCommand、または不正な場合null\n*/\nconst checkYamlWait = (obj) => {\n\tif (!hasYamlKey(obj, \"wait\")) return null;\n\tif (typeof obj.wait === \"number\") return {\n\t\tcommand: \"wait\",\n\t\tms: obj.wait\n\t};\n\tif (typeof obj.wait === \"string\") return {\n\t\tcommand: \"wait\",\n\t\tselector: obj.wait\n\t};\n\tconst inner = toRecord(obj.wait);\n\tif (inner === null) return null;\n\treturn checkYamlWaitObject(inner);\n};\n/**\n* WaitCommandを正規化\n*\n* 正規化済み形式:\n* - { command: 'wait', ms: number }\n* - { command: 'wait', selector: string }\n* - { command: 'wait', text: string }\n* - { command: 'wait', load: LoadState }\n* - { command: 'wait', url: string }\n* - { command: 'wait', fn: string }\n*\n* YAML簡略形式:\n* - { wait: number } → ms指定\n* - { wait: \"<selector>\" } → selector指定(agent-browserと同じ動作)\n* - { wait: { text: \"...\" } } → text指定\n* - { wait: { load: \"networkidle\" } } → load指定\n* - { wait: { url: \"...\" } } → url指定\n* - { wait: { fn: \"...\" } } → fn指定\n*\n* @param value - 検証対象の値\n* @returns 正規化されたWaitCommand、または不正な場合null\n*/\nconst normalizeWaitCommand = (value) => {\n\tconst obj = toRecord(value);\n\tif (obj === null) return null;\n\tconst normalized = checkNormalizedWait(obj);\n\tif (normalized !== null) return normalized;\n\treturn checkYamlWait(obj);\n};\n/**\n* ScreenshotCommandを構築するヘルパー\n*\n* @param path - スクリーンショットのパス\n* @param fullPage - フルページオプション(オプショナル)\n* @returns ScreenshotCommand\n*/\nconst buildScreenshotCommand = (path$1, fullPage) => {\n\tconst result = {\n\t\tcommand: \"screenshot\",\n\t\tpath: path$1\n\t};\n\tif (typeof fullPage === \"boolean\") result.fullPage = fullPage;\n\treturn result;\n};\n/**\n* YAML簡略形式のscreenshotを正規化\n*\n* @param value - screenshot フィールドの値\n* @returns ScreenshotCommand、または不正な場合null\n*/\nconst normalizeYamlScreenshot = (value) => {\n\tif (typeof value === \"string\") return {\n\t\tcommand: \"screenshot\",\n\t\tpath: value\n\t};\n\tconst inner = toRecord(value);\n\tif (inner === null || typeof inner.path !== \"string\") return null;\n\treturn buildScreenshotCommand(inner.path, inner.fullPage);\n};\n/**\n* ScreenshotCommandを正規化\n*\n* 正規化済み形式: { command: 'screenshot', path: '...', fullPage?: boolean }\n* YAML簡略形式:\n* - { screenshot: './path.png' }\n* - { screenshot: { path: '...', fullPage: true } }\n*\n* @param value - 検証対象の値\n* @returns 正規化されたScreenshotCommand、または不正な場合null\n*/\nconst normalizeScreenshotCommand = (value) => {\n\tconst obj = toRecord(value);\n\tif (obj === null) return null;\n\tif (obj.command === \"screenshot\" && typeof obj.path === \"string\") return buildScreenshotCommand(obj.path, obj.fullPage);\n\tif (hasYamlKey(obj, \"screenshot\")) return normalizeYamlScreenshot(obj.screenshot);\n\treturn null;\n};\n/**\n* SnapshotCommandを正規化\n*\n* 正規化済み形式: { command: 'snapshot' }\n* YAML簡略形式: { snapshot: {} } または { snapshot: null }\n*\n* @param value - 検証対象の値\n* @returns 正規化されたSnapshotCommand、または不正な場合null\n*/\nconst normalizeSnapshotCommand = (value) => {\n\tconst obj = toRecord(value);\n\tif (obj === null) return null;\n\tif (obj.command === \"snapshot\") return { command: \"snapshot\" };\n\tif (\"snapshot\" in obj && !(\"command\" in obj)) return { command: \"snapshot\" };\n\treturn null;\n};\n/**\n* EvalCommandを正規化\n*\n* 正規化済み形式: { command: 'eval', script: '...' }\n* YAML簡略形式: { eval: '...' }\n*\n* @param value - 検証対象の値\n* @returns 正規化されたEvalCommand、または不正な場合null\n*/\nconst normalizeEvalCommand = (value) => {\n\tconst obj = toRecord(value);\n\tif (obj === null) return null;\n\tif (obj.command === \"eval\" && typeof obj.script === \"string\") return {\n\t\tcommand: \"eval\",\n\t\tscript: obj.script\n\t};\n\tif (hasYamlKey(obj, \"eval\") && typeof obj.eval === \"string\") return {\n\t\tcommand: \"eval\",\n\t\tscript: obj.eval\n\t};\n\treturn null;\n};\n/**\n* AssertVisibleCommandを正規化\n*\n* 正規化済み形式: { command: 'assertVisible', selector: '...' }\n* YAML簡略形式: { assertVisible: '...' }\n*\n* @param value - 検証対象の値\n* @returns 正規化されたAssertVisibleCommand、または不正な場合null\n*/\nconst normalizeAssertVisibleCommand = (value) => {\n\tconst obj = toRecord(value);\n\tif (obj === null) return null;\n\tif (obj.command === \"assertVisible\" && typeof obj.selector === \"string\") return {\n\t\tcommand: \"assertVisible\",\n\t\tselector: obj.selector\n\t};\n\tif (hasYamlKey(obj, \"assertVisible\") && typeof obj.assertVisible === \"string\") return {\n\t\tcommand: \"assertVisible\",\n\t\tselector: obj.assertVisible\n\t};\n\treturn null;\n};\n/**\n* AssertNotVisibleCommandを正規化\n*\n* 正規化済み形式: { command: 'assertNotVisible', selector: '...' }\n* YAML簡略形式: { assertNotVisible: '...' }\n*\n* @param value - 検証対象の値\n* @returns 正規化されたAssertNotVisibleCommand、または不正な場合null\n*/\nconst normalizeAssertNotVisibleCommand = (value) => {\n\tconst obj = toRecord(value);\n\tif (obj === null) return null;\n\tif (obj.command === \"assertNotVisible\" && typeof obj.selector === \"string\") return {\n\t\tcommand: \"assertNotVisible\",\n\t\tselector: obj.selector\n\t};\n\tif (hasYamlKey(obj, \"assertNotVisible\") && typeof obj.assertNotVisible === \"string\") return {\n\t\tcommand: \"assertNotVisible\",\n\t\tselector: obj.assertNotVisible\n\t};\n\treturn null;\n};\n/**\n* AssertEnabledCommandを正規化\n*\n* 正規化済み形式: { command: 'assertEnabled', selector: '...' }\n* YAML簡略形式: { assertEnabled: '...' }\n*\n* @param value - 検証対象の値\n* @returns 正規化されたAssertEnabledCommand、または不正な場合null\n*/\nconst normalizeAssertEnabledCommand = (value) => {\n\tconst obj = toRecord(value);\n\tif (obj === null) return null;\n\tif (obj.command === \"assertEnabled\" && typeof obj.selector === \"string\") return {\n\t\tcommand: \"assertEnabled\",\n\t\tselector: obj.selector\n\t};\n\tif (hasYamlKey(obj, \"assertEnabled\") && typeof obj.assertEnabled === \"string\") return {\n\t\tcommand: \"assertEnabled\",\n\t\tselector: obj.assertEnabled\n\t};\n\treturn null;\n};\n/**\n* AssertCheckedCommandを構築するヘルパー\n*\n* @param selector - セレクタ文字列\n* @param checked - 期待されるチェック状態(オプショナル)\n* @returns AssertCheckedCommand、またはcheckedが不正な型の場合null\n*/\nconst buildAssertCheckedCommand = (selector, checked) => {\n\tif (checked !== void 0 && typeof checked !== \"boolean\") return null;\n\tconst result = {\n\t\tcommand: \"assertChecked\",\n\t\tselector\n\t};\n\tif (typeof checked === \"boolean\") result.checked = checked;\n\treturn result;\n};\n/**\n* 正規化済みAssertCheckedCommandを検証\n*\n* @param obj - 検証対象のオブジェクト\n* @returns AssertCheckedCommand、または不正な場合null\n*/\nconst checkNormalizedAssertChecked = (obj) => {\n\tif (obj.command === \"assertChecked\" && typeof obj.selector === \"string\") return buildAssertCheckedCommand(obj.selector, obj.checked);\n\treturn null;\n};\n/**\n* YAML簡略形式のAssertCheckedCommandを検証\n*\n* @param obj - 検証対象のオブジェクト\n* @returns AssertCheckedCommand、または不正な場合null\n*/\nconst checkYamlAssertChecked = (obj) => {\n\tif (!hasYamlKey(obj, \"assertChecked\")) return null;\n\tif (typeof obj.assertChecked === \"string\") return {\n\t\tcommand: \"assertChecked\",\n\t\tselector: obj.assertChecked\n\t};\n\tconst inner = toRecord(obj.assertChecked);\n\tif (inner !== null && typeof inner.selector === \"string\") return buildAssertCheckedCommand(inner.selector, inner.checked);\n\treturn null;\n};\n/**\n* AssertCheckedCommandを正規化\n*\n* 正規化済み形式: { command: 'assertChecked', selector: '...', checked?: boolean }\n* YAML簡略形式: { assertChecked: '...' } または { assertChecked: { selector: '...', checked?: boolean } }\n*\n* @param value - 検証対象の値\n* @returns 正規化されたAssertCheckedCommand、または不正な場合null\n*/\nconst normalizeAssertCheckedCommand = (value) => {\n\tconst obj = toRecord(value);\n\tif (obj === null) return null;\n\tconst normalized = checkNormalizedAssertChecked(obj);\n\tif (normalized !== null) return normalized;\n\treturn checkYamlAssertChecked(obj);\n};\n/**\n* 全てのnormalizer関数をまとめた配列\n*\n* validateCommandで順次試行される。\n*/\nconst normalizers = [\n\tnormalizeOpenCommand,\n\tnormalizeClickCommand,\n\tnormalizeTypeCommand,\n\tnormalizeFillCommand,\n\tnormalizePressCommand,\n\tnormalizeHoverCommand,\n\tnormalizeSelectCommand,\n\tnormalizeScrollCommand,\n\tnormalizeScrollIntoViewCommand,\n\tnormalizeWaitCommand,\n\tnormalizeScreenshotCommand,\n\tnormalizeSnapshotCommand,\n\tnormalizeEvalCommand,\n\tnormalizeAssertVisibleCommand,\n\tnormalizeAssertNotVisibleCommand,\n\tnormalizeAssertEnabledCommand,\n\tnormalizeAssertCheckedCommand\n];\n\n//#endregion\n//#region src/parser/validators/command-validator.ts\n/**\n* コマンドバリデーター\n*\n* YAMLからパースされた未知の値を型安全なCommand型に変換する。\n*/\n/**\n* コマンドを検証してCommand型に変換する\n*\n* YAML形式の入力を正規化されたCommand型に変換する。\n* 不正な形式の場合はParseErrorを返す。\n*\n* @param rawCommand - YAMLからパースされた未知の値\n* @param commandIndex - コマンドのインデックス(エラーメッセージ用)\n* @returns 成功時: 正規化されたCommand、失敗時: ParseError\n*/\nconst validateCommand = (rawCommand, commandIndex) => {\n\tif (rawCommand === null || rawCommand === void 0) return err({\n\t\ttype: \"invalid_command\",\n\t\tmessage: \"Command must be an object\",\n\t\tcommandIndex,\n\t\tcommandContent: rawCommand\n\t});\n\tif (typeof rawCommand !== \"object\") return err({\n\t\ttype: \"invalid_command\",\n\t\tmessage: `Command must be an object, got ${typeof rawCommand}`,\n\t\tcommandIndex,\n\t\tcommandContent: rawCommand\n\t});\n\tfor (const normalizer of normalizers) {\n\t\tconst result = normalizer(rawCommand);\n\t\tif (result !== null) return ok(result);\n\t}\n\treturn err({\n\t\ttype: \"invalid_command\",\n\t\tmessage: \"Unknown or invalid command format\",\n\t\tcommandIndex,\n\t\tcommandContent: rawCommand\n\t});\n};\n\n//#endregion\n//#region src/parser/yaml-parser.ts\n/**\n* YAMLパーサー\n*\n* YAML形式のフロー定義をパースし、型安全なFlowオブジェクトに変換する。\n*\n* @remarks\n* 新しいYAML形式のみをサポート:\n* ```yaml\n* env:\n* BASE_URL: http://localhost:3000\n* steps:\n* - open: ${BASE_URL}\n* - assertVisible: Welcome\n* ```\n*\n* - ルートはオブジェクト形式(`steps`キーは必須、`env`キーはオプション)\n* - 旧形式(配列形式や`---`区切り)はサポートしない\n*/\n/**\n* YAMLパースをResult型でラップ\n*\n* fromThrowableのスコープは最小限(yaml.parseのみ)\n*\n* @remarks\n* 新形式では単一ドキュメントのみをサポートするため、parseAllDocumentsではなくparseを使用\n*/\nconst safeYamlParse = fromThrowable((text) => yaml.parse(text), (error) => {\n\tif (error instanceof yaml.YAMLParseError) return {\n\t\ttype: \"yaml_syntax_error\",\n\t\tmessage: error.message,\n\t\tline: error.linePos?.[0]?.line,\n\t\tcolumn: error.linePos?.[0]?.col\n\t};\n\treturn {\n\t\ttype: \"yaml_syntax_error\",\n\t\tmessage: error instanceof Error ? error.message : \"Unknown YAML parse error\"\n\t};\n});\n/**\n* 値がRecord型かどうかを判定する型ガード\n*\n* @param value - 判定対象の値\n* @returns Record型の場合true\n*/\nconst isRecord = (value) => {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n/**\n* ルートオブジェクトの構造を検証する\n*\n* @param root - パース済みのYAMLルートオブジェクト\n* @returns 成功時: ルートオブジェクト、失敗時: ParseError\n*\n* @remarks\n* - ルートが配列の場合: `invalid_flow_structure`エラー\n* - ルートがオブジェクトでない場合: `invalid_flow_structure`エラー\n* - `steps`キーがない場合: `invalid_flow_structure`エラー\n* - `steps`が配列でない場合: `invalid_flow_structure`エラー\n*/\nconst validateRootStructure = (root) => {\n\tif (Array.isArray(root)) return err({\n\t\ttype: \"invalid_flow_structure\",\n\t\tmessage: \"Flow must be an object with 'steps' key, not an array\",\n\t\tdetails: \"Array format is no longer supported. Use object format with steps key.\"\n\t});\n\tif (!isRecord(root)) return err({\n\t\ttype: \"invalid_flow_structure\",\n\t\tmessage: \"Flow must be an object\",\n\t\tdetails: \"Root must be an object with steps key\"\n\t});\n\tif (!(\"steps\" in root)) return err({\n\t\ttype: \"invalid_flow_structure\",\n\t\tmessage: \"Missing required 'steps' key in flow\",\n\t\tdetails: \"Flow object must have a steps key containing an array of commands\"\n\t});\n\tif (!Array.isArray(root.steps)) return err({\n\t\ttype: \"invalid_flow_structure\",\n\t\tmessage: \"'steps' must be an array\",\n\t\tdetails: \"The steps key must contain an array of command objects\"\n\t});\n\treturn ok(root);\n};\n/**\n* envセクションから環境変数マップを構築する\n*\n* @param envSection - envセクションのオブジェクト\n* @returns 環境変数マップ\n*\n* @remarks\n* - 全ての値を文字列に変換\n* - nullとundefinedは除外\n*/\nconst buildEnvMap = (envSection) => {\n\tconst env = {};\n\tfor (const [key, value] of Object.entries(envSection)) if (typeof value === \"string\") env[key] = value;\n\telse if (value !== null && value !== void 0) env[key] = String(value);\n\treturn env;\n};\n/**\n* ルートオブジェクトからenv情報を抽出する\n*\n* @param root - 検証済みのルートオブジェクト\n* @returns env情報\n*\n* @remarks\n* - envキーがない場合: 空のオブジェクトを返す\n* - envがオブジェクトでない場合: 空のオブジェクトを返す\n*/\nconst extractEnvFromRoot = (root) => {\n\tif (!(\"env\" in root)) return {};\n\tconst envSection = root.env;\n\tif (!isRecord(envSection)) return {};\n\treturn buildEnvMap(envSection);\n};\n/**\n* ルートオブジェクトからsteps配列を抽出する\n*\n* @param root - 検証済みのルートオブジェクト\n* @returns steps配列\n*\n* @remarks\n* validateRootStructureで既に配列であることは検証済み\n*/\nconst extractStepsFromRoot = (root) => {\n\treturn Array.isArray(root.steps) ? root.steps : [];\n};\n/**\n* コマンド配列が空でないことを検証する\n*\n* @param commands - 検証対象のコマンド配列\n* @returns 成功時: コマンド配列、失敗時: ParseError\n*/\nconst validateNonEmpty = (commands) => {\n\tif (commands.length === 0) return err({\n\t\ttype: \"invalid_flow_structure\",\n\t\tmessage: \"Flow contains no commands\",\n\t\tdetails: \"Expected at least one command in the command array\"\n\t});\n\treturn ok(commands);\n};\n/**\n* 検証済みコマンド配列に新しいコマンドを追加する\n*\n* @param validated - 既に検証済みのコマンド配列\n* @param command - 検証対象のコマンド\n* @param index - コマンドのインデックス\n* @returns 成功時: 新しいコマンドが追加された配列、失敗時: ParseError\n*/\nconst appendValidatedCommand = (validated, command, index) => {\n\treturn validateCommand(command, index).map((cmd) => [...validated, cmd]);\n};\n/**\n* reduceアキュムレータとコマンドを受け取り、検証済みコマンド配列を返す\n*\n* @param acc - 累積されたResultオブジェクト\n* @param command - 検証対象のコマンド\n* @param index - コマンドのインデックス\n* @returns 成功時: 更新された検証済みコマンド配列、失敗時: ParseError\n*/\nconst reduceValidateCommand = (acc, command, index) => {\n\treturn acc.andThen((validated) => appendValidatedCommand(validated, command, index));\n};\n/**\n* コマンド配列全体を検証する\n*\n* reduceを使用して各コマンドを検証し、型安全なCommand配列に変換。\n* 最初のエラーで処理を停止する。\n*\n* @param cmds - 検証対象のコマンド配列\n* @returns 成功時: 検証済みCommand配列、失敗時: ParseError\n*/\nconst validateAllCommands = (cmds) => {\n\treturn cmds.reduce(reduceValidateCommand, ok([]));\n};\n/**\n* コマンド配列を検証する\n*\n* 各コマンドをバリデーションし、型安全なCommand配列に変換。\n* 最初のエラーで処理を停止する。\n*/\nconst validateCommands = (commands) => {\n\treturn validateNonEmpty(commands).andThen(validateAllCommands);\n};\n/**\n* YAMLファイルをパースしてFlowオブジェクトに変換する\n*\n* @param yamlContent - YAMLファイルの内容\n* @param fileName - ファイル名(フロー名として使用)\n* @returns 成功時: Flowオブジェクト、失敗時: ParseError\n*\n* @remarks\n* 新しいYAML形式のみをサポート:\n* - ルートはオブジェクト形式(`steps`キーは必須、`env`キーはオプション)\n* - 旧形式(配列形式や`---`区切り)はサポートしない\n* - コマンドは型検証され、不正な形式はエラーとなる\n*\n* @example\n* ```typescript\n* const yamlContent = `\n* env:\n* BASE_URL: https://example.com\n* steps:\n* - open: \\${BASE_URL}\n* - click: \"ログイン\"\n* `;\n*\n* const result = parseFlowYaml(yamlContent, 'login.enbu.yaml');\n* result.match(\n* (flow) => console.log(flow.steps),\n* (error) => console.error(error)\n* );\n* ```\n*/\n/**\n* YAMLコンテンツから行開始位置の配列を計算する\n*\n* @param content - YAMLコンテンツ\n* @returns 各行の開始オフセット(0始まり)の配列\n*/\nconst calculateLineStarts = (content) => {\n\tconst lineStarts = [0];\n\tfor (let i = 0; i < content.length; i++) if (content[i] === \"\\n\") lineStarts.push(i + 1);\n\treturn lineStarts;\n};\n/**\n* オフセットから行番号を計算する\n*\n* @param offset - 文字位置のオフセット\n* @param lineStarts - 各行の開始位置配列\n* @returns 1始まりの行番号\n*/\nconst offsetToLineNumber = (offset, lineStarts) => {\n\tfor (let i = lineStarts.length - 1; i >= 0; i--) if (lineStarts[i] <= offset) return i + 1;\n\treturn 1;\n};\n/**\n* stepsシーケンスノードから各ステップの行番号を抽出する\n*\n* @param stepsNode - YAMLのsteps配列ノード\n* @param lineStarts - 各行の開始位置配列\n* @returns 各ステップの行番号配列(1始まり)\n*/\nconst extractLineNumbersFromSteps = (stepsNode, lineStarts) => {\n\tconst lineNumbers = [];\n\tfor (const item of stepsNode.items) if (yaml.isNode(item) && item.range) {\n\t\tconst startOffset = item.range[0];\n\t\tlineNumbers.push(offsetToLineNumber(startOffset, lineStarts));\n\t}\n\treturn lineNumbers;\n};\n/**\n* YAMLドキュメントを安全にパースする\n*/\nconst safeParseDocument = fromThrowable((text) => yaml.parseDocument(text), (error) => ({\n\ttype: \"yaml_syntax_error\",\n\tmessage: error instanceof Error ? error.message : \"Unknown YAML parse error\"\n}));\n/**\n* YAMLテキスト内の各ステップの行番号を取得する\n*\n* VS Code拡張などで、実行中のステップをハイライト表示するために使用する。\n* yaml.parseDocument()を使用してCST情報を保持し、\n* 各ステップの開始行番号を抽出する。\n*\n* @param yamlContent - YAMLファイルの内容\n* @returns 成功時: 各ステップの行番号配列(1始まり)、失敗時: ParseError\n*\n* @example\n* ```typescript\n* const yamlContent = `\n* steps:\n* - open: https://example.com\n* - click: button\n* `;\n* const result = getStepLineNumbers(yamlContent);\n* // result.value = [3, 4] (0始まりのインデックスに対応する1始まりの行番号)\n* ```\n*/\nconst getStepLineNumbers = (yamlContent) => {\n\treturn safeParseDocument(yamlContent).andThen((doc) => {\n\t\tconst contents = doc.contents;\n\t\tif (!yaml.isMap(contents)) return err({\n\t\t\ttype: \"invalid_flow_structure\",\n\t\t\tmessage: \"Root must be an object\",\n\t\t\tdetails: \"Expected object with steps key\"\n\t\t});\n\t\tconst stepsNode = contents.get(\"steps\", true);\n\t\tif (!yaml.isSeq(stepsNode)) return err({\n\t\t\ttype: \"invalid_flow_structure\",\n\t\t\tmessage: \"'steps' must be an array\",\n\t\t\tdetails: \"The steps key must contain an array of command objects\"\n\t\t});\n\t\treturn ok(extractLineNumbersFromSteps(stepsNode, calculateLineStarts(yamlContent)));\n\t});\n};\nconst parseFlowYaml = (yamlContent, fileName) => {\n\treturn safeYamlParse(yamlContent).andThen(validateRootStructure).andThen((root) => {\n\t\tconst env = extractEnvFromRoot(root);\n\t\treturn validateCommands(extractStepsFromRoot(root)).map((validatedCommands) => {\n\t\t\treturn {\n\t\t\t\tname: fileName.replace(/\\.enbu\\.yaml$/, \"\"),\n\t\t\t\tenv,\n\t\t\t\tsteps: validatedCommands\n\t\t\t};\n\t\t});\n\t});\n};\n\n//#endregion\n//#region src/loader/flow-loader.ts\n/**\n* フローローダー\n*\n* ディレクトリから全てのフローファイルを読み込み、\n* パースして環境変数を解決する。\n*/\n/**\n* ディレクトリから*.enbu.yamlファイルを検索する\n*\n* @param dirPath - 検索するディレクトリのパス\n* @returns 成功時: ファイルパスの配列(ソート済み)、失敗時: ParseError\n*/\nconst findFlowFiles = async (dirPath) => {\n\ttry {\n\t\treturn ok((await readdir(dirPath, { withFileTypes: true })).filter((entry) => entry.isFile() && entry.name.endsWith(\".enbu.yaml\")).map((entry) => join(dirPath, entry.name)).sort());\n\t} catch (error) {\n\t\treturn err({\n\t\t\ttype: \"file_read_error\",\n\t\t\tmessage: `Failed to read directory: ${dirPath}`,\n\t\t\tfilePath: dirPath,\n\t\t\tcause: error instanceof Error ? error.message : String(error)\n\t\t});\n\t}\n};\n/**\n* 単一のフローファイルを読み込んでパースする\n*\n* @param filePath - フローファイルのパス\n* @param processEnv - プロセス環境変数\n* @param dotEnv - .envファイルから読み込んだ環境変数\n* @returns 成功時: Flowオブジェクト、失敗時: ParseError\n*/\nconst loadSingleFlow = async (filePath, processEnv, dotEnv) => {\n\tlet yamlContent;\n\ttry {\n\t\tyamlContent = await readFile(filePath, \"utf-8\");\n\t} catch (error) {\n\t\treturn err({\n\t\t\ttype: \"file_read_error\",\n\t\t\tmessage: `Failed to read file: ${filePath}`,\n\t\t\tfilePath,\n\t\t\tcause: error instanceof Error ? error.message : String(error)\n\t\t});\n\t}\n\tconst fileName = basename(filePath);\n\treturn parseFlowYaml(yamlContent, fileName).andThen((flow) => resolveEnvVariables(flow, processEnv, dotEnv));\n};\n/**\n* .envファイルを読み込む\n*\n* @param dotEnvPath - .envファイルのパス\n* @returns 成功時: env変数のマップ(ファイルが存在しない場合は空オブジェクト)、失敗時: ParseError\n*\n* @remarks\n* dotenv.configはprocess.envを変更する副作用があるため、\n* dotenv.parseを使用してファイル内容を直接パースする。\n*\n* エラーハンドリング:\n* - ENOENT(ファイルが存在しない): 空オブジェクトを返す(正常系)\n* - その他のエラー(EACCES、EIOなど): エラーを伝播させる\n*/\nconst loadDotEnv = async (dotEnvPath) => {\n\ttry {\n\t\treturn ok(parse(await readFile(dotEnvPath, \"utf-8\")));\n\t} catch (error) {\n\t\tif (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") return ok({});\n\t\treturn err({\n\t\t\ttype: \"file_read_error\",\n\t\t\tmessage: `Failed to read .env file: ${dotEnvPath}`,\n\t\t\tfilePath: dotEnvPath,\n\t\t\tcause: error instanceof Error ? error.message : String(error)\n\t\t});\n\t}\n};\n/**\n* 非同期reduceでフローファイルを順次読み込む\n*\n* @param acc - 累積されたResultオブジェクト(Promise)\n* @param filePath - 読み込むフローファイルのパス\n* @param processEnv - プロセス環境変数\n* @param dotEnv - .envファイルから読み込んだ環境変数\n* @returns 成功時: 更新されたFlow配列、失敗時: ParseError\n*/\nconst reduceLoadFlow = async (acc, filePath, processEnv, dotEnv) => {\n\treturn (await acc).match(async (flows) => {\n\t\treturn (await loadSingleFlow(filePath, processEnv, dotEnv)).map((flow) => [...flows, flow]);\n\t}, (error) => err(error));\n};\n/**\n* 全てのフローファイルを順次読み込む\n*\n* @param flowFiles - フローファイルのパス配列\n* @param processEnv - プロセス環境変数\n* @param dotEnv - .envファイルから読み込んだ環境変数\n* @returns 成功時: Flowオブジェクトの配列、失敗時: ParseError\n*/\nconst loadAllFlows = (flowFiles, processEnv, dotEnv) => {\n\treturn flowFiles.reduce((acc, filePath) => reduceLoadFlow(acc, filePath, processEnv, dotEnv), Promise.resolve(ok([])));\n};\n/**\n* ディレクトリから全てのフローファイルを読み込む\n*\n* @param dirPath - フローファイルが配置されたディレクトリのパス\n* @param options - オプション\n* @returns 成功時: Flowオブジェクトの配列、失敗時: ParseError\n*\n* @remarks\n* - `*.enbu.yaml` パターンにマッチするファイルのみ対象\n* - サブディレクトリは検索しない(シャロー検索)\n* - ファイル名順にソート\n* - 最初のエラーで処理を停止\n*\n* @example\n* const result = await loadFlows('./.abflow', {\n* processEnv: process.env,\n* dotEnvPath: './.env'\n* });\n*\n* result.match(\n* (flows) => {\n* flows.forEach((flow) => {\n* console.log(`Loaded flow: ${flow.name}`);\n* });\n* },\n* (error) => console.error(error)\n* );\n*/\nconst loadFlows = async (dirPath, options) => {\n\tconst processEnv = options?.processEnv ?? process.env;\n\tconst dotEnvResult = await loadDotEnv(options?.dotEnvPath ?? \".env\");\n\tconst findResult = await findFlowFiles(dirPath);\n\treturn dotEnvResult.match((dotEnv) => findResult.match((files) => loadAllFlows(files, processEnv, dotEnv), (error) => Promise.resolve(err(error))), (error) => Promise.resolve(err(error)));\n};\n\n//#endregion\n//#region src/executor/auto-wait.ts\n/**\n* 自動待機ロジック\n*\n* このモジュールはブラウザ内の要素が利用可能になるまで自動的に待機する機能を提供する。\n* click、type、fillなどのインタラクティブなコマンドの実行前に自動的に呼び出され、\n* 要素が見つかるまでポーリングを行う。\n*/\nconst DEBUG$1 = process.env.DEBUG_FLOW === \"1\";\nconst debugLog$1 = (msg, ...args) => {\n\tif (DEBUG$1) process.stderr.write(`[auto-wait] ${msg} ${args.map(String).join(\" \")}\\n`);\n};\n/**\n* 要素の出現を待機する\n*\n* セレクタに一致する要素がブラウザ内に出現するまで、指定された間隔でポーリングを行う。\n* タイムアウト時間内に要素が見つからない場合はエラーを返す。\n*\n* セレクタがundefinedの場合は待機をスキップする(待機不要なコマンドの場合)。\n*\n* @param selector - 待機する要素のセレクタ(@e1形式の参照ID、またはテキスト/ロール名)\n* @param context - 実行コンテキスト(タイムアウト時間、ポーリング間隔などを含む)\n* @returns 成功時: 解決されたrefを含む結果、失敗時: AgentBrowserError\n*/\nconst autoWait = async (selector, context) => {\n\tdebugLog$1(`autoWait start: selector=${selector}`);\n\tif (!selector) {\n\t\tdebugLog$1(\"no selector, skipping\");\n\t\treturn ok(void 0);\n\t}\n\tconst startTime = Date.now();\n\tconst { autoWaitTimeoutMs, autoWaitIntervalMs, executeOptions } = context;\n\tdebugLog$1(`timeout=${autoWaitTimeoutMs}ms, interval=${autoWaitIntervalMs}ms`);\n\tlet pollCount = 0;\n\twhile (true) {\n\t\tpollCount++;\n\t\tdebugLog$1(`poll #${pollCount}: calling snapshot...`);\n\t\tconst commandResult = await executeCommand(\"snapshot\", [\"--json\"], executeOptions);\n\t\tdebugLog$1(`poll #${pollCount}: snapshot done, isOk=${commandResult.isOk()}`);\n\t\tconst snapshotResult = commandResult.andThen(parseJsonOutput).andThen(parseSnapshotRefs);\n\t\tif (snapshotResult.isErr()) {\n\t\t\tdebugLog$1(`poll #${pollCount}: parse error`, snapshotResult.error);\n\t\t\treturn err(snapshotResult.error);\n\t\t}\n\t\tconst refs = snapshotResult.value;\n\t\tdebugLog$1(`poll #${pollCount}: refs count=${Object.keys(refs).length}`);\n\t\tconst foundRefId = findMatchingRefId(selector, refs);\n\t\tif (foundRefId) {\n\t\t\tconst resolvedRef = `@${foundRefId}`;\n\t\t\tdebugLog$1(`poll #${pollCount}: element found! refId=${foundRefId}, resolvedRef=${resolvedRef}`);\n\t\t\treturn ok({ resolvedRef });\n\t\t}\n\t\tconst elapsed = Date.now() - startTime;\n\t\tdebugLog$1(`poll #${pollCount}: not found, elapsed=${elapsed}ms`);\n\t\tif (elapsed >= autoWaitTimeoutMs) {\n\t\t\tdebugLog$1(`poll #${pollCount}: TIMEOUT`);\n\t\t\treturn err({\n\t\t\t\ttype: \"timeout\",\n\t\t\t\tcommand: \"auto-wait\",\n\t\t\t\targs: [selector],\n\t\t\t\ttimeoutMs: autoWaitTimeoutMs\n\t\t\t});\n\t\t}\n\t\tdebugLog$1(`poll #${pollCount}: sleeping ${autoWaitIntervalMs}ms...`);\n\t\tawait sleep(autoWaitIntervalMs);\n\t}\n};\n/**\n* セレクタに一致する要素のrefIdを検索する\n*\n* 以下の2つの形式のセレクタをサポート:\n* 1. @e1のような参照ID形式: refsマップ内にキーとして存在するかチェック\n* 2. テキストまたはロール: refs内の要素のnameまたはroleとマッチするかチェック\n*\n* @param selector - 検索する要素のセレクタ\n* @param refs - snapshotコマンドから取得した要素参照のマップ\n* @returns マッチした要素のrefId(例: \"e1\")、見つからない場合はundefined\n*/\nconst findMatchingRefId = (selector, refs) => {\n\tif (selector.startsWith(\"@\")) {\n\t\tconst refId = selector.slice(1);\n\t\treturn refId in refs ? refId : void 0;\n\t}\n\tfor (const [refId, ref] of Object.entries(refs)) if (ref.name.includes(selector) || ref.role === selector || ref.name === selector) return refId;\n};\n/**\n* 指定ミリ秒待機\n*\n* ポーリング間隔を制御するための非同期待機関数。\n* Promiseベースのタイマーを使用し、指定されたミリ秒数だけ処理を一時停止する。\n*\n* @param ms - 待機するミリ秒数\n* @returns 待機が完了したら解決されるPromise\n*/\nconst sleep = (ms) => {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n};\n\n//#endregion\n//#region src/executor/commands/navigation.ts\n/**\n* open コマンドのハンドラ\n*\n* 指定されたURLをブラウザで開く。\n* agent-browser の open コマンドを実行し、その結果をパースして返す。\n*\n* @param command - open コマンドのパラメータ\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleOpen = async (command, context) => {\n\tconst startTime = Date.now();\n\treturn (await executeCommand(\"open\", [command.url, \"--json\"], context.executeOptions)).andThen(parseJsonOutput).map((output) => {\n\t\tconst duration = Date.now() - startTime;\n\t\treturn {\n\t\t\tstdout: JSON.stringify(output),\n\t\t\tduration\n\t\t};\n\t});\n};\n\n//#endregion\n//#region src/executor/commands/interaction.ts\n/**\n* セレクタを解決する\n* autoWaitで解決されたresolvedRefがあればそれを使用、なければ元のセレクタを使用\n*/\nconst resolveSelector$2 = (originalSelector, context) => {\n\treturn context.resolvedRef ?? originalSelector;\n};\n/**\n* click コマンドのハンドラ\n*\n* 指定されたセレクタの要素をクリックする。\n*\n* @param command - click コマンドのパラメータ\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleClick = async (command, context) => {\n\tconst startTime = Date.now();\n\treturn (await executeCommand(\"click\", [resolveSelector$2(command.selector, context), \"--json\"], context.executeOptions)).andThen(parseJsonOutput).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n};\n/**\n* type コマンドのハンドラ\n*\n* 指定されたセレクタの要素にテキストを入力する。\n*\n* @param command - type コマンドのパラメータ\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleType = async (command, context) => {\n\tconst startTime = Date.now();\n\treturn (await executeCommand(\"type\", [\n\t\tresolveSelector$2(command.selector, context),\n\t\tcommand.value,\n\t\t\"--json\"\n\t], context.executeOptions)).andThen(parseJsonOutput).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n};\n/**\n* fill コマンドのハンドラ\n*\n* 指定されたセレクタのフォーム要素にテキストを入力する。\n* 既存のテキストは自動的にクリアされる。\n*\n* @param command - fill コマンドのパラメータ\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleFill = async (command, context) => {\n\tconst startTime = Date.now();\n\treturn (await executeCommand(\"fill\", [\n\t\tresolveSelector$2(command.selector, context),\n\t\tcommand.value,\n\t\t\"--json\"\n\t], context.executeOptions)).andThen(parseJsonOutput).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n};\n/**\n* press コマンドのハンドラ\n*\n* 指定されたキーボードキーを押す。\n* agent-browser の press コマンドを実行する。\n*\n* @param command - press コマンドのパラメータ\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handlePress = async (command, context) => {\n\tconst startTime = Date.now();\n\treturn (await executeCommand(\"press\", [command.key, \"--json\"], context.executeOptions)).andThen(parseJsonOutput).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n};\n\n//#endregion\n//#region src/executor/commands/hover-select.ts\n/**\n* セレクタを解決する\n* autoWaitで解決されたresolvedRefがあればそれを使用、なければ元のセレクタを使用\n*/\nconst resolveSelector$1 = (originalSelector, context) => {\n\treturn context.resolvedRef ?? originalSelector;\n};\n/**\n* hover コマンドのハンドラ\n*\n* 指定されたセレクタの要素にマウスホバーする。\n* agent-browser の hover コマンドを実行する。\n*\n* @param command - hover コマンドのパラメータ\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleHover = async (command, context) => {\n\tconst startTime = Date.now();\n\treturn (await executeCommand(\"hover\", [resolveSelector$1(command.selector, context), \"--json\"], context.executeOptions)).andThen(parseJsonOutput).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n};\n/**\n* select コマンドのハンドラ\n*\n* 指定されたセレクタのセレクトボックスから値を選択する。\n* agent-browser の select コマンドを実行する。\n*\n* @param command - select コマンドのパラメータ\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleSelect = async (command, context) => {\n\tconst startTime = Date.now();\n\treturn (await executeCommand(\"select\", [\n\t\tresolveSelector$1(command.selector, context),\n\t\tcommand.value,\n\t\t\"--json\"\n\t], context.executeOptions)).andThen(parseJsonOutput).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n};\n\n//#endregion\n//#region src/executor/commands/selector-utils.ts\n/**\n* CSSセレクタまたは@ref形式、text=形式のプレフィックス\n* これらで始まるセレクタはそのまま使用し、text=を付けない\n*/\nconst CSS_SELECTOR_PREFIXES = [\n\t\"@\",\n\t\"#\",\n\t\".\",\n\t\"[\",\n\t\"text=\"\n];\n/**\n* セレクタがCSSセレクタまたは@ref形式かどうかを判定する\n*\n* 以下の形式のみCSSセレクタ/@ref形式として扱う:\n* - #で始まる(ID)\n* - .で始まる(クラス)\n* - [で始まる(属性)\n* - @で始まる(ref形式)\n* - text=で始まる(既にテキストセレクタ形式)\n*\n* 注意: HTMLタグ名(div, span等)はテキストセレクタとして扱う。\n* これは意図的な設計で、純粋なテキスト(例: \"Welcome\")が\n* タグ名と誤認識されることを防ぐため。\n* タグ名でセレクトしたい場合は、ユーザーが明示的にCSSセレクタ形式を使用する必要がある。\n*/\nconst isCssOrRefSelector = (selector) => {\n\treturn CSS_SELECTOR_PREFIXES.some((prefix) => selector.startsWith(prefix));\n};\n/**\n* テキストセレクタを解決する\n*\n* CSSセレクタや@ref形式以外のテキストは、Playwrightのtext=形式に変換する。\n* これにより、静的テキスト要素も検索できるようになる。\n*\n* Playwrightのテキストセレクタ:\n* - text=Hello World → 部分一致(\"Hello\"を含む要素すべて)\n* - text=\"Hello World\" → 完全一致(exactly \"Hello World\")\n*\n* strict mode violationを避けるため、完全一致(ダブルクォート付き)を使用する。\n*/\nconst resolveTextSelector = (selector) => {\n\tif (isCssOrRefSelector(selector)) return selector;\n\treturn `text=\"${selector}\"`;\n};\n\n//#endregion\n//#region src/executor/commands/scroll.ts\n/**\n* scroll コマンドのハンドラ\n*\n* ページを指定された方向と量でスクロールする。\n* agent-browser の scroll コマンドを実行する。\n*\n* @param command - scroll コマンドのパラメータ\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleScroll = async (command, context) => {\n\tconst startTime = Date.now();\n\treturn (await executeCommand(\"scroll\", [\n\t\tcommand.direction,\n\t\tcommand.amount.toString(),\n\t\t\"--json\"\n\t], context.executeOptions)).andThen(parseJsonOutput).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n};\n/**\n* セレクタが@ref形式かどうかを判定する\n*\n* @param selector - 判定するセレクタ\n* @returns @ref形式の場合はtrue\n*/\nconst isRefSelector = (selector) => {\n\treturn /^@e\\d+$/.test(selector);\n};\n/**\n* scrollIntoView コマンドのハンドラ\n*\n* 指定されたセレクタの要素がビューポートに表示されるようにスクロールする。\n*\n* 注意: agent-browser 0.5.0 の scrollintoview コマンドには @ref 形式を\n* サポートしないバグがある(browser.getLocator() を使用していない)。\n* そのため、@ref 形式の場合は focus コマンドを使用してスクロールを実現する。\n* focus コマンドは Playwright の focus() を使用し、要素をビューポートに\n* 表示するためにスクロールする動作を持つ。\n*\n* テキストセレクタは自動的に text=\"...\" 形式に変換される。\n*\n* @param command - scrollIntoView コマンドのパラメータ\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleScrollIntoView = async (command, context) => {\n\tconst startTime = Date.now();\n\tconst selector = context.resolvedRef ?? resolveTextSelector(command.selector);\n\treturn (await executeCommand(isRefSelector(selector) ? \"focus\" : \"scrollintoview\", [selector, \"--json\"], context.executeOptions)).andThen(parseJsonOutput).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n};\n\n//#endregion\n//#region src/executor/commands/wait.ts\n/**\n* wait コマンドのハンドラ\n*\n* agent-browserのwaitコマンドと1:1対応:\n* - ms: 指定ミリ秒待機 (wait <ms>)\n* - selector: CSSセレクタで要素出現を待つ (wait <selector>)\n* - text: テキスト出現を待つ (wait --text <text>)\n* - load: ロード状態を待つ (wait --load <state>)\n* - url: URL変化を待つ (wait --url <pattern>)\n* - fn: JS式がtruthyになるのを待つ (wait --fn <expression>)\n*\n* @param command - wait コマンドのパラメータ\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleWait = async (command, context) => {\n\tconst startTime = Date.now();\n\tif (\"ms\" in command) return (await executeCommand(\"wait\", [command.ms.toString(), \"--json\"], context.executeOptions)).andThen(parseJsonOutput).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n\tif (\"selector\" in command) return (await executeCommand(\"wait\", [command.selector, \"--json\"], context.executeOptions)).andThen(parseJsonOutput).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n\tif (\"text\" in command) return (await executeCommand(\"wait\", [\n\t\t\"--text\",\n\t\tcommand.text,\n\t\t\"--json\"\n\t], context.executeOptions)).andThen(parseJsonOutput).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n\tif (\"load\" in command) return (await executeCommand(\"wait\", [\n\t\t\"--load\",\n\t\tcommand.load,\n\t\t\"--json\"\n\t], context.executeOptions)).andThen(parseJsonOutput).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n\tif (\"url\" in command) return (await executeCommand(\"wait\", [\n\t\t\"--url\",\n\t\tcommand.url,\n\t\t\"--json\"\n\t], context.executeOptions)).andThen(parseJsonOutput).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n\treturn (await executeCommand(\"wait\", [\n\t\t\"--fn\",\n\t\tcommand.fn,\n\t\t\"--json\"\n\t], context.executeOptions)).andThen(parseJsonOutput).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n};\n\n//#endregion\n//#region src/executor/commands/capture.ts\n/**\n* screenshot コマンドのハンドラ\n*\n* ページのスクリーンショットを撮影し、指定されたパスに保存する。\n* fullPageオプションがtrueの場合、ページ全体のスクリーンショットを撮影する。\n*\n* @param command - screenshot コマンドのパラメータ\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleScreenshot = async (command, context) => {\n\tconst startTime = Date.now();\n\tconst args = [command.path];\n\tif (command.fullPage) args.push(\"--full\");\n\targs.push(\"--json\");\n\treturn (await executeCommand(\"screenshot\", args, context.executeOptions)).andThen(parseJsonOutput).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n};\n/**\n* snapshot コマンドのハンドラ\n*\n* ページの構造をスナップショットとして取得する。\n* agent-browser の snapshot コマンドを実行し、ページの要素構造を返す。\n*\n* @param command - snapshot コマンドのパラメータ\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleSnapshot = async (command, context) => {\n\tconst startTime = Date.now();\n\treturn (await executeCommand(\"snapshot\", [\"--json\"], context.executeOptions)).andThen(parseJsonOutput).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n};\n\n//#endregion\n//#region src/executor/commands/eval.ts\n/**\n* eval コマンドのハンドラ\n*\n* ブラウザコンテキストでJavaScriptを実行し、その結果を返す。\n* agent-browser の eval コマンドを実行する。\n*\n* @param command - eval コマンドのパラメータ\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleEval = async (command, context) => {\n\tconst startTime = Date.now();\n\treturn (await executeCommand(\"eval\", [command.script, \"--json\"], context.executeOptions)).andThen(parseJsonOutput).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n};\n\n//#endregion\n//#region src/executor/commands/assertions.ts\n/**\n* セレクタを解決する\n* autoWaitで解決されたresolvedRefがあればそれを使用、なければ元のセレクタを使用\n*/\nconst resolveSelector = (originalSelector, context) => {\n\treturn context.resolvedRef ?? originalSelector;\n};\n/**\n* assertVisible/assertNotVisible用のセレクタを解決する\n*\n* autoWaitで解決されたresolvedRefがあればそれを使用、\n* なければテキストセレクタ変換を適用する。\n*/\nconst resolveVisibilitySelector = (originalSelector, context) => {\n\tif (context.resolvedRef) return context.resolvedRef;\n\treturn resolveTextSelector(originalSelector);\n};\n/**\n* 要素の出現を待機する\n*\n* CSSセレクタ/@ref/text=形式の場合: wait <selector>\n* テキストの場合: wait --text <text>\n*\n* @param originalSelector - 元のセレクタ\n* @param context - 実行コンテキスト\n* @returns 成功時はok(undefined)、失敗時はerr(AgentBrowserError)\n*/\nconst waitForElement = async (originalSelector, context) => {\n\tif (isCssOrRefSelector(originalSelector)) return (await executeCommand(\"wait\", [originalSelector, \"--json\"], context.executeOptions)).map(() => void 0);\n\treturn (await executeCommand(\"wait\", [\n\t\t\"--text\",\n\t\toriginalSelector,\n\t\t\"--json\"\n\t], context.executeOptions)).map(() => void 0);\n};\n/**\n* ページの安定状態(networkidle)を待機する\n*\n* @param context - 実行コンテキスト\n* @returns 成功時はok(undefined)、失敗時はerr(AgentBrowserError)\n*/\nconst waitForPageStable = async (context) => {\n\treturn (await executeCommand(\"wait\", [\n\t\t\"--load\",\n\t\t\"networkidle\",\n\t\t\"--json\"\n\t], context.executeOptions)).map(() => void 0);\n};\n/**\n* assertVisible コマンドのハンドラ\n*\n* 指定されたセレクタの要素が表示されていることを確認する。\n*\n* 処理の流れ:\n* 1. agent-browserのwaitコマンドで要素の出現を待機\n* - CSSセレクタ: wait <selector>\n* - テキスト: wait --text <text>\n* 2. agent-browserのis visibleコマンドで表示状態を確認\n*\n* 要素が表示されていない場合は assertion_failed エラーを返す。\n*\n* @param command - assertVisible コマンドのパラメータ\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleAssertVisible = async (command, context) => {\n\tconst startTime = Date.now();\n\tif (!context.resolvedRef) {\n\t\tif ((await waitForElement(command.selector, context)).isErr()) return err({\n\t\t\ttype: \"timeout\",\n\t\t\tcommand: \"wait\",\n\t\t\targs: [command.selector],\n\t\t\ttimeoutMs: context.autoWaitTimeoutMs\n\t\t});\n\t}\n\treturn (await executeCommand(\"is\", [\n\t\t\"visible\",\n\t\tresolveVisibilitySelector(command.selector, context),\n\t\t\"--json\"\n\t], context.executeOptions)).andThen(parseJsonOutput).andThen((output) => {\n\t\tconst duration = Date.now() - startTime;\n\t\tif (!output.success) return err({\n\t\t\ttype: \"command_failed\",\n\t\t\tmessage: output.error || \"Failed to check visibility\",\n\t\t\tcommand: \"is\",\n\t\t\targs: [\"visible\", command.selector],\n\t\t\texitCode: 1,\n\t\t\tstderr: \"\",\n\t\t\terrorMessage: output.error\n\t\t});\n\t\tconst data = output.data;\n\t\tconst hasVisibleField = (d) => d !== null && typeof d === \"object\" && \"visible\" in d;\n\t\tconst isVisibleData = (d) => hasVisibleField(d) && typeof d.visible === \"boolean\";\n\t\tconst visibleData = isVisibleData(data) ? data : null;\n\t\tif (!visibleData) return err({\n\t\t\ttype: \"command_failed\",\n\t\t\tmessage: \"Invalid response data: missing or invalid visible field\",\n\t\t\tcommand: \"is\",\n\t\t\targs: [\"visible\", command.selector],\n\t\t\texitCode: 1,\n\t\t\tstderr: \"\",\n\t\t\terrorMessage: null\n\t\t});\n\t\tif (!visibleData.visible) return err({\n\t\t\ttype: \"assertion_failed\",\n\t\t\tmessage: `Element \"${command.selector}\" is not visible`,\n\t\t\tcommand: \"is\",\n\t\t\targs: [\"visible\", command.selector],\n\t\t\texitCode: 1,\n\t\t\tstderr: \"\",\n\t\t\terrorMessage: null\n\t\t});\n\t\treturn ok({\n\t\t\tstdout: JSON.stringify(output),\n\t\t\tduration\n\t\t});\n\t});\n};\n/**\n* assertNotVisible コマンドのハンドラ\n*\n* 指定されたセレクタの要素が表示されていないことを確認する。\n*\n* 処理の流れ:\n* 1. agent-browserのwaitコマンドでページの安定状態(networkidle)を待機\n* - ページ遷移直後など、DOMが構築される前に判定しないようにする\n* 2. agent-browserのis visibleコマンドで表示状態を確認\n*\n* 要素が表示されている場合は assertion_failed エラーを返す。\n*\n* @param command - assertNotVisible コマンドのパラメータ\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleAssertNotVisible = async (command, context) => {\n\tconst startTime = Date.now();\n\tif ((await waitForPageStable(context)).isErr()) return err({\n\t\ttype: \"timeout\",\n\t\tcommand: \"wait\",\n\t\targs: [\"--load\", \"networkidle\"],\n\t\ttimeoutMs: context.autoWaitTimeoutMs\n\t});\n\treturn (await executeCommand(\"is\", [\n\t\t\"visible\",\n\t\tresolveVisibilitySelector(command.selector, context),\n\t\t\"--json\"\n\t], context.executeOptions)).andThen(parseJsonOutput).andThen((output) => {\n\t\tconst duration = Date.now() - startTime;\n\t\tif (!output.success) return err({\n\t\t\ttype: \"command_failed\",\n\t\t\tmessage: output.error || \"Failed to check visibility\",\n\t\t\tcommand: \"is\",\n\t\t\targs: [\"visible\", command.selector],\n\t\t\texitCode: 1,\n\t\t\tstderr: \"\",\n\t\t\terrorMessage: output.error\n\t\t});\n\t\tconst data = output.data;\n\t\tconst hasVisibleField = (d) => d !== null && typeof d === \"object\" && \"visible\" in d;\n\t\tconst isVisibleData = (d) => hasVisibleField(d) && typeof d.visible === \"boolean\";\n\t\tconst visibleData = isVisibleData(data) ? data : null;\n\t\tif (!visibleData) return err({\n\t\t\ttype: \"command_failed\",\n\t\t\tmessage: \"Invalid response data: missing or invalid visible field\",\n\t\t\tcommand: \"is\",\n\t\t\targs: [\"visible\", command.selector],\n\t\t\texitCode: 1,\n\t\t\tstderr: \"\",\n\t\t\terrorMessage: null\n\t\t});\n\t\tif (visibleData.visible) return err({\n\t\t\ttype: \"assertion_failed\",\n\t\t\tmessage: `Element \"${command.selector}\" is visible`,\n\t\t\tcommand: \"is\",\n\t\t\targs: [\"visible\", command.selector],\n\t\t\texitCode: 1,\n\t\t\tstderr: \"\",\n\t\t\terrorMessage: null\n\t\t});\n\t\treturn ok({\n\t\t\tstdout: JSON.stringify(output),\n\t\t\tduration\n\t\t});\n\t});\n};\n/**\n* assertEnabled コマンドのハンドラ\n*\n* 指定されたセレクタの要素が有効化されていることを確認する。\n* agent-browser の is enabled コマンドを実行し、その結果を検証する。\n* 要素が有効化されていない場合は assertion_failed エラーを返す。\n*\n* @param command - assertEnabled コマンドのパラメータ\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleAssertEnabled = async (command, context) => {\n\tconst startTime = Date.now();\n\treturn (await executeCommand(\"is\", [\n\t\t\"enabled\",\n\t\tresolveSelector(command.selector, context),\n\t\t\"--json\"\n\t], context.executeOptions)).andThen(parseJsonOutput).andThen((output) => {\n\t\tconst duration = Date.now() - startTime;\n\t\tif (!output.success) return err({\n\t\t\ttype: \"command_failed\",\n\t\t\tmessage: output.error || \"Failed to check enabled state\",\n\t\t\tcommand: \"is\",\n\t\t\targs: [\"enabled\", command.selector],\n\t\t\texitCode: 1,\n\t\t\tstderr: \"\",\n\t\t\terrorMessage: output.error\n\t\t});\n\t\tconst data = output.data;\n\t\tconst hasEnabledField = (d) => d !== null && typeof d === \"object\" && \"enabled\" in d;\n\t\tconst isEnabledData = (d) => hasEnabledField(d) && typeof d.enabled === \"boolean\";\n\t\tconst enabledData = isEnabledData(data) ? data : null;\n\t\tif (!enabledData) return err({\n\t\t\ttype: \"command_failed\",\n\t\t\tmessage: \"Invalid response data: missing or invalid enabled field\",\n\t\t\tcommand: \"is\",\n\t\t\targs: [\"enabled\", command.selector],\n\t\t\texitCode: 1,\n\t\t\tstderr: \"\",\n\t\t\terrorMessage: null\n\t\t});\n\t\tif (!enabledData.enabled) return err({\n\t\t\ttype: \"assertion_failed\",\n\t\t\tmessage: `Element \"${command.selector}\" is not enabled`,\n\t\t\tcommand: \"is\",\n\t\t\targs: [\"enabled\", command.selector],\n\t\t\texitCode: 1,\n\t\t\tstderr: \"\",\n\t\t\terrorMessage: null\n\t\t});\n\t\treturn ok({\n\t\t\tstdout: JSON.stringify(output),\n\t\t\tduration\n\t\t});\n\t});\n};\n/**\n* assertChecked コマンドのハンドラ\n*\n* 指定されたセレクタのチェックボックスがチェックされているか、または指定された状態であることを確認する。\n* agent-browser の is checked コマンドを実行し、その結果を検証する。\n* 期待値と実際の状態が一致しない場合は assertion_failed エラーを返す。\n*\n* @param command - assertChecked コマンドのパラメータ\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleAssertChecked = async (command, context) => {\n\tconst startTime = Date.now();\n\treturn (await executeCommand(\"is\", [\n\t\t\"checked\",\n\t\tresolveSelector(command.selector, context),\n\t\t\"--json\"\n\t], context.executeOptions)).andThen(parseJsonOutput).andThen((output) => {\n\t\tconst duration = Date.now() - startTime;\n\t\tif (!output.success) return err({\n\t\t\ttype: \"command_failed\",\n\t\t\tmessage: output.error || \"Failed to check checked state\",\n\t\t\tcommand: \"is\",\n\t\t\targs: [\"checked\", command.selector],\n\t\t\texitCode: 1,\n\t\t\tstderr: \"\",\n\t\t\terrorMessage: output.error\n\t\t});\n\t\tconst data = output.data;\n\t\tconst hasCheckedField = (d) => d !== null && typeof d === \"object\" && \"checked\" in d;\n\t\tconst isCheckedData = (d) => hasCheckedField(d) && typeof d.checked === \"boolean\";\n\t\tconst checkedData = isCheckedData(data) ? data : null;\n\t\tif (!checkedData) return err({\n\t\t\ttype: \"command_failed\",\n\t\t\tmessage: \"Invalid response data: missing or invalid checked field\",\n\t\t\tcommand: \"is\",\n\t\t\targs: [\"checked\", command.selector],\n\t\t\texitCode: 1,\n\t\t\tstderr: \"\",\n\t\t\terrorMessage: null\n\t\t});\n\t\tconst expectedChecked = command.checked ?? true;\n\t\tconst actualChecked = checkedData.checked;\n\t\tif (actualChecked !== expectedChecked) return err({\n\t\t\ttype: \"assertion_failed\",\n\t\t\tmessage: `Element \"${command.selector}\" checked state is ${actualChecked}, expected ${expectedChecked}`,\n\t\t\tcommand: \"is\",\n\t\t\targs: [\"checked\", command.selector],\n\t\t\texitCode: 1,\n\t\t\tstderr: \"\",\n\t\t\terrorMessage: null\n\t\t});\n\t\treturn ok({\n\t\t\tstdout: JSON.stringify(output),\n\t\t\tduration\n\t\t});\n\t});\n};\n\n//#endregion\n//#region src/executor/commands/handler-registry.ts\n/**\n* コマンド名に対応するハンドラを取得する\n*\n* コマンド名からそれに対応するハンドラ関数を取得する。\n* 未実装のコマンドが指定された場合はエラーをthrowする。\n*\n* @param commandName - コマンド名\n* @returns コマンドハンドラ関数\n* @throws {Error} 未実装のコマンドが指定された場合\n*/\n/**\n* ナビゲーション・入力系コマンドのルーター\n*/\nconst routeNavigationInputCommand = (command, context) => {\n\tswitch (command.command) {\n\t\tcase \"open\": return handleOpen(command, context);\n\t\tcase \"click\": return handleClick(command, context);\n\t\tcase \"type\": return handleType(command, context);\n\t\tcase \"fill\": return handleFill(command, context);\n\t\tdefault: return null;\n\t}\n};\n/**\n* インタラクション系コマンドのルーター\n*/\nconst routeInteractionCommand = (command, context) => {\n\tswitch (command.command) {\n\t\tcase \"press\": return handlePress(command, context);\n\t\tcase \"hover\": return handleHover(command, context);\n\t\tcase \"select\": return handleSelect(command, context);\n\t\tdefault: return null;\n\t}\n};\n/**\n* スクロール・待機系コマンドのルーター\n*/\nconst routeScrollWaitCommand = (command, context) => {\n\tswitch (command.command) {\n\t\tcase \"scroll\": return handleScroll(command, context);\n\t\tcase \"scrollIntoView\": return handleScrollIntoView(command, context);\n\t\tcase \"wait\": return handleWait(command, context);\n\t\tdefault: return null;\n\t}\n};\n/**\n* assertion系コマンドのルーター\n*/\nconst routeAssertionCommand = (command, context) => {\n\tswitch (command.command) {\n\t\tcase \"assertVisible\": return handleAssertVisible(command, context);\n\t\tcase \"assertNotVisible\": return handleAssertNotVisible(command, context);\n\t\tcase \"assertEnabled\": return handleAssertEnabled(command, context);\n\t\tcase \"assertChecked\": return handleAssertChecked(command, context);\n\t\tdefault: return null;\n\t}\n};\n/**\n* キャプチャ・eval系コマンドのルーター\n*/\nconst routeUtilityCommand = (command, context) => {\n\tswitch (command.command) {\n\t\tcase \"screenshot\": return handleScreenshot(command, context);\n\t\tcase \"snapshot\": return handleSnapshot(command, context);\n\t\tcase \"eval\": return handleEval(command, context);\n\t\tdefault: return null;\n\t}\n};\n/**\n* コマンドを実行するルーター関数\n*\n* command.commandフィールドで型を絞り込み、対応するハンドラを呼び出す。\n*/\nconst routeCommand = (command, context) => {\n\treturn routeNavigationInputCommand(command, context) ?? routeInteractionCommand(command, context) ?? routeScrollWaitCommand(command, context) ?? routeUtilityCommand(command, context) ?? routeAssertionCommand(command, context);\n};\nconst getCommandHandler = (_commandName) => {\n\treturn routeCommand;\n};\n\n//#endregion\n//#region src/executor/error-screenshot.ts\n/**\n* エラー時のスクリーンショット撮影\n*\n* このモジュールはコマンド実行時のエラー発生時に自動的にスクリーンショットを撮影する機能を提供する。\n* スクリーンショットはOS依存の一時ディレクトリに保存され、タイムスタンプを含むファイル名で保存される。\n*/\n/**\n* エラー時のスクリーンショットを撮影する\n*\n* コマンド実行中にエラーが発生した際、現在のブラウザの状態をスクリーンショットとして撮影する。\n* スクリーンショットのパスは `{os.tmpdir()}/flow-error-{timestamp}.png` の形式で生成される。\n* Windows、macOS、Linuxなどの各OSで適切な一時ディレクトリが使用される。\n*\n* 撮影が失敗した場合は `undefined` を返す。これはエラーをネストさせないための設計。\n* エラー撮影の失敗は、元のエラーを隠蔽すべきではないため、ログに記録するのみとする。\n*\n* @param context - 実行コンテキスト(セッション名や実行オプションを含む)\n* @returns スクリーンショットのパス、撮影失敗時は undefined\n*/\nconst captureErrorScreenshot = async (context) => {\n\tconst timestamp = Date.now();\n\tconst screenshotPath = path.join(os.tmpdir(), `flow-error-${timestamp}.png`);\n\treturn (await executeCommand(\"screenshot\", [screenshotPath, \"--json\"], context.executeOptions)).match(() => screenshotPath, () => void 0);\n};\n\n//#endregion\n//#region src/executor/execute-step.ts\n/**\n* メッセージフィールドを持つエラーかどうかを判定する\n*\n* @param error - AgentBrowserError\n* @returns メッセージフィールドを持つ場合はtrue\n*/\nconst hasMessageField = (error) => {\n\treturn error.type === \"not_installed\" || error.type === \"command_failed\" || error.type === \"parse_error\" || error.type === \"assertion_failed\" || error.type === \"validation_error\";\n};\n/**\n* コマンド実行エラーのフォールバックメッセージを生成する\n*\n* @param error - コマンド実行エラー\n* @returns フォールバックメッセージ\n*/\nconst getCommandFailedFallback = (error) => {\n\treturn error.errorMessage || error.stderr || `Command failed: ${error.command}`;\n};\n/**\n* AgentBrowserErrorからメッセージを取得する\n*\n* エラーの種類によってメッセージの形式が異なるため、\n* 統一的なメッセージを生成する。\n* messageフィールドが空文字列の場合は、errorMessageまたはstderrから\n* フォールバックメッセージを生成する。\n*\n* @param error - AgentBrowserError\n* @returns エラーメッセージ\n*/\nconst getErrorMessage = (error) => {\n\tif (hasMessageField(error)) {\n\t\tif (error.message) return error.message;\n\t\tif (error.type === \"command_failed\" || error.type === \"assertion_failed\" || error.type === \"validation_error\") return getCommandFailedFallback(error);\n\t\treturn error.message;\n\t}\n\treturn `Timeout after ${error.timeoutMs}ms: ${error.command}`;\n};\n/**\n* 自動待機を処理する\n*\n* コマンドが自動待機を必要とする場合、要素が利用可能になるまで待機し、\n* 解決されたrefをコンテキストに設定する。\n*\n* @param command - 実行するコマンド\n* @param context - 実行コンテキスト\n* @param index - ステップのインデックス\n* @param startTime - 実行開始時刻\n* @param captureScreenshot - スクリーンショットを撮影するか\n* @returns 処理結果(成功時はコンテキスト、失敗時はStepResult)\n*/\nconst processAutoWait = async (command, context, index, startTime, captureScreenshot) => {\n\tif (!shouldAutoWait(command)) return {\n\t\tsuccess: true,\n\t\tcontextWithRef: context\n\t};\n\tconst waitResult = await autoWait(getSelectorFromCommand(command), context);\n\tif (waitResult.isErr()) {\n\t\tconst duration = Date.now() - startTime;\n\t\tconst screenshot = captureScreenshot ? await captureErrorScreenshot(context) : void 0;\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tfailedResult: {\n\t\t\t\tindex,\n\t\t\t\tcommand,\n\t\t\t\tstatus: \"failed\",\n\t\t\t\tduration,\n\t\t\t\terror: {\n\t\t\t\t\tmessage: `Auto-wait timeout: ${getErrorMessage(waitResult.error)}`,\n\t\t\t\t\ttype: waitResult.error.type,\n\t\t\t\t\tscreenshot\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\tconst autoWaitResult = waitResult.value;\n\treturn {\n\t\tsuccess: true,\n\t\tcontextWithRef: autoWaitResult ? {\n\t\t\t...context,\n\t\t\tresolvedRef: autoWaitResult.resolvedRef\n\t\t} : context\n\t};\n};\n/**\n* 単一のステップを実行する\n*\n* ステップの実行は以下の流れで行われる:\n* 1. 自動待機が必要なコマンドの場合は要素が利用可能になるまで待機\n* 2. コマンドハンドラを取得して実行\n* 3. 実行時間を計測\n* 4. エラー発生時はスクリーンショットを撮影(captureScreenshotフラグがtrueの場合のみ)\n*\n* @param command - 実行するコマンド\n* @param index - ステップのインデックス(0始まり)\n* @param context - 実行コンテキスト(セッション情報、タイムアウト設定など)\n* @param captureScreenshot - エラー時にスクリーンショットを撮影するかどうか\n* @returns ステップの実行結果(成功/失敗、実行時間、出力、エラー情報を含む)\n*/\nconst executeStep = async (command, index, context, captureScreenshot) => {\n\tconst startTime = Date.now();\n\ttry {\n\t\tconst autoWaitProcessResult = await processAutoWait(command, context, index, startTime, captureScreenshot);\n\t\tif (!autoWaitProcessResult.success) return autoWaitProcessResult.failedResult;\n\t\tconst result = await getCommandHandler(command.command)(command, autoWaitProcessResult.contextWithRef);\n\t\tconst duration = Date.now() - startTime;\n\t\treturn result.match((commandResult) => ({\n\t\t\tindex,\n\t\t\tcommand,\n\t\t\tstatus: \"passed\",\n\t\t\tduration,\n\t\t\tstdout: commandResult.stdout\n\t\t}), async (error) => {\n\t\t\tconst screenshot = captureScreenshot ? await captureErrorScreenshot(context) : void 0;\n\t\t\treturn {\n\t\t\t\tindex,\n\t\t\t\tcommand,\n\t\t\t\tstatus: \"failed\",\n\t\t\t\tduration,\n\t\t\t\terror: {\n\t\t\t\t\tmessage: getErrorMessage(error),\n\t\t\t\t\ttype: error.type,\n\t\t\t\t\tscreenshot\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t} catch (error) {\n\t\tconst duration = Date.now() - startTime;\n\t\tconst screenshot = captureScreenshot ? await captureErrorScreenshot(context) : void 0;\n\t\treturn {\n\t\t\tindex,\n\t\t\tcommand,\n\t\t\tstatus: \"failed\",\n\t\t\tduration,\n\t\t\terror: {\n\t\t\t\tmessage: error instanceof Error ? error.message : \"Unknown error\",\n\t\t\t\ttype: \"validation_error\",\n\t\t\t\tscreenshot\n\t\t\t}\n\t\t};\n\t}\n};\n/**\n* 自動待機が必要なコマンドかどうかを判定する\n*\n* インタラクティブなコマンド(クリック、入力など)は、\n* 要素が利用可能になるまで自動的に待機する必要がある。\n*\n* 注意: 以下のコマンドはautoWait対象外\n* - assertVisible: 静的テキスト要素の確認にも使用されるが、静的テキストは\n* snapshotのrefsに含まれないため、autoWaitでは見つけられない。\n* ハンドラ内でPlaywrightのtext=形式に変換して処理する。\n* - assertNotVisible: 要素が存在しないか非表示であることを確認するため、\n* autoWaitで要素の存在を確認してから実行すると論理的に矛盾する。\n* agent-browserのis visibleコマンドは独自のタイムアウトを持っている。\n* - scrollIntoView: 画面外の要素にスクロールするコマンドのため、\n* auto-wait(画面内要素のみをスナップショット)は不適切\n*\n* @param command - 判定するコマンド\n* @returns 自動待機が必要な場合はtrue、不要な場合はfalse\n*/\nconst shouldAutoWait = (command) => {\n\treturn [\n\t\t\"click\",\n\t\t\"type\",\n\t\t\"fill\",\n\t\t\"hover\",\n\t\t\"select\",\n\t\t\"assertEnabled\",\n\t\t\"assertChecked\"\n\t].includes(command.command);\n};\n/**\n* コマンドからセレクタを取得する\n*\n* コマンドの種類によって、セレクタが格納されているフィールド名が異なる:\n* - 多くのコマンドは 'selector' フィールドを持つ\n* - 一部のコマンドは 'target' フィールドを持つ\n*\n* @param command - セレクタを取得するコマンド\n* @returns セレクタ文字列、セレクタを持たないコマンドの場合はundefined\n*/\nconst getSelectorFromCommand = (command) => {\n\tif (\"selector\" in command) return command.selector;\n\tif (\"target\" in command && typeof command.target === \"string\") return command.target;\n};\n\n//#endregion\n//#region src/executor/env-expander.ts\n/**\n* 環境変数展開モジュール\n*\n* フロー内の文字列に含まれる ${VAR_NAME} 形式の環境変数を展開する。\n* 存在しない変数が見つかった場合はエラーを返す(fail fast原則に基づく)。\n*/\n/**\n* フロー内の環境変数を展開する\n*\n* フローの全てのステップを走査し、コマンド内の文字列フィールドに含まれる\n* ${VAR_NAME} 形式の環境変数を展開する。\n* 未定義の環境変数が見つかった場合は、エラーを返す。\n*\n* @param flow - 環境変数を含む可能性のあるフロー定義\n* @param env - 環境変数の辞書(キー=変数名、値=変数値)\n* @returns 環境変数が展開されたフロー定義、または未定義変数エラー\n*\n* @example\n* ```typescript\n* const flow: Flow = {\n* name: 'test',\n* env: {},\n* steps: [\n* { command: 'open', url: '${BASE_URL}/login' },\n* { command: 'fill', selector: 'メールアドレス', value: '${EMAIL}' }\n* ]\n* };\n* const env = { BASE_URL: 'https://example.com', EMAIL: 'user@example.com' };\n* const result = expandEnvVars(flow, env);\n* // result.isOk() の場合:\n* // result.value.steps[0].url は 'https://example.com/login'\n* // result.value.steps[1].value は 'user@example.com'\n* // result.isErr() の場合:\n* // result.error.type は 'validation_error'\n* // result.error.message は '環境変数 ${UNDEFINED} が定義されていません'\n* ```\n*/\nconst expandEnvVars = (flow, env) => {\n\tconst expandedSteps = [];\n\tfor (const command of flow.steps) {\n\t\tconst result = expandCommandEnvVars(command, env);\n\t\tif (result.isErr()) return err(result.error);\n\t\texpandedSteps.push(result.value);\n\t}\n\treturn ok({\n\t\t...flow,\n\t\tsteps: expandedSteps\n\t});\n};\n/**\n* コマンド内の環境変数を展開する\n*\n* コマンドオブジェクトの全てのプロパティを走査し、\n* 文字列型のプロパティに含まれる環境変数を展開する。\n* 未定義の環境変数が見つかった場合は、エラーを返す。\n*\n* @param command - 環境変数を含む可能性のあるコマンド\n* @param env - 環境変数の辞書(キー=変数名、値=変数値)\n* @returns 環境変数が展開されたコマンド、または未定義変数エラー\n*\n* @remarks\n* ## 前提条件\n* この実装は、全てのCommand型(OpenCommand、ClickCommand等)がフラットな構造であることを前提とする。\n* すなわち、トップレベルのプロパティは基本型(string、number、boolean等)のみで構成され、\n* ネストされたオブジェクトや配列を含まないことを前提とする。\n*\n* ## 実装の詳細\n* Object.entriesを使用して動的に全プロパティを走査し、\n* 実行時に文字列プロパティを判定することで、\n* Command型のあらゆるバリエーションに対応する。\n*\n* ## 将来の拡張について\n* 将来的にネストされたオブジェクトや配列を含むCommand型が追加された場合、\n* この関数は再帰的な走査に対応する必要がある。\n* その際は、型アサーションを使用せず、Command型のバリアント毎に\n* 個別に処理する型安全な実装への変更を検討すること。\n*/\nconst expandCommandEnvVars = (command, env) => {\n\tconst expanded = { ...command };\n\tfor (const [key, value] of Object.entries(expanded)) if (typeof value === \"string\") {\n\t\tconst result = expandString(value, env);\n\t\tif (result.isErr()) return err(result.error);\n\t\texpanded[key] = result.value;\n\t}\n\treturn ok(expanded);\n};\n/**\n* 文字列内の環境変数を展開する\n*\n* ${VAR_NAME} 形式の環境変数プレースホルダーを実際の値に置換する。\n* 未定義の環境変数が見つかった場合は、エラーを返す。\n*\n* @param str - 環境変数を含む可能性のある文字列\n* @param env - 環境変数の辞書(キー=変数名、値=変数値)\n* @returns 環境変数が展開された文字列、または未定義変数エラー\n*\n* @example\n* ```typescript\n* const str = 'Hello ${NAME}, welcome to ${SITE}!';\n* const env = { NAME: 'Alice', SITE: 'Example' };\n* const result = expandString(str, env);\n* // result.isOk() の場合: result.value は 'Hello Alice, welcome to Example!'\n* ```\n*\n* @example\n* ```typescript\n* // 存在しない変数はエラーになる\n* const str = 'Value: ${UNKNOWN}';\n* const env = {};\n* const result = expandString(str, env);\n* // result.isErr() の場合:\n* // result.error.type は 'validation_error'\n* // result.error.message は '環境変数 ${UNKNOWN} が定義されていません'\n* ```\n*/\nconst expandString = (str, env) => {\n\tconst undefinedVars = [];\n\tconst varPattern = /\\$\\{([^}]+)\\}/g;\n\tlet match;\n\twhile ((match = varPattern.exec(str)) !== null) {\n\t\tconst varName = match[1];\n\t\tif (!(varName in env)) undefinedVars.push(varName);\n\t}\n\tif (undefinedVars.length > 0) return err({\n\t\ttype: \"validation_error\",\n\t\tmessage: `環境変数 ${undefinedVars.map((v) => `\\${${v}}`).join(\", \")} が定義されていません`,\n\t\tcommand: \"\",\n\t\targs: [],\n\t\texitCode: 0,\n\t\tstderr: \"\",\n\t\terrorMessage: null\n\t});\n\treturn ok(str.replace(/\\$\\{([^}]+)\\}/g, (_, varName) => env[varName]));\n};\n\n//#endregion\n//#region src/executor/flow-executor.ts\n/**\n* フロー実行エンジン\n*\n* このモジュールはYAMLフロー定義に基づいて、複数のステップを順次実行する機能を提供する。\n* 環境変数の展開、エラー時の処理(bail、スクリーンショット)、実行結果の集約を担当する。\n*/\nconst DEBUG = process.env.DEBUG_FLOW === \"1\";\nconst debugLog = (msg, ...args) => {\n\tif (DEBUG) process.stderr.write(`[flow-executor] ${msg} ${args.map(String).join(\" \")}\\n`);\n};\n/**\n* 失敗したフロー結果を構築する\n*\n* @param expandedFlow - 環境変数が展開されたフロー定義\n* @param sessionName - セッション名\n* @param duration - 全体の実行時間(ミリ秒)\n* @param steps - 実行済みのステップ結果の配列\n* @param firstFailureStep - 最初に失敗したステップの結果\n* @param firstFailureIndex - 最初に失敗したステップのインデックス\n* @returns 失敗したフロー結果\n*/\nconst buildFailedFlowResult = (expandedFlow, sessionName, duration, steps, firstFailureStep, firstFailureIndex) => {\n\treturn {\n\t\tflow: expandedFlow,\n\t\tsessionName,\n\t\tstatus: \"failed\",\n\t\tduration,\n\t\tsteps,\n\t\terror: {\n\t\t\tmessage: firstFailureStep.error.message,\n\t\t\tstepIndex: firstFailureIndex,\n\t\t\tscreenshot: firstFailureStep.error.screenshot\n\t\t}\n\t};\n};\n/**\n* 成功したフロー結果を構築する\n*\n* @param expandedFlow - 環境変数が展開されたフロー定義\n* @param sessionName - セッション名\n* @param duration - 全体の実行時間(ミリ秒)\n* @param steps - 実行済みのステップ結果の配列\n* @returns 成功したフロー結果\n*/\nconst buildSuccessFlowResult = (expandedFlow, sessionName, duration, steps) => {\n\treturn {\n\t\tflow: expandedFlow,\n\t\tsessionName,\n\t\tstatus: \"passed\",\n\t\tduration,\n\t\tsteps\n\t};\n};\n/**\n* 実行コンテキストを構築する\n*\n* @param options - フロー実行オプション\n* @param flow - フロー定義(flow.envを使用)\n* @returns 実行コンテキスト\n*/\nconst buildExecutionContext = (options, flow) => {\n\tconst mergedEnv = {\n\t\t...flow.env,\n\t\t...options.env\n\t};\n\treturn {\n\t\tsessionName: options.sessionName,\n\t\texecuteOptions: {\n\t\t\tsessionName: options.sessionName,\n\t\t\theaded: options.headed ?? false,\n\t\t\ttimeoutMs: options.commandTimeoutMs ?? 3e4,\n\t\t\tcwd: options.cwd\n\t\t},\n\t\tenv: mergedEnv,\n\t\tautoWaitTimeoutMs: options.autoWaitTimeoutMs ?? 3e4,\n\t\tautoWaitIntervalMs: options.autoWaitIntervalMs ?? 100\n\t};\n};\n/**\n* 全ステップを実行する\n*\n* @param expandedFlow - 環境変数が展開されたフロー定義\n* @param context - 実行コンテキスト\n* @param screenshot - スクリーンショットを撮影するか\n* @param bail - エラー時に即座に停止するか\n* @param startTime - 実行開始時刻\n* @param onStepProgress - ステップ進捗コールバック(オプション)\n* @returns ステップの実行結果とフロー結果(bailの場合のみ)\n*/\nconst executeAllSteps = async (expandedFlow, context, screenshot, bail, startTime, onStepProgress) => {\n\tdebugLog(\"executeAllSteps start\", {\n\t\tstepCount: expandedFlow.steps.length,\n\t\tbail,\n\t\tscreenshot\n\t});\n\tconst steps = [];\n\tlet hasFailure = false;\n\tlet firstFailureIndex = -1;\n\tconst stepTotal = expandedFlow.steps.length;\n\tfor (let i = 0; i < expandedFlow.steps.length; i++) {\n\t\tconst command = expandedFlow.steps[i];\n\t\tdebugLog(`step ${i + 1}/${expandedFlow.steps.length} start:`, command);\n\t\tif (onStepProgress) await onStepProgress({\n\t\t\tstepIndex: i,\n\t\t\tstepTotal,\n\t\t\tstatus: \"started\"\n\t\t});\n\t\tconst stepResult = await executeStep(command, i, context, screenshot);\n\t\tdebugLog(`step ${i + 1} done:`, {\n\t\t\tstatus: stepResult.status,\n\t\t\tduration: stepResult.duration\n\t\t});\n\t\tsteps.push(stepResult);\n\t\tif (onStepProgress) await onStepProgress({\n\t\t\tstepIndex: i,\n\t\t\tstepTotal,\n\t\t\tstatus: \"completed\",\n\t\t\tstepResult\n\t\t});\n\t\tif (stepResult.status === \"failed\") {\n\t\t\tif (!hasFailure) {\n\t\t\t\thasFailure = true;\n\t\t\t\tfirstFailureIndex = i;\n\t\t\t}\n\t\t\tif (bail) {\n\t\t\t\tconst duration = Date.now() - startTime;\n\t\t\t\treturn {\n\t\t\t\t\tsteps,\n\t\t\t\t\thasFailure,\n\t\t\t\t\tfirstFailureIndex,\n\t\t\t\t\tearlyResult: ok(buildFailedFlowResult(expandedFlow, context.sessionName, duration, steps, stepResult, i))\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tsteps,\n\t\thasFailure,\n\t\tfirstFailureIndex\n\t};\n};\n/**\n* フローを実行する\n*\n* フロー実行の処理フローは以下の通り:\n* 1. オプションのデフォルト値を設定\n* 2. 実行コンテキストを構築(Flow.envとoptions.envをマージ)\n* 3. フロー内の環境変数を展開(未定義変数はエラー)\n* 4. 各ステップを順次実行\n* 5. エラー発生時の処理:\n* - `bail: true`(デフォルト): 最初の失敗で即座に停止\n* - `bail: false`: 失敗ステップをスキップして続行\n* 6. スクリーンショット撮影:\n* - `screenshot: true`(デフォルト): 失敗時にスクリーンショットを撮影\n* - `screenshot: false`: スクリーンショットを撮影しない\n* 7. 実行結果を集約して返す\n*\n* @param flow - 実行するフロー定義(YAMLから読み込んだもの)\n* @param options - 実行時のオプション(セッション名、タイムアウト、環境変数など)\n* @returns フロー実行結果(成功時)、またはエラー(失敗時)\n*\n* @remarks\n* ## エラーハンドリングの設計\n* - 個別のステップエラーは StepResult 内に格納される\n* - フロー全体のエラーは FlowResult.error に格納される\n* - executeFlow自体がerrを返すのは以下のケース:\n* - agent-browserが起動できない場合\n* - 環境変数の展開に失敗した場合(未定義変数など)\n* - ステップの失敗は正常な実行結果として扱われ、okで返される\n*\n* ## bail オプションの動作\n* - bail: true の場合、最初の失敗で即座に FlowResult を返す\n* - bail: false の場合、全てのステップを実行し、最後に FlowResult を返す\n* - いずれの場合も、失敗があれば status: 'failed' となる\n*\n* ## 環境変数のマージ\n* - Flow.envとoptions.envをマージして使用\n* - 優先順位: options.env > Flow.env(実行時オプションが優先)\n*/\nconst executeFlow = async (flow, options) => {\n\tconst startTime = Date.now();\n\tconst bail = options.bail ?? true;\n\tconst screenshot = options.screenshot ?? true;\n\tconst context = buildExecutionContext(options, flow);\n\tconst expandResult = expandEnvVars(flow, context.env);\n\tif (expandResult.isErr()) return err(expandResult.error);\n\tconst expandedFlow = expandResult.value;\n\tconst { steps, hasFailure, firstFailureIndex, earlyResult } = await executeAllSteps(expandedFlow, context, screenshot, bail, startTime, options.onStepProgress);\n\tif (earlyResult) return earlyResult;\n\tconst duration = Date.now() - startTime;\n\tif (hasFailure) {\n\t\tconst firstFailureStep = steps[firstFailureIndex];\n\t\treturn ok(buildFailedFlowResult(expandedFlow, context.sessionName, duration, steps, firstFailureStep, firstFailureIndex));\n\t}\n\treturn ok(buildSuccessFlowResult(expandedFlow, context.sessionName, duration, steps));\n};\n\n//#endregion\nexport { executeFlow, getStepLineNumbers, loadFlows, parseFlowYaml, resolveEnvVariables };\n//# sourceMappingURL=index.mjs.map","/**\n * runコマンドの実装\n *\n * フローファイルを読み込み、agent-browserで実行する。\n * 実行結果を表示し、終了コードを返す。\n */\n\nimport { type Result, ok, err, fromPromise } from 'neverthrow';\nimport { resolve } from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport { glob } from 'glob';\nimport type { CliError, FlowExecutionResult } from '../types';\nimport type { OutputFormatter } from '../output/formatter';\nimport {\n checkAgentBrowser,\n closeSession,\n type AgentBrowserError,\n} from '@packages/agent-browser-adapter';\nimport {\n parseFlowYaml,\n type Flow,\n executeFlow,\n type FlowResult,\n type StepProgress,\n} from '@packages/core';\n\n/**\n * runコマンドの引数\n */\ntype RunCommandArgs = {\n /** フローファイルパスの配列 */\n files: string[];\n /** ヘッドモードで実行するか */\n headed: boolean;\n /** 環境変数のマップ */\n env: Record<string, string>;\n /** タイムアウト時間(ミリ秒) */\n timeout: number;\n /** スクリーンショットを撮影するか */\n screenshot: boolean;\n /** 最初の失敗で停止するか */\n bail: boolean;\n /** セッション名 */\n session?: string;\n /** verboseモード */\n verbose: boolean;\n /** 進捗をJSON形式で出力するか */\n progressJson: boolean;\n};\n\n/**\n * agent-browserのインストール状態を確認する\n *\n * @param formatter - 出力フォーマッター\n * @returns 成功時: void、失敗時: CliError\n */\nconst checkAgentBrowserInstallation = async (\n formatter: OutputFormatter,\n): Promise<Result<void, CliError>> => {\n formatter.info('Checking agent-browser...');\n formatter.debug('Checking agent-browser installation...');\n\n const checkResult = await checkAgentBrowser();\n\n return checkResult.match(\n () => {\n formatter.success('agent-browser is installed');\n formatter.newline();\n return ok(undefined);\n },\n (error) => {\n formatter.failure('agent-browser is not installed');\n formatter.newline();\n formatter.error('Error: agent-browser is not installed');\n formatter.error('Please install it with: npm install -g agent-browser');\n\n const errorMessage =\n error.type === 'not_installed'\n ? error.message\n : `${error.type}: ${error.type === 'command_failed' ? (error.errorMessage ?? error.stderr) : ''}`;\n\n return err({\n type: 'execution_error' as const,\n message: errorMessage,\n });\n },\n );\n};\n\n/**\n * フローファイルパスの配列を解決する\n *\n * ファイルが指定されていない場合、.abflow/ ディレクトリから検索する。\n *\n * @param files - 指定されたファイルパスの配列\n * @returns 成功時: 解決されたファイルパスの配列、失敗時: CliError\n */\nconst resolveFlowFiles = async (files: string[]): Promise<Result<string[], CliError>> => {\n if (files.length > 0) {\n // ファイルパスが指定されている場合、絶対パスに変換\n return ok(files.map((f) => resolve(process.cwd(), f)));\n }\n\n // 指定がない場合、.abflow/ 配下を検索\n const pattern = resolve(process.cwd(), '.abflow', '*.enbu.yaml');\n return fromPromise(\n glob(pattern),\n (error): CliError => ({\n type: 'execution_error' as const,\n message: 'Failed to search for flow files',\n cause: error,\n }),\n );\n};\n\n/**\n * ファイルパスからフローを読み込んでパースする\n *\n * @param filePath - フローファイルのパス\n * @returns 成功時: Flowオブジェクト、失敗時: CliError\n */\nconst loadFlowFromFile = async (filePath: string): Promise<Result<Flow, CliError>> => {\n // ファイル読み込み\n const readResult = await fromPromise<string, CliError>(\n readFile(filePath, 'utf-8'),\n (error): CliError => ({\n type: 'execution_error' as const,\n message: `Failed to read file: ${filePath}`,\n cause: error,\n }),\n );\n\n if (readResult.isErr()) {\n return err(readResult.error);\n }\n\n const yamlContent = readResult.value;\n\n // ファイル名を抽出(拡張子付き)\n const fileName = filePath.split('/').pop() ?? 'unknown.enbu.yaml';\n\n // YAMLをパース\n const parseResult = parseFlowYaml(yamlContent, fileName);\n return parseResult.mapErr(\n (parseError): CliError => ({\n type: 'execution_error' as const,\n message: `Failed to parse flow file: ${parseError.message}`,\n cause: parseError,\n }),\n );\n};\n\n/**\n * フローファイルを読み込む\n *\n * @param flowFiles - フローファイルパスの配列\n * @param formatter - 出力フォーマッター\n * @returns 成功時: Flowオブジェクトの配列、失敗時: CliError\n */\nconst loadFlows = async (\n flowFiles: string[],\n formatter: OutputFormatter,\n): Promise<Result<Flow[], CliError>> => {\n formatter.info('Loading flows...');\n formatter.debug(`Loading flows from: ${flowFiles.join(', ')}`);\n\n // 各ファイルを順次読み込み\n const flows: Flow[] = [];\n for (const filePath of flowFiles) {\n const loadResult = await loadFlowFromFile(filePath);\n if (loadResult.isErr()) {\n formatter.failure(`Failed to load flows: ${loadResult.error.message}`);\n return err(loadResult.error);\n }\n flows.push(loadResult.value);\n }\n\n formatter.success(`Loaded ${flows.length} flow(s)`);\n formatter.newline();\n\n return ok(flows);\n};\n\n/**\n * JSON進捗出力の型定義(VS Code拡張など外部ツール連携用)\n */\ntype ProgressJsonMessage =\n | { type: 'flow:start'; flowName: string; stepTotal: number }\n | { type: 'step:start'; stepIndex: number; stepTotal: number }\n | {\n type: 'step:complete';\n stepIndex: number;\n stepTotal: number;\n status: 'passed' | 'failed';\n duration: number;\n error?: string;\n }\n | { type: 'flow:complete'; flowName: string; status: 'passed' | 'failed'; duration: number };\n\n/**\n * JSON進捗メッセージをstdoutに出力する\n *\n * @param message - 出力するメッセージ\n */\nconst outputProgressJson = (message: ProgressJsonMessage): void => {\n process.stdout.write(`${JSON.stringify(message)}\\n`);\n};\n\n/**\n * コマンド説明フォーマッター関数の型\n */\ntype CommandFormatter = (command: Flow['steps'][number]) => string;\n\n/**\n * コマンド説明のフォーマッター関数マップ\n */\nconst commandFormatters: Record<string, CommandFormatter> = {\n open: (cmd) => `open ${('url' in cmd && cmd.url) || ''}`,\n click: (cmd) =>\n 'selector' in cmd\n ? `click \"${cmd.selector}\"${'index' in cmd && cmd.index !== undefined ? ` [${cmd.index}]` : ''}`\n : 'click',\n type: (cmd) =>\n 'selector' in cmd && 'value' in cmd\n ? `type \"${cmd.selector}\" = \"${cmd.value}\"${'clear' in cmd && cmd.clear ? ' (clear)' : ''}`\n : 'type',\n fill: (cmd) =>\n 'selector' in cmd && 'value' in cmd ? `fill \"${cmd.selector}\" = \"${cmd.value}\"` : 'fill',\n press: (cmd) => `press ${'key' in cmd ? cmd.key : ''}`,\n hover: (cmd) => ('selector' in cmd ? `hover \"${cmd.selector}\"` : 'hover'),\n select: (cmd) =>\n 'selector' in cmd && 'value' in cmd ? `select \"${cmd.selector}\" = \"${cmd.value}\"` : 'select',\n scroll: (cmd) =>\n 'direction' in cmd && 'amount' in cmd ? `scroll ${cmd.direction} ${cmd.amount}px` : 'scroll',\n scrollIntoView: (cmd) =>\n 'selector' in cmd ? `scrollIntoView \"${cmd.selector}\"` : 'scrollIntoView',\n wait: (cmd) =>\n 'ms' in cmd ? `wait ${cmd.ms}ms` : 'target' in cmd ? `wait \"${cmd.target}\"` : 'wait',\n screenshot: (cmd) =>\n 'path' in cmd\n ? `screenshot ${cmd.path}${'fullPage' in cmd && cmd.fullPage ? ' (full page)' : ''}`\n : 'screenshot',\n snapshot: () => 'snapshot',\n eval: (cmd) =>\n 'script' in cmd\n ? `eval \"${cmd.script.substring(0, 50)}${cmd.script.length > 50 ? '...' : ''}\"`\n : 'eval',\n assertVisible: (cmd) => ('selector' in cmd ? `assertVisible \"${cmd.selector}\"` : 'assertVisible'),\n assertEnabled: (cmd) => ('selector' in cmd ? `assertEnabled \"${cmd.selector}\"` : 'assertEnabled'),\n assertChecked: (cmd) =>\n 'selector' in cmd\n ? `assertChecked \"${cmd.selector}\"${'checked' in cmd && cmd.checked === false ? ' (unchecked)' : ''}`\n : 'assertChecked',\n};\n\n/**\n * コマンドの説明を生成する\n *\n * @param command - コマンド\n * @returns コマンドの説明文字列\n */\nconst formatCommandDescription = (command: Flow['steps'][number]): string => {\n const formatter = commandFormatters[command.command];\n return formatter ? formatter(command) : 'unknown command';\n};\n\n/**\n * ステップ開始時のJSON進捗を出力する\n *\n * @param progress - ステップ進捗情報\n */\nconst outputStepStartJson = (progress: StepProgress): void => {\n outputProgressJson({\n type: 'step:start',\n stepIndex: progress.stepIndex,\n stepTotal: progress.stepTotal,\n });\n};\n\n/**\n * ステップ完了時のJSON進捗を出力する\n *\n * @param progress - ステップ進捗情報\n */\nconst outputStepCompleteJson = (progress: StepProgress): void => {\n outputProgressJson({\n type: 'step:complete',\n stepIndex: progress.stepIndex,\n stepTotal: progress.stepTotal,\n status: progress.stepResult?.status ?? 'failed',\n duration: progress.stepResult?.duration ?? 0,\n error: progress.stepResult?.error?.message,\n });\n};\n\n/**\n * ステップ進捗コールバックを生成する(progressJsonモード用)\n *\n * @param progressJson - JSON進捗出力を有効にするか\n * @returns ステップ進捗コールバック(progressJson=falseの場合はundefined)\n */\nconst createStepProgressCallback = (\n progressJson: boolean,\n): ((progress: StepProgress) => void) | undefined => {\n if (!progressJson) {\n return undefined;\n }\n\n return (progress: StepProgress): void => {\n if (progress.status === 'started') {\n outputStepStartJson(progress);\n } else {\n outputStepCompleteJson(progress);\n }\n };\n};\n\n/**\n * フローを実行しながら進捗を表示する\n *\n * @param flow - 実行するフロー\n * @param args - 実行オプション\n * @param sessionName - セッション名\n * @returns 成功時: FlowResult、失敗時: CliError\n */\nconst executeFlowWithProgress = async (\n flow: Flow,\n args: RunCommandArgs,\n sessionName: string,\n): Promise<Result<FlowResult, CliError>> => {\n // フロー実行\n const executeResult = await executeFlow(flow, {\n sessionName,\n headed: args.headed,\n env: args.env,\n commandTimeoutMs: args.timeout,\n screenshot: args.screenshot,\n bail: args.bail,\n onStepProgress: createStepProgressCallback(args.progressJson),\n });\n\n return executeResult.mapErr((agentError: AgentBrowserError): CliError => {\n const errorMessage =\n agentError.type === 'not_installed'\n ? agentError.message\n : agentError.type === 'parse_error'\n ? agentError.message\n : agentError.type === 'timeout'\n ? `Timeout: ${agentError.command} (${agentError.timeoutMs}ms)`\n : (agentError.errorMessage ?? agentError.stderr);\n\n return {\n type: 'execution_error' as const,\n message: errorMessage,\n cause: agentError,\n };\n });\n};\n\n/**\n * 各ステップの結果を表示する(verboseモードのみ)\n */\nconst displayStepResults = (steps: FlowResult['steps'], formatter: OutputFormatter): void => {\n formatter.newline();\n formatter.indent('Steps:', 1);\n for (const step of steps) {\n const stepDesc = formatCommandDescription(step.command);\n const statusIcon = step.status === 'passed' ? '✓' : '✗';\n formatter.indent(`${statusIcon} Step ${step.index + 1}: ${stepDesc} (${step.duration}ms)`, 2);\n if (step.error) {\n formatter.indent(`Error: ${step.error.message}`, 3);\n }\n }\n};\n\n/**\n * フロー実行結果を表示する\n *\n * @param flow - 実行したフロー\n * @param result - フロー実行結果\n * @param formatter - 出力フォーマッター\n * @param verbose - verboseモードフラグ\n */\nconst displayFlowResult = (\n flow: Flow,\n result: FlowResult,\n formatter: OutputFormatter,\n verbose: boolean,\n): void => {\n const duration = result.duration;\n\n formatter.newline();\n\n if (result.status === 'passed') {\n formatter.success(`PASSED: ${flow.name}.enbu.yaml`, duration);\n } else {\n formatter.failure(`FAILED: ${flow.name}.enbu.yaml`, duration);\n if (result.error) {\n formatter.indent(`Step ${result.error.stepIndex + 1} failed: ${result.error.message}`, 1);\n if (result.error.screenshot) {\n formatter.indent(`Screenshot: ${result.error.screenshot}`, 1);\n }\n }\n }\n\n // 各ステップの結果を表示(verboseモードのみ)\n if (verbose) {\n displayStepResults(result.steps, formatter);\n }\n\n formatter.newline();\n};\n\n/**\n * 全てのフローを実行する\n *\n * @param flows - 実行するフロー配列\n * @param args - 実行オプション\n * @param formatter - 出力フォーマッター\n * @returns フロー実行結果のサマリー\n */\nconst executeAllFlows = async (\n flows: Flow[],\n args: RunCommandArgs,\n formatter: OutputFormatter,\n): Promise<FlowExecutionResult> => {\n let passed = 0;\n let failed = 0;\n const startTime = Date.now();\n\n for (const flow of flows) {\n formatter.info(`Running: ${flow.name}.enbu.yaml`);\n formatter.debug(`Executing flow: ${flow.name} (${flow.steps.length} steps)`);\n\n const flowStartTime = Date.now();\n\n // JSON進捗出力: フロー開始\n if (args.progressJson) {\n outputProgressJson({\n type: 'flow:start',\n flowName: flow.name,\n stepTotal: flow.steps.length,\n });\n }\n\n // セッション名を生成\n // args.sessionが指定されている場合でも、各フローごとにユニークなセッション名を生成する\n // これにより、複数フロー実行時に最初のフローがセッションをクローズしても\n // 2番目以降のフローが影響を受けないようにする\n const sessionName = `abf-${args.session || flow.name}-${Date.now()}`;\n\n // フロー実行\n const executeResult = await executeFlowWithProgress(flow, args, sessionName);\n\n await executeResult.match(\n async (result) => {\n // JSON進捗出力: フロー完了\n if (args.progressJson) {\n outputProgressJson({\n type: 'flow:complete',\n flowName: flow.name,\n status: result.status,\n duration: result.duration,\n });\n }\n\n displayFlowResult(flow, result, formatter, args.verbose);\n\n if (result.status === 'passed') {\n passed++;\n // 正常終了時はセッションをクローズ\n const closeResult = await closeSession(sessionName);\n closeResult.mapErr((error) => {\n formatter.debug(`Failed to close session: ${error.type}`);\n });\n } else {\n failed++;\n // 失敗時はデバッグ案内を表示\n formatter.info('💡 Debug: To inspect the browser state, run:');\n formatter.indent(`npx agent-browser snapshot --session ${sessionName}`, 1);\n }\n },\n async (error) => {\n // JSON進捗出力: フロー失敗\n if (args.progressJson) {\n const duration = Date.now() - flowStartTime;\n outputProgressJson({\n type: 'flow:complete',\n flowName: flow.name,\n status: 'failed',\n duration,\n });\n }\n\n failed++;\n const duration = Date.now() - flowStartTime;\n formatter.newline();\n formatter.failure(`FAILED: ${flow.name}.enbu.yaml`, duration);\n formatter.indent(error.message, 1);\n formatter.newline();\n // executeFlowWithProgressがerrを返した場合、初期化エラーなどで\n // セッションが作成されていない可能性があるため、デバッグ案内は表示しない\n // (result.status === 'failed'の場合のみセッションが確実に存在する)\n },\n );\n\n // --bail フラグが指定されていて、失敗した場合は中断\n if (args.bail && failed > 0) {\n formatter.error('Stopping due to --bail flag');\n formatter.newline();\n break;\n }\n }\n\n // サマリー表示\n formatter.separator();\n const totalDuration = Date.now() - startTime;\n const total = passed + failed;\n formatter.info(\n `Summary: ${passed}/${total} flows passed (${(totalDuration / 1000).toFixed(1)}s)`,\n );\n\n if (failed > 0) {\n formatter.newline();\n formatter.error('Exit code: 1');\n }\n\n return { passed, failed, total };\n};\n\n/**\n * runコマンドを実行する\n *\n * @param args - runコマンドの引数\n * @param formatter - 出力フォーマッター\n * @returns 成功時: 実行結果、失敗時: CliError\n */\nexport const runFlowCommand = async (\n args: RunCommandArgs,\n formatter: OutputFormatter,\n): Promise<Result<FlowExecutionResult, CliError>> => {\n formatter.debug(`Args: ${JSON.stringify(args)}`);\n\n // 1. agent-browserインストール確認\n const checkResult = await checkAgentBrowserInstallation(formatter);\n if (checkResult.isErr()) {\n return err(checkResult.error);\n }\n\n // 2. フローファイル解決\n const flowFilesResult = await resolveFlowFiles(args.files);\n if (flowFilesResult.isErr()) {\n return err(flowFilesResult.error);\n }\n\n const flowFiles = flowFilesResult.value;\n\n if (flowFiles.length === 0) {\n formatter.error('Error: No flow files found');\n formatter.error('Try: npx enbu init');\n return err({\n type: 'execution_error' as const,\n message: 'No flow files found',\n });\n }\n\n // 3. フローファイル読み込み\n const loadResult = await loadFlows(flowFiles, formatter);\n if (loadResult.isErr()) {\n return err(loadResult.error);\n }\n\n const flows = loadResult.value;\n\n // 4. フロー実行\n const executionResult = await executeAllFlows(flows, args, formatter);\n\n return ok(executionResult);\n};\n","/**\n * 終了コード定義\n */\nexport const EXIT_CODE = {\n /** 成功 */\n SUCCESS: 0,\n /** フロー実行失敗 */\n FLOW_FAILED: 1,\n /** 実行エラー(agent-browser未インストール等) */\n EXECUTION_ERROR: 2,\n} as const;\n\n/**\n * 終了コードで終了する\n *\n * @param code - 終了コード\n */\nexport const exitWithCode = (code: number): never => {\n process.exit(code);\n};\n","import { parseArgs } from './args-parser';\nimport { runInitCommand } from './commands/init';\nimport { runFlowCommand } from './commands/run';\nimport { showHelp, showVersion, OutputFormatter } from './output/formatter';\nimport { EXIT_CODE, exitWithCode } from './output/exit-code';\n\n/**\n * CLIエントリポイント\n *\n * コマンドライン引数をパースし、適切なコマンドを実行する。\n * 実行結果に基づいて終了コードを設定する。\n */\nconst main = async (): Promise<void> => {\n // 引数パース\n const argsResult = parseArgs(process.argv.slice(2));\n\n // neverthrowのmatchパターンで処理する\n await argsResult.match(\n async (args) => {\n // 引数のパースに成功した場合\n\n // バージョン表示\n if (args.version) {\n showVersion();\n exitWithCode(EXIT_CODE.SUCCESS);\n }\n\n // ヘルプ表示\n if (args.help) {\n showHelp();\n exitWithCode(EXIT_CODE.SUCCESS);\n }\n\n // コマンド実行\n if (args.command === 'init') {\n const result = await runInitCommand({\n force: args.force,\n verbose: args.verbose,\n });\n\n result.match(\n () => exitWithCode(EXIT_CODE.SUCCESS),\n (error) => {\n process.stderr.write(`Error: ${error.message}\\n`);\n exitWithCode(EXIT_CODE.EXECUTION_ERROR);\n },\n );\n } else {\n const formatter = new OutputFormatter(args.verbose);\n const result = await runFlowCommand(\n {\n files: args.files,\n headed: args.headed,\n env: args.env,\n timeout: args.timeout,\n screenshot: args.screenshot,\n bail: args.bail,\n session: args.session,\n verbose: args.verbose,\n progressJson: args.progressJson,\n },\n formatter,\n );\n\n result.match(\n (executionResult) => {\n const exitCode = executionResult.failed > 0 ? EXIT_CODE.FLOW_FAILED : EXIT_CODE.SUCCESS;\n exitWithCode(exitCode);\n },\n (error) => {\n process.stderr.write(`Error: ${error.message}\\n`);\n exitWithCode(EXIT_CODE.EXECUTION_ERROR);\n },\n );\n }\n },\n (error) => {\n // 引数のパースに失敗した場合\n process.stderr.write(`Error: ${error.message}\\n`);\n process.stderr.write('Try: npx enbu --help\\n');\n exitWithCode(EXIT_CODE.EXECUTION_ERROR);\n },\n );\n};\n\n// エントリポイント実行\nmain();\n"],"x_google_ignoreList":[0,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97],"mappings":"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"}