enbu 0.1.0 → 0.4.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 +257 -175
  2. package/dist/main.mjs +18776 -314
  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":["P","e","resolve","s","m","o","i","v","g","f","n","a","b","r","p","d","ResultAsync","ok","t","errAsync","okAsync","err","fromPromise","fromThrowable","DEFAULT_TIMEOUT_MS","state: {\n files: string[];\n env: Record<string, string>;\n headed: boolean;\n timeout: number;\n screenshot: boolean;\n session: string | undefined;\n progressJson: boolean;\n parallel: number | undefined;\n }","i","path","ResultAsync","path","t","e","n","r","i","s","c","u","o","a","a","b","r","m","i","m","p","i","y","k","n","N","x","c","z","j","s","glob","i","c","u","s","c","regExpEscape","s","star","#hasMagic","#parent","#root","#options","#negs","#filledNegs","#parentIndex","#parts","p","#toString","n","i","#parseAST","acc","ext","#emptyExt","glob","hasMagic","#fillNegs","#parseGlob","#uflag","start","#partsToRegExp","s","p","f","ext","defaultPlatform","path","a","b","m","Minimatch","AST","s","set","i","j","n","#constructing","s","#perf","c","#starts","#ttls","#autopurgeTimers","#sizes","#keyMap","#keyList","#valList","#next","#prev","#head","#tail","#free","#isBackgroundFetch","p","#backgroundFetch","k","#moveToTail","#indexes","#rindexes","#isStale","#max","#maxSize","#calculatedSize","#size","#fetchMethod","#memoMethod","#dispose","#onInsert","#disposeAfter","#hasFetchMethod","#disposed","#hasDispose","#hasOnInsert","#hasDisposeAfter","#initializeSizeTracking","#initializeTTLTracking","#setItemTTL","t","#delete","#updateItemAge","#statusTTL","#removeItemSize","#requireSize","v","#addItemSize","#evict","i","#isValidIndex","bf","b","#connect","#clear","s","b","o","a","n","c","p","h","ret","resolve","res","realpathSync","rps","readdirCB","s","c","n","a","#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","p","#fullpathPosix","#linkTarget","#realpath","#readlinkFail","#markENOENT","#markChildrenENOENT","#markENOTDIR","t","#readdirMaybePromoteChild","e","#readdirAddNewChild","#readdirPromoteChild","v","#applyStat","#lstatFail","#readdirCBInFlight","#onReaddirCB","#readdirFail","#readdirAddChild","#readdirSuccess","#callOnReaddirCB","#asyncReaddirInFlight","resolve","#markENOREALPATH","#resolveCache","#resolvePosixCache","sep","l","r","i","filter","process","sync","#patternList","#globList","#index","#platform","p","g","#globString","#rest","#isAbsolute","#isUNC","#isDrive","#followGlobstar","defaultPlatform","i","p","m","n","path","p","k","t","rest","e","path","#sep","#ignore","#onResume","e","s","#ignored","abs","p","#childrenIgnored","m","t","target","p","m","set","g","i","p","Node","#head","#tail","#size","resolve","SCALAR","isScalar","isCollection","identity","BREAK","SKIP","REMOVE","visit","path","i","identity","visit","tags","identity","visit","anchors","i","applyReviver","i","k","identity","toJS","v","i","res","applyReviver","identity","toJS","res","anchors","visit","identity","Node","toJS","Alias","c","identity","Node","toJS","Scalar","Alias","identity","Scalar","match","tags","t","createNode","map","schema","node","createNode","identity","v","i","path","k","a","Collection","schema","n","stringifyComment","foldFlowLines","i","j","end","Scalar","isBlock","i","tags","stringifyString","_stringify","t","anchors","identity","stringifyComment","stringifyString","match","tags","t","anchors$1","stringify","o","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","i","comment","str","stringifyCollection","Collection","identity","Pair","Scalar","k","YAMLMap","schema","map","i","identity","YAMLMap","map","schema","createNode","Collection","identity","Scalar","toJS","YAMLSeq","schema","seq","i","identity","YAMLSeq","seq","schema","stringifyString","string","Scalar","Scalar","stringifyNumber","n","i","d","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","i","s","n","o","identity","Pair","Scalar","YAMLSeq","seq","i","pairs","schema","identity","toJS","YAMLMap","YAMLSeq","pairs","map","pairs$1","schema","omap","seq","Scalar","Scalar","stringifyNumber","float","f","stringifyNumber","n","int","identity","Pair","YAMLMap","schema","set","map","n","res","p","timestamp","match","d","map","_null","seq","string","binary","bool","float","int","merge","omap","pairs","set","timestamp","schema","map","seq","string","tags","identity","string","a","b","Schema","schema","merge","identity","stringify","stringifyDocument","Alias","identity","Pair","Schema","directives","Document","path","v","k","res","s","resolveProps","utilContainsNewline","identity","a","b","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","i","sep","composeNode","composeEmptyNode","map","identity","Scalar","YAMLMap","YAMLSeq","CN","composeCollection","t","Scalar","resolveBlockScalar","i","value","end","sep","n","m","Scalar","resolveEnd","resolveFlowScalar","match","sep","i","identity","Scalar","resolveBlockScalar","resolveFlowScalar","composeScalar","range","schema","tag","directives","i","Alias","identity","resolveEnd","composeNode","Document","resolveEnd","composeDoc","directives","node_process","Document","errors","identity","i","errors","stringify","cst","sep","visit","cst","path","i","cst","i","n","s","ch","cst","lexer","i","n","sep","map","start","seq","composer","Document","errors","identity","lineCounter","parser","parser$1","composer$1","schema","v.object","v.string","v.record","v.unknown","v.boolean","DEBUG","debugLog","ResultAsync","proc","isRecord","v.nullable","e","v.safeParse","path","v.pipe","v.minLength","v.regex","v.brand","v.object","v.pipe","v.description","v.metadata","v.union","v.transform","v.picklist","v.number","v.string","v.optional","v.boolean","schema","match","P","r","s","ResultAsync","timestamp","path$1","e","i","f","match","P","ResultAsync","proc"],"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/ts-pattern@5.9.0/node_modules/ts-pattern/dist/index.js","../../../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","../../../node_modules/.pnpm/yocto-queue@1.2.2/node_modules/yocto-queue/index.js","../../../node_modules/.pnpm/p-limit@7.2.0/node_modules/p-limit/index.js","../../../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/valibot@1.2.0_typescript@5.9.3/node_modules/valibot/dist/index.mjs","../../../packages/agent-browser-adapter/dist/index.mjs","../../../packages/core/dist/index.mjs","../src/commands/run.ts","../src/commands/cleanup.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 const versionOrHelpResult = checkVersionOrHelpFlags(argv);\n if (versionOrHelpResult !== null) {\n return versionOrHelpResult;\n }\n\n // verboseフラグ\n const verbose = argv.includes('-v') || argv.includes('--verbose');\n\n // コマンドを判定してパース\n return parseCommand(argv, verbose);\n};\n\n/**\n * バージョンまたはヘルプフラグをチェックする\n *\n * バージョンフラグまたはヘルプフラグが指定されている場合、\n * 他の引数に関わらず対応するモードの引数を返す。\n * どちらも指定されていない場合はnullを返す。\n *\n * @param argv - 引数配列\n * @returns バージョン/ヘルプモードの引数、またはnull\n */\nconst checkVersionOrHelpFlags = (argv: string[]): Result<ParsedArgs, CliError> | null => {\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 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 progressJson: false,\n });\n }\n\n return null;\n};\n\n/**\n * コマンドを判定してパースする\n *\n * 最初の位置引数からコマンドタイプを判定し、\n * 対応するパース関数を呼び出す。\n *\n * @param argv - 引数配列\n * @param verbose - verboseフラグが有効かどうか\n * @returns パース済み引数、またはエラー\n */\nconst parseCommand = (argv: string[], verbose: boolean): Result<ParsedArgs, CliError> => {\n const firstArg = argv[0];\n\n if (firstArg === 'init') {\n return parseInitArgs(argv.slice(1), verbose);\n }\n\n if (firstArg === 'cleanup') {\n return parseCleanupArgs(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: string[];\n env: Record<string, string>;\n headed: boolean;\n timeout: number;\n screenshot: boolean;\n session: string | undefined;\n progressJson: boolean;\n parallel: number | undefined;\n } = {\n files,\n env,\n headed: false,\n timeout: DEFAULT_TIMEOUT_MS,\n screenshot: false,\n session: undefined,\n progressJson: false,\n parallel: 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 session: state.session,\n progressJson: state.progressJson,\n parallel: state.parallel,\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 session: string | undefined;\n progressJson: boolean;\n parallel: number | 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 case '--parallel':\n return parseParallelOption(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 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 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 === '--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 * --parallel オプションをパースする\n *\n * 並列実行数を指定する。1以上の整数でなければならない。\n *\n * @param argv - 全引数配列\n * @param currentIndex - 現在のインデックス\n * @param state - パース状態を保持するオブジェクト\n * @returns 成功時: 新しいインデックス、失敗時: エラー\n */\nconst parseParallelOption = (\n argv: string[],\n currentIndex: number,\n state: { parallel: number | undefined },\n): Result<number, CliError> => {\n const nextArg = argv[currentIndex + 1];\n if (!nextArg) {\n return err({\n type: 'invalid_args',\n message: '--parallel requires a number',\n });\n }\n\n const parallelNum = Number.parseInt(nextArg, 10);\n if (Number.isNaN(parallelNum) || parallelNum < 1) {\n return err({\n type: 'invalid_args',\n message: `--parallel must be a positive integer, got: ${nextArg}`,\n });\n }\n\n state.parallel = parallelNum;\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\n/**\n * cleanupコマンドの引数をパースする\n *\n * cleanupコマンドは現時点では追加のオプションを持たない。\n * 未知のオプションが指定された場合はエラーを返す。\n *\n * @param argv - cleanupコマンド以降の引数配列\n * @param verbose - verboseフラグが有効かどうか\n * @returns パース済みのcleanup引数、またはエラー\n */\nconst parseCleanupArgs = (argv: string[], verbose: boolean): Result<ParsedArgs, CliError> => {\n // 未知のオプションチェック\n for (const arg of argv) {\n if (arg.startsWith('--')) {\n if (arg !== '--verbose') {\n return err({\n type: 'invalid_args',\n message: `Unknown option for cleanup 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 cleanup command: ${arg}`,\n });\n }\n } else {\n // 位置引数は受け付けない\n return err({\n type: 'invalid_args',\n message: `cleanup command does not accept positional arguments, got: ${arg}`,\n });\n }\n }\n\n return ok({\n command: 'cleanup',\n help: false,\n version: false,\n verbose,\n });\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 cleanup Clean up enbu-* sessions\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 --parallel <N> Run N flows in parallel\n\nEXAMPLES:\n npx enbu init\n npx enbu cleanup\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 npx enbu --parallel 4 flows/*.enbu.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 *\n * 注: tsxで直接実行する場合(統合テストなど)は__VERSION__が定義されないため、\n * フォールバック値として'0.0.0-dev'を使用します。\n */\nexport const showVersion = (): void => {\n const version = typeof __VERSION__ !== 'undefined' ? __VERSION__ : '0.0.0-dev';\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 { ResultAsync, okAsync } 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 ENBUFLOW_DIR = '.enbuflow';\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. .enbuflow/ ディレクトリを作成\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 = (args: {\n force: boolean;\n verbose: boolean;\n}): ResultAsync<void, CliError> => {\n const formatter = new OutputFormatter(args.verbose);\n\n formatter.info('Initializing enbu project...');\n\n // .enbuflow/ ディレクトリとサンプルファイルを作成\n return setupEnbuflowDirectory(args.force, formatter).andThen(() => {\n // .gitignore への追記を提案\n return ResultAsync.fromPromise(\n promptGitignoreUpdate(formatter),\n (error): CliError => ({\n type: 'execution_error' as const,\n message: 'Failed to prompt gitignore update',\n cause: error,\n }),\n ).map(() => {\n formatter.newline();\n formatter.info('Initialization complete!');\n formatter.info(`Try: npx enbu ${ENBUFLOW_DIR}/example.enbu.yaml`);\n return undefined;\n });\n });\n};\n\n/**\n * .enbuflow/ ディレクトリとサンプルファイルを作成\n *\n * .enbuflow/ ディレクトリを作成し、その中にサンプルフローファイルを生成する。\n * forceフラグがfalseで既存ファイルが存在する場合はスキップする。\n *\n * @param force - 既存ファイルを強制的に上書きするかどうか\n * @param formatter - 出力フォーマッター\n * @returns 成功時: void、失敗時: CliError\n */\nconst setupEnbuflowDirectory = (\n force: boolean,\n formatter: OutputFormatter,\n): ResultAsync<void, CliError> => {\n // .enbuflow/ ディレクトリを作成\n const enbuflowPath = resolve(process.cwd(), ENBUFLOW_DIR);\n\n return ResultAsync.fromPromise(\n fileExists(enbuflowPath),\n (error): CliError => ({\n type: 'execution_error' as const,\n message: 'Failed to check if directory exists',\n cause: error,\n }),\n )\n .andThen((enbuflowExists) => {\n if (enbuflowExists && !force) {\n formatter.success(`Directory already exists: ${ENBUFLOW_DIR}`);\n return okAsync(undefined);\n }\n return createDirectory(enbuflowPath).map(() => {\n formatter.success(`Created ${ENBUFLOW_DIR}/ directory`);\n return undefined;\n });\n })\n .andThen(() => createExampleFlowIfNeeded(enbuflowPath, force, formatter));\n};\n\n/**\n * example.enbu.yaml を必要に応じて作成\n *\n * @param enbuflowPath - .enbuflow ディレクトリのパス\n * @param force - 強制上書きフラグ\n * @param formatter - 出力フォーマッター\n * @returns 成功時: void、失敗時: CliError\n */\nconst createExampleFlowIfNeeded = (\n enbuflowPath: string,\n force: boolean,\n formatter: OutputFormatter,\n): ResultAsync<void, CliError> => {\n const exampleFlowPath = resolve(enbuflowPath, 'example.enbu.yaml');\n return ResultAsync.fromPromise(\n fileExists(exampleFlowPath),\n (error): CliError => ({\n type: 'execution_error' as const,\n message: 'Failed to check if file exists',\n cause: error,\n }),\n ).andThen((exampleFlowExists) => {\n if (exampleFlowExists && !force) {\n formatter.success(`File already exists: ${ENBUFLOW_DIR}/example.enbu.yaml`);\n return okAsync(undefined);\n }\n return writeFileContent(exampleFlowPath, SAMPLE_FLOW_YAML).map(() => {\n formatter.success(`Created ${ENBUFLOW_DIR}/example.enbu.yaml`);\n return undefined;\n });\n });\n};\n\n/**\n * .gitignore への追記を対話的に提案\n *\n * ユーザーに .gitignore への追記を提案し、了承された場合に .enbuflow/ を追記する。\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 .enbuflow/ 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 \".enbuflow/\" 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 に .enbuflow/ を追記\n *\n * .gitignoreファイルに .enbuflow/ エントリを追加する。\n * 以下の条件に応じて処理が分岐する:\n *\n * 1. .gitignoreが存在しない場合:\n * - 新規に.gitignoreファイルを作成し、.enbuflow/を記述する\n *\n * 2. .gitignoreが存在し、既に.enbuflow/が含まれている場合:\n * - 何もせずに成功を返す(重複追記を防ぐ)\n *\n * 3. .gitignoreが存在し、.enbuflow/が含まれていない場合:\n * - ファイル末尾に.enbuflow/を追記する\n * - 元のファイルが改行で終わっていない場合は、改行を追加してから追記する\n *\n * @param path - .gitignoreファイルのパス\n * @returns 成功時: void、失敗時: CliError(type: 'execution_error')\n */\n/**\n * 既存の .gitignore にエントリを追記する\n *\n * @param path - .gitignoreファイルのパス\n * @param entry - 追記するエントリ\n * @returns 成功時: void、失敗時: CliError\n */\nconst appendToExistingGitignore = (path: string, entry: string): ResultAsync<void, CliError> =>\n readFileContent(path).andThen((content) => {\n // 既に .enbuflow/ が含まれている場合はスキップ\n if (content.includes(entry)) {\n return okAsync(undefined);\n }\n\n // 追記\n const newContent = content.endsWith('\\n') ? `${content}${entry}\\n` : `${content}\\n${entry}\\n`;\n return writeFileContent(path, newContent);\n });\n\nconst updateGitignore = (path: string): ResultAsync<void, CliError> => {\n const entry = '.enbuflow/';\n\n return ResultAsync.fromPromise(\n fileExists(path),\n (error): CliError => ({\n type: 'execution_error' as const,\n message: 'Failed to check if .gitignore exists',\n cause: error,\n }),\n ).andThen((exists) => {\n if (!exists) {\n // .gitignore が存在しない場合、新規作成\n return writeFileContent(path, `${entry}\\n`);\n }\n\n // 既存の .gitignore を読み込んで追記\n return appendToExistingGitignore(path, entry);\n });\n};\n","const t=Symbol.for(\"@ts-pattern/matcher\"),e=Symbol.for(\"@ts-pattern/isVariadic\"),n=\"@ts-pattern/anonymous-select-key\",r=t=>Boolean(t&&\"object\"==typeof t),i=e=>e&&!!e[t],o=(n,s,c)=>{if(i(n)){const e=n[t](),{matched:r,selections:i}=e.match(s);return r&&i&&Object.keys(i).forEach(t=>c(t,i[t])),r}if(r(n)){if(!r(s))return!1;if(Array.isArray(n)){if(!Array.isArray(s))return!1;let t=[],r=[],u=[];for(const o of n.keys()){const s=n[o];i(s)&&s[e]?u.push(s):u.length?r.push(s):t.push(s)}if(u.length){if(u.length>1)throw new Error(\"Pattern error: Using `...P.array(...)` several times in a single pattern is not allowed.\");if(s.length<t.length+r.length)return!1;const e=s.slice(0,t.length),n=0===r.length?[]:s.slice(-r.length),i=s.slice(t.length,0===r.length?Infinity:-r.length);return t.every((t,n)=>o(t,e[n],c))&&r.every((t,e)=>o(t,n[e],c))&&(0===u.length||o(u[0],i,c))}return n.length===s.length&&n.every((t,e)=>o(t,s[e],c))}return Reflect.ownKeys(n).every(e=>{const r=n[e];return(e in s||i(u=r)&&\"optional\"===u[t]().matcherType)&&o(r,s[e],c);var u})}return Object.is(s,n)},s=e=>{var n,o,u;return r(e)?i(e)?null!=(n=null==(o=(u=e[t]()).getSelectionKeys)?void 0:o.call(u))?n:[]:Array.isArray(e)?c(e,s):c(Object.values(e),s):[]},c=(t,e)=>t.reduce((t,n)=>t.concat(e(n)),[]);function u(...t){if(1===t.length){const[e]=t;return t=>o(e,t,()=>{})}if(2===t.length){const[e,n]=t;return o(e,n,()=>{})}throw new Error(`isMatching wasn't given the right number of arguments: expected 1 or 2, received ${t.length}.`)}function a(t){return Object.assign(t,{optional:()=>h(t),and:e=>d(t,e),or:e=>y(t,e),select:e=>void 0===e?v(t):v(e,t)})}function l(t){return Object.assign((t=>Object.assign(t,{[Symbol.iterator](){let n=0;const r=[{value:Object.assign(t,{[e]:!0}),done:!1},{done:!0,value:void 0}];return{next:()=>{var t;return null!=(t=r[n++])?t:r.at(-1)}}}}))(t),{optional:()=>l(h(t)),select:e=>l(void 0===e?v(t):v(e,t))})}function h(e){return a({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return void 0===t?(s(e).forEach(t=>r(t,void 0)),{matched:!0,selections:n}):{matched:o(e,t,r),selections:n}},getSelectionKeys:()=>s(e),matcherType:\"optional\"})})}const f=(t,e)=>{for(const n of t)if(!e(n))return!1;return!0},g=(t,e)=>{for(const[n,r]of t.entries())if(!e(r,n))return!1;return!0},m=(t,e)=>{const n=Reflect.ownKeys(t);for(const r of n)if(!e(r,t[r]))return!1;return!0};function d(...e){return a({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return{matched:e.every(e=>o(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,s),matcherType:\"and\"})})}function y(...e){return a({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return c(e,s).forEach(t=>r(t,void 0)),{matched:e.some(e=>o(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,s),matcherType:\"or\"})})}function p(e){return{[t]:()=>({match:t=>({matched:Boolean(e(t))})})}}function v(...e){const r=\"string\"==typeof e[0]?e[0]:void 0,i=2===e.length?e[1]:\"string\"==typeof e[0]?void 0:e[0];return a({[t]:()=>({match:t=>{let e={[null!=r?r:n]:t};return{matched:void 0===i||o(i,t,(t,n)=>{e[t]=n}),selections:e}},getSelectionKeys:()=>[null!=r?r:n].concat(void 0===i?[]:s(i))})})}function b(t){return!0}function w(t){return\"number\"==typeof t}function S(t){return\"string\"==typeof t}function j(t){return\"bigint\"==typeof t}const K=a(p(b)),O=a(p(b)),E=K,x=t=>Object.assign(a(t),{startsWith:e=>{return x(d(t,(n=e,p(t=>S(t)&&t.startsWith(n)))));var n},endsWith:e=>{return x(d(t,(n=e,p(t=>S(t)&&t.endsWith(n)))));var n},minLength:e=>x(d(t,(t=>p(e=>S(e)&&e.length>=t))(e))),length:e=>x(d(t,(t=>p(e=>S(e)&&e.length===t))(e))),maxLength:e=>x(d(t,(t=>p(e=>S(e)&&e.length<=t))(e))),includes:e=>{return x(d(t,(n=e,p(t=>S(t)&&t.includes(n)))));var n},regex:e=>{return x(d(t,(n=e,p(t=>S(t)&&Boolean(t.match(n))))));var n}}),A=x(p(S)),N=t=>Object.assign(a(t),{between:(e,n)=>N(d(t,((t,e)=>p(n=>w(n)&&t<=n&&e>=n))(e,n))),lt:e=>N(d(t,(t=>p(e=>w(e)&&e<t))(e))),gt:e=>N(d(t,(t=>p(e=>w(e)&&e>t))(e))),lte:e=>N(d(t,(t=>p(e=>w(e)&&e<=t))(e))),gte:e=>N(d(t,(t=>p(e=>w(e)&&e>=t))(e))),int:()=>N(d(t,p(t=>w(t)&&Number.isInteger(t)))),finite:()=>N(d(t,p(t=>w(t)&&Number.isFinite(t)))),positive:()=>N(d(t,p(t=>w(t)&&t>0))),negative:()=>N(d(t,p(t=>w(t)&&t<0)))}),P=N(p(w)),k=t=>Object.assign(a(t),{between:(e,n)=>k(d(t,((t,e)=>p(n=>j(n)&&t<=n&&e>=n))(e,n))),lt:e=>k(d(t,(t=>p(e=>j(e)&&e<t))(e))),gt:e=>k(d(t,(t=>p(e=>j(e)&&e>t))(e))),lte:e=>k(d(t,(t=>p(e=>j(e)&&e<=t))(e))),gte:e=>k(d(t,(t=>p(e=>j(e)&&e>=t))(e))),positive:()=>k(d(t,p(t=>j(t)&&t>0))),negative:()=>k(d(t,p(t=>j(t)&&t<0)))}),T=k(p(j)),B=a(p(function(t){return\"boolean\"==typeof t})),_=a(p(function(t){return\"symbol\"==typeof t})),W=a(p(function(t){return null==t})),$=a(p(function(t){return null!=t}));var z={__proto__:null,matcher:t,optional:h,array:function(...e){return l({[t]:()=>({match:t=>{if(!Array.isArray(t))return{matched:!1};if(0===e.length)return{matched:!0};const n=e[0];let r={};if(0===t.length)return s(n).forEach(t=>{r[t]=[]}),{matched:!0,selections:r};const i=(t,e)=>{r[t]=(r[t]||[]).concat([e])};return{matched:t.every(t=>o(n,t,i)),selections:r}},getSelectionKeys:()=>0===e.length?[]:s(e[0])})})},set:function(...e){return a({[t]:()=>({match:t=>{if(!(t instanceof Set))return{matched:!1};let n={};if(0===t.size)return{matched:!0,selections:n};if(0===e.length)return{matched:!0};const r=(t,e)=>{n[t]=(n[t]||[]).concat([e])},i=e[0];return{matched:f(t,t=>o(i,t,r)),selections:n}},getSelectionKeys:()=>0===e.length?[]:s(e[0])})})},map:function(...e){return a({[t]:()=>({match:t=>{if(!(t instanceof Map))return{matched:!1};let n={};if(0===t.size)return{matched:!0,selections:n};const r=(t,e)=>{n[t]=(n[t]||[]).concat([e])};if(0===e.length)return{matched:!0};var i;if(1===e.length)throw new Error(`\\`P.map\\` wasn't given enough arguments. Expected (key, value), received ${null==(i=e[0])?void 0:i.toString()}`);const[s,c]=e;return{matched:g(t,(t,e)=>{const n=o(s,e,r),i=o(c,t,r);return n&&i}),selections:n}},getSelectionKeys:()=>0===e.length?[]:[...s(e[0]),...s(e[1])]})})},record:function(...e){return a({[t]:()=>({match:t=>{if(null===t||\"object\"!=typeof t||Array.isArray(t))return{matched:!1};var n;if(0===e.length)throw new Error(`\\`P.record\\` wasn't given enough arguments. Expected (value) or (key, value), received ${null==(n=e[0])?void 0:n.toString()}`);let r={};const i=(t,e)=>{r[t]=(r[t]||[]).concat([e])},[s,c]=1===e.length?[A,e[0]]:e;return{matched:m(t,(t,e)=>{const n=\"string\"!=typeof t||Number.isNaN(Number(t))?null:Number(t),r=null!==n&&o(s,n,i),u=o(s,t,i),a=o(c,e,i);return(u||r)&&a}),selections:r}},getSelectionKeys:()=>0===e.length?[]:[...s(e[0]),...s(e[1])]})})},intersection:d,union:y,not:function(e){return a({[t]:()=>({match:t=>({matched:!o(e,t,()=>{})}),getSelectionKeys:()=>[],matcherType:\"not\"})})},when:p,select:v,any:K,unknown:O,_:E,string:A,number:P,bigint:T,boolean:B,symbol:_,nullish:W,nonNullable:$,instanceOf:function(t){return a(p(function(t){return e=>e instanceof t}(t)))},shape:function(t){return a(p(u(t)))}};class I extends Error{constructor(t){let e;try{e=JSON.stringify(t)}catch(n){e=t}super(`Pattern matching error: no pattern matches value ${e}`),this.input=void 0,this.input=t}}const L={matched:!1,value:void 0};function M(t){return new R(t,L)}class R{constructor(t,e){this.input=void 0,this.state=void 0,this.input=t,this.state=e}with(...t){if(this.state.matched)return this;const e=t[t.length-1],r=[t[0]];let i;3===t.length&&\"function\"==typeof t[1]?i=t[1]:t.length>2&&r.push(...t.slice(1,t.length-1));let s=!1,c={};const u=(t,e)=>{s=!0,c[t]=e},a=!r.some(t=>o(t,this.input,u))||i&&!Boolean(i(this.input))?L:{matched:!0,value:e(s?n in c?c[n]:c:this.input,this.input)};return new R(this.input,a)}when(t,e){if(this.state.matched)return this;const n=Boolean(t(this.input));return new R(this.input,n?{matched:!0,value:e(this.input,this.input)}:L)}otherwise(t){return this.state.matched?this.state.value:t(this.input)}exhaustive(t=F){return this.state.matched?this.state.value:t(this.input)}run(){return this.exhaustive()}returnType(){return this}narrow(){return this}}function F(t){throw new I(t)}export{I as NonExhaustiveError,z as P,z as Pattern,u as isMatching,M as match};\n//# sourceMappingURL=index.js.map\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","/*\nHow it works:\n`this.#head` is an instance of `Node` which keeps track of its current value and nests another instance of `Node` that keeps the value that comes after it. When a value is provided to `.enqueue()`, the code needs to iterate through `this.#head`, going deeper and deeper to find the last value. However, iterating through every single item is slow. This problem is solved by saving a reference to the last value as `this.#tail` so that it can reference it to add a new value.\n*/\n\nclass Node {\n\tvalue;\n\tnext;\n\n\tconstructor(value) {\n\t\tthis.value = value;\n\t}\n}\n\nexport default class Queue {\n\t#head;\n\t#tail;\n\t#size;\n\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\n\tenqueue(value) {\n\t\tconst node = new Node(value);\n\n\t\tif (this.#head) {\n\t\t\tthis.#tail.next = node;\n\t\t\tthis.#tail = node;\n\t\t} else {\n\t\t\tthis.#head = node;\n\t\t\tthis.#tail = node;\n\t\t}\n\n\t\tthis.#size++;\n\t}\n\n\tdequeue() {\n\t\tconst current = this.#head;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#head = this.#head.next;\n\t\tthis.#size--;\n\n\t\t// Clean up tail reference when queue becomes empty\n\t\tif (!this.#head) {\n\t\t\tthis.#tail = undefined;\n\t\t}\n\n\t\treturn current.value;\n\t}\n\n\tpeek() {\n\t\tif (!this.#head) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.#head.value;\n\n\t\t// TODO: Node.js 18.\n\t\t// return this.#head?.value;\n\t}\n\n\tclear() {\n\t\tthis.#head = undefined;\n\t\tthis.#tail = undefined;\n\t\tthis.#size = 0;\n\t}\n\n\tget size() {\n\t\treturn this.#size;\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tlet current = this.#head;\n\n\t\twhile (current) {\n\t\t\tyield current.value;\n\t\t\tcurrent = current.next;\n\t\t}\n\t}\n\n\t* drain() {\n\t\twhile (this.#head) {\n\t\t\tyield this.dequeue();\n\t\t}\n\t}\n}\n","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tvalidateConcurrency(concurrency);\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst resumeNext = () => {\n\t\t// Process the next queued function if we're under the concurrency limit\n\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\tactiveCount++;\n\t\t\tqueue.dequeue()();\n\t\t}\n\t};\n\n\tconst next = () => {\n\t\tactiveCount--;\n\t\tresumeNext();\n\t};\n\n\tconst run = async (function_, resolve, arguments_) => {\n\t\t// Execute the function and capture the result promise\n\t\tconst result = (async () => function_(...arguments_))();\n\n\t\t// Resolve immediately with the promise (don't wait for completion)\n\t\tresolve(result);\n\n\t\t// Wait for the function to complete (success or failure)\n\t\t// We catch errors here to prevent unhandled rejections,\n\t\t// but the original promise rejection is preserved for the caller\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\t// Decrement active count and process next queued function\n\t\tnext();\n\t};\n\n\tconst enqueue = (function_, resolve, arguments_) => {\n\t\t// Queue the internal resolve function instead of the run function\n\t\t// to preserve the asynchronous execution context.\n\t\tnew Promise(internalResolve => { // eslint-disable-line promise/param-names\n\t\t\tqueue.enqueue(internalResolve);\n\t\t}).then(run.bind(undefined, function_, resolve, arguments_)); // eslint-disable-line promise/prefer-await-to-then\n\n\t\t// Start processing immediately if we haven't reached the concurrency limit\n\t\tif (activeCount < concurrency) {\n\t\t\tresumeNext();\n\t\t}\n\t};\n\n\tconst generator = (function_, ...arguments_) => new Promise(resolve => {\n\t\tenqueue(function_, resolve, arguments_);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue() {\n\t\t\t\tqueue.clear();\n\t\t\t},\n\t\t},\n\t\tconcurrency: {\n\t\t\tget: () => concurrency,\n\n\t\t\tset(newConcurrency) {\n\t\t\t\tvalidateConcurrency(newConcurrency);\n\t\t\t\tconcurrency = newConcurrency;\n\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\t// eslint-disable-next-line no-unmodified-loop-condition\n\t\t\t\t\twhile (activeCount < concurrency && queue.size > 0) {\n\t\t\t\t\t\tresumeNext();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t\tmap: {\n\t\t\tasync value(iterable, function_) {\n\t\t\t\tconst promises = Array.from(iterable, (value, index) => this(function_, value, index));\n\t\t\t\treturn Promise.all(promises);\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n\nexport function limitFunction(function_, options) {\n\tconst {concurrency} = options;\n\tconst limit = pLimit(concurrency);\n\n\treturn (...arguments_) => limit(() => function_(...arguments_));\n}\n\nfunction validateConcurrency(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n}\n","'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","//#region src/storages/globalConfig/globalConfig.ts\nlet store$4;\n/**\n* Sets the global configuration.\n*\n* @param config The configuration.\n*/\nfunction setGlobalConfig(config$1) {\n\tstore$4 = {\n\t\t...store$4,\n\t\t...config$1\n\t};\n}\n/**\n* Returns the global configuration.\n*\n* @param config The config to merge.\n*\n* @returns The configuration.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getGlobalConfig(config$1) {\n\treturn {\n\t\tlang: config$1?.lang ?? store$4?.lang,\n\t\tmessage: config$1?.message,\n\t\tabortEarly: config$1?.abortEarly ?? store$4?.abortEarly,\n\t\tabortPipeEarly: config$1?.abortPipeEarly ?? store$4?.abortPipeEarly\n\t};\n}\n/**\n* Deletes the global configuration.\n*/\nfunction deleteGlobalConfig() {\n\tstore$4 = void 0;\n}\n\n//#endregion\n//#region src/storages/globalMessage/globalMessage.ts\nlet store$3;\n/**\n* Sets a global error message.\n*\n* @param message The error message.\n* @param lang The language of the message.\n*/\nfunction setGlobalMessage(message$1, lang) {\n\tif (!store$3) store$3 = /* @__PURE__ */ new Map();\n\tstore$3.set(lang, message$1);\n}\n/**\n* Returns a global error message.\n*\n* @param lang The language of the message.\n*\n* @returns The error message.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getGlobalMessage(lang) {\n\treturn store$3?.get(lang);\n}\n/**\n* Deletes a global error message.\n*\n* @param lang The language of the message.\n*/\nfunction deleteGlobalMessage(lang) {\n\tstore$3?.delete(lang);\n}\n\n//#endregion\n//#region src/storages/schemaMessage/schemaMessage.ts\nlet store$2;\n/**\n* Sets a schema error message.\n*\n* @param message The error message.\n* @param lang The language of the message.\n*/\nfunction setSchemaMessage(message$1, lang) {\n\tif (!store$2) store$2 = /* @__PURE__ */ new Map();\n\tstore$2.set(lang, message$1);\n}\n/**\n* Returns a schema error message.\n*\n* @param lang The language of the message.\n*\n* @returns The error message.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getSchemaMessage(lang) {\n\treturn store$2?.get(lang);\n}\n/**\n* Deletes a schema error message.\n*\n* @param lang The language of the message.\n*/\nfunction deleteSchemaMessage(lang) {\n\tstore$2?.delete(lang);\n}\n\n//#endregion\n//#region src/storages/specificMessage/specificMessage.ts\nlet store$1;\n/**\n* Sets a specific error message.\n*\n* @param reference The identifier reference.\n* @param message The error message.\n* @param lang The language of the message.\n*/\nfunction setSpecificMessage(reference, message$1, lang) {\n\tif (!store$1) store$1 = /* @__PURE__ */ new Map();\n\tif (!store$1.get(reference)) store$1.set(reference, /* @__PURE__ */ new Map());\n\tstore$1.get(reference).set(lang, message$1);\n}\n/**\n* Returns a specific error message.\n*\n* @param reference The identifier reference.\n* @param lang The language of the message.\n*\n* @returns The error message.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getSpecificMessage(reference, lang) {\n\treturn store$1?.get(reference)?.get(lang);\n}\n/**\n* Deletes a specific error message.\n*\n* @param reference The identifier reference.\n* @param lang The language of the message.\n*/\nfunction deleteSpecificMessage(reference, lang) {\n\tstore$1?.get(reference)?.delete(lang);\n}\n\n//#endregion\n//#region src/utils/_stringify/_stringify.ts\n/**\n* Stringifies an unknown input to a literal or type string.\n*\n* @param input The unknown input.\n*\n* @returns A literal or type string.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _stringify(input) {\n\tconst type = typeof input;\n\tif (type === \"string\") return `\"${input}\"`;\n\tif (type === \"number\" || type === \"bigint\" || type === \"boolean\") return `${input}`;\n\tif (type === \"object\" || type === \"function\") return (input && Object.getPrototypeOf(input)?.constructor?.name) ?? \"null\";\n\treturn type;\n}\n\n//#endregion\n//#region src/utils/_addIssue/_addIssue.ts\n/**\n* Adds an issue to the dataset.\n*\n* @param context The issue context.\n* @param label The issue label.\n* @param dataset The input dataset.\n* @param config The configuration.\n* @param other The optional props.\n*\n* @internal\n*/\nfunction _addIssue(context, label, dataset, config$1, other) {\n\tconst input = other && \"input\" in other ? other.input : dataset.value;\n\tconst expected = other?.expected ?? context.expects ?? null;\n\tconst received = other?.received ?? /* @__PURE__ */ _stringify(input);\n\tconst issue = {\n\t\tkind: context.kind,\n\t\ttype: context.type,\n\t\tinput,\n\t\texpected,\n\t\treceived,\n\t\tmessage: `Invalid ${label}: ${expected ? `Expected ${expected} but r` : \"R\"}eceived ${received}`,\n\t\trequirement: context.requirement,\n\t\tpath: other?.path,\n\t\tissues: other?.issues,\n\t\tlang: config$1.lang,\n\t\tabortEarly: config$1.abortEarly,\n\t\tabortPipeEarly: config$1.abortPipeEarly\n\t};\n\tconst isSchema = context.kind === \"schema\";\n\tconst message$1 = other?.message ?? context.message ?? /* @__PURE__ */ getSpecificMessage(context.reference, issue.lang) ?? (isSchema ? /* @__PURE__ */ getSchemaMessage(issue.lang) : null) ?? config$1.message ?? /* @__PURE__ */ getGlobalMessage(issue.lang);\n\tif (message$1 !== void 0) issue.message = typeof message$1 === \"function\" ? message$1(issue) : message$1;\n\tif (isSchema) dataset.typed = false;\n\tif (dataset.issues) dataset.issues.push(issue);\n\telse dataset.issues = [issue];\n}\n\n//#endregion\n//#region src/utils/_getByteCount/_getByteCount.ts\nlet textEncoder;\n/**\n* Returns the byte count of the input.\n*\n* @param input The input to be measured.\n*\n* @returns The byte count.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _getByteCount(input) {\n\tif (!textEncoder) textEncoder = new TextEncoder();\n\treturn textEncoder.encode(input).length;\n}\n\n//#endregion\n//#region src/utils/_getGraphemeCount/_getGraphemeCount.ts\nlet segmenter;\n/**\n* Returns the grapheme count of the input.\n*\n* @param input The input to be measured.\n*\n* @returns The grapheme count.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _getGraphemeCount(input) {\n\tif (!segmenter) segmenter = new Intl.Segmenter();\n\tconst segments = segmenter.segment(input);\n\tlet count = 0;\n\tfor (const _ of segments) count++;\n\treturn count;\n}\n\n//#endregion\n//#region src/utils/_getLastMetadata/_getLastMetadata.ts\n/**\n* Returns the last top-level value of a given metadata type from a schema\n* using a breadth-first search that starts with the last item in the pipeline.\n*\n* @param schema The schema to search.\n* @param type The metadata type.\n*\n* @returns The value, if any.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _getLastMetadata(schema, type) {\n\tif (\"pipe\" in schema) {\n\t\tconst nestedSchemas = [];\n\t\tfor (let index = schema.pipe.length - 1; index >= 0; index--) {\n\t\t\tconst item = schema.pipe[index];\n\t\t\tif (item.kind === \"schema\" && \"pipe\" in item) nestedSchemas.push(item);\n\t\t\telse if (item.kind === \"metadata\" && item.type === type) return item[type];\n\t\t}\n\t\tfor (const nestedSchema of nestedSchemas) {\n\t\t\tconst result = /* @__PURE__ */ _getLastMetadata(nestedSchema, type);\n\t\t\tif (result !== void 0) return result;\n\t\t}\n\t}\n}\n\n//#endregion\n//#region src/utils/_getStandardProps/_getStandardProps.ts\n/**\n* Returns the Standard Schema properties.\n*\n* @param context The schema context.\n*\n* @returns The Standard Schema properties.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _getStandardProps(context) {\n\treturn {\n\t\tversion: 1,\n\t\tvendor: \"valibot\",\n\t\tvalidate(value$1) {\n\t\t\treturn context[\"~run\"]({ value: value$1 }, /* @__PURE__ */ getGlobalConfig());\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/utils/_getWordCount/_getWordCount.ts\nlet store;\n/**\n* Returns the word count of the input.\n*\n* @param locales The locales to be used.\n* @param input The input to be measured.\n*\n* @returns The word count.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _getWordCount(locales, input) {\n\tif (!store) store = /* @__PURE__ */ new Map();\n\tif (!store.get(locales)) store.set(locales, new Intl.Segmenter(locales, { granularity: \"word\" }));\n\tconst segments = store.get(locales).segment(input);\n\tlet count = 0;\n\tfor (const segment of segments) if (segment.isWordLike) count++;\n\treturn count;\n}\n\n//#endregion\n//#region src/utils/_isLuhnAlgo/_isLuhnAlgo.ts\n/**\n* Non-digit regex.\n*/\nconst NON_DIGIT_REGEX = /\\D/gu;\n/**\n* Checks whether a string with numbers corresponds to the luhn algorithm.\n*\n* @param input The input to be checked.\n*\n* @returns Whether input is valid.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _isLuhnAlgo(input) {\n\tconst number$1 = input.replace(NON_DIGIT_REGEX, \"\");\n\tlet length$1 = number$1.length;\n\tlet bit = 1;\n\tlet sum = 0;\n\twhile (length$1) {\n\t\tconst value$1 = +number$1[--length$1];\n\t\tbit ^= 1;\n\t\tsum += bit ? [\n\t\t\t0,\n\t\t\t2,\n\t\t\t4,\n\t\t\t6,\n\t\t\t8,\n\t\t\t1,\n\t\t\t3,\n\t\t\t5,\n\t\t\t7,\n\t\t\t9\n\t\t][value$1] : value$1;\n\t}\n\treturn sum % 10 === 0;\n}\n\n//#endregion\n//#region src/utils/_isValidObjectKey/_isValidObjectKey.ts\n/**\n* Disallows inherited object properties and prevents object prototype\n* pollution by disallowing certain keys.\n*\n* @param object The object to check.\n* @param key The key to check.\n*\n* @returns Whether the key is allowed.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _isValidObjectKey(object$1, key) {\n\treturn Object.hasOwn(object$1, key) && key !== \"__proto__\" && key !== \"prototype\" && key !== \"constructor\";\n}\n\n//#endregion\n//#region src/utils/_joinExpects/_joinExpects.ts\n/**\n* Joins multiple `expects` values with the given separator.\n*\n* @param values The `expects` values.\n* @param separator The separator.\n*\n* @returns The joined `expects` property.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _joinExpects(values$1, separator) {\n\tconst list = [...new Set(values$1)];\n\tif (list.length > 1) return `(${list.join(` ${separator} `)})`;\n\treturn list[0] ?? \"never\";\n}\n\n//#endregion\n//#region src/utils/entriesFromList/entriesFromList.ts\n/**\n* Creates an object entries definition from a list of keys and a schema.\n*\n* @param list A list of keys.\n* @param schema The schema of the keys.\n*\n* @returns The object entries.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction entriesFromList(list, schema) {\n\tconst entries$1 = {};\n\tfor (const key of list) entries$1[key] = schema;\n\treturn entries$1;\n}\n\n//#endregion\n//#region src/utils/entriesFromObjects/entriesFromObjects.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction entriesFromObjects(schemas) {\n\tconst entries$1 = {};\n\tfor (const schema of schemas) Object.assign(entries$1, schema.entries);\n\treturn entries$1;\n}\n\n//#endregion\n//#region src/utils/getDotPath/getDotPath.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction getDotPath(issue) {\n\tif (issue.path) {\n\t\tlet key = \"\";\n\t\tfor (const item of issue.path) if (typeof item.key === \"string\" || typeof item.key === \"number\") if (key) key += `.${item.key}`;\n\t\telse key += item.key;\n\t\telse return null;\n\t\treturn key;\n\t}\n\treturn null;\n}\n\n//#endregion\n//#region src/utils/isOfKind/isOfKind.ts\n/**\n* A generic type guard to check the kind of an object.\n*\n* @param kind The kind to check for.\n* @param object The object to check.\n*\n* @returns Whether it matches.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isOfKind(kind, object$1) {\n\treturn object$1.kind === kind;\n}\n\n//#endregion\n//#region src/utils/isOfType/isOfType.ts\n/**\n* A generic type guard to check the type of an object.\n*\n* @param type The type to check for.\n* @param object The object to check.\n*\n* @returns Whether it matches.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isOfType(type, object$1) {\n\treturn object$1.type === type;\n}\n\n//#endregion\n//#region src/utils/isValiError/isValiError.ts\n/**\n* A type guard to check if an error is a ValiError.\n*\n* @param error The error to check.\n*\n* @returns Whether its a ValiError.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isValiError(error) {\n\treturn error instanceof ValiError;\n}\n\n//#endregion\n//#region src/utils/ValiError/ValiError.ts\n/**\n* A Valibot error with useful information.\n*/\nvar ValiError = class extends Error {\n\t/**\n\t* Creates a Valibot error with useful information.\n\t*\n\t* @param issues The error issues.\n\t*/\n\tconstructor(issues) {\n\t\tsuper(issues[0].message);\n\t\tthis.name = \"ValiError\";\n\t\tthis.issues = issues;\n\t}\n};\n\n//#endregion\n//#region src/actions/args/args.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction args(schema) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"args\",\n\t\treference: args,\n\t\tasync: false,\n\t\tschema,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst func = dataset.value;\n\t\t\tdataset.value = (...args_) => {\n\t\t\t\tconst argsDataset = this.schema[\"~run\"]({ value: args_ }, config$1);\n\t\t\t\tif (argsDataset.issues) throw new ValiError(argsDataset.issues);\n\t\t\t\treturn func(...argsDataset.value);\n\t\t\t};\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/args/argsAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction argsAsync(schema) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"args\",\n\t\treference: argsAsync,\n\t\tasync: false,\n\t\tschema,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst func = dataset.value;\n\t\t\tdataset.value = async (...args$1) => {\n\t\t\t\tconst argsDataset = await schema[\"~run\"]({ value: args$1 }, config$1);\n\t\t\t\tif (argsDataset.issues) throw new ValiError(argsDataset.issues);\n\t\t\t\treturn func(...argsDataset.value);\n\t\t\t};\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/await/awaitAsync.ts\n/**\n* Creates an await transformation action.\n*\n* @returns An await action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction awaitAsync() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"await\",\n\t\treference: awaitAsync,\n\t\tasync: true,\n\t\tasync \"~run\"(dataset) {\n\t\t\tdataset.value = await dataset.value;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/regex.ts\n/**\n* [Base64](https://en.wikipedia.org/wiki/Base64) regex.\n*/\nconst BASE64_REGEX = /^(?:[\\da-z+/]{4})*(?:[\\da-z+/]{2}==|[\\da-z+/]{3}=)?$/iu;\n/**\n* [BIC](https://en.wikipedia.org/wiki/ISO_9362) regex.\n*/\nconst BIC_REGEX = /^[A-Z]{6}(?!00)[\\dA-Z]{2}(?:[\\dA-Z]{3})?$/u;\n/**\n* [Cuid2](https://github.com/paralleldrive/cuid2) regex.\n*/\nconst CUID2_REGEX = /^[a-z][\\da-z]*$/u;\n/**\n* [Decimal](https://en.wikipedia.org/wiki/Decimal) regex.\n*/\nconst DECIMAL_REGEX = /^[+-]?(?:\\d*\\.)?\\d+$/u;\n/**\n* [Digits](https://en.wikipedia.org/wiki/Numerical_digit) regex.\n*/\nconst DIGITS_REGEX = /^\\d+$/u;\n/**\n* [Email address](https://en.wikipedia.org/wiki/Email_address) regex.\n*/\nconst EMAIL_REGEX = /^[\\w+-]+(?:\\.[\\w+-]+)*@[\\da-z]+(?:[.-][\\da-z]+)*\\.[a-z]{2,}$/iu;\n/**\n* Emoji regex from [emoji-regex-xs](https://github.com/slevithan/emoji-regex-xs) v1.0.0 (MIT license).\n*\n* Hint: We decided against the newer `/^\\p{RGI_Emoji}+$/v` regex because it is\n* not supported in older runtimes and does not match all emoji.\n*/\nconst EMOJI_REGEX = /^(?:[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|(?![\\p{Emoji_Modifier_Base}\\u{1F1E6}-\\u{1F1FF}])\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|(?![\\p{Emoji_Modifier_Base}\\u{1F1E6}-\\u{1F1FF}])\\p{Emoji_Presentation}))*)+$/u;\n/**\n* [Hexadecimal](https://en.wikipedia.org/wiki/Hexadecimal) regex.\n*\n* Hint: We decided against the `i` flag for better JSON Schema compatibility.\n*/\nconst HEXADECIMAL_REGEX = /^(?:0[hx])?[\\da-fA-F]+$/u;\n/**\n* [Hex color](https://en.wikipedia.org/wiki/Web_colors#Hex_triplet) regex.\n*\n* Hint: We decided against the `i` flag for better JSON Schema compatibility.\n*/\nconst HEX_COLOR_REGEX = /^#(?:[\\da-fA-F]{3,4}|[\\da-fA-F]{6}|[\\da-fA-F]{8})$/u;\n/**\n* [IMEI](https://en.wikipedia.org/wiki/International_Mobile_Equipment_Identity) regex.\n*/\nconst IMEI_REGEX = /^\\d{15}$|^\\d{2}-\\d{6}-\\d{6}-\\d$/u;\n/**\n* [IPv4](https://en.wikipedia.org/wiki/IPv4) regex.\n*/\nconst IPV4_REGEX = /^(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])(?:\\.(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])){3}$/u;\n/**\n* [IPv6](https://en.wikipedia.org/wiki/IPv6) regex.\n*/\nconst IPV6_REGEX = /^(?:(?:[\\da-f]{1,4}:){7}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,7}:|(?:[\\da-f]{1,4}:){1,6}:[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,5}(?::[\\da-f]{1,4}){1,2}|(?:[\\da-f]{1,4}:){1,4}(?::[\\da-f]{1,4}){1,3}|(?:[\\da-f]{1,4}:){1,3}(?::[\\da-f]{1,4}){1,4}|(?:[\\da-f]{1,4}:){1,2}(?::[\\da-f]{1,4}){1,5}|[\\da-f]{1,4}:(?::[\\da-f]{1,4}){1,6}|:(?:(?::[\\da-f]{1,4}){1,7}|:)|fe80:(?::[\\da-f]{0,4}){0,4}%[\\da-z]+|::(?:f{4}(?::0{1,4})?:)?(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)|(?:[\\da-f]{1,4}:){1,4}:(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d))$/iu;\n/**\n* [IP](https://en.wikipedia.org/wiki/IP_address) regex.\n*/\nconst IP_REGEX = /^(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])(?:\\.(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])){3}$|^(?:(?:[\\da-f]{1,4}:){7}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,7}:|(?:[\\da-f]{1,4}:){1,6}:[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,5}(?::[\\da-f]{1,4}){1,2}|(?:[\\da-f]{1,4}:){1,4}(?::[\\da-f]{1,4}){1,3}|(?:[\\da-f]{1,4}:){1,3}(?::[\\da-f]{1,4}){1,4}|(?:[\\da-f]{1,4}:){1,2}(?::[\\da-f]{1,4}){1,5}|[\\da-f]{1,4}:(?::[\\da-f]{1,4}){1,6}|:(?:(?::[\\da-f]{1,4}){1,7}|:)|fe80:(?::[\\da-f]{0,4}){0,4}%[\\da-z]+|::(?:f{4}(?::0{1,4})?:)?(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)|(?:[\\da-f]{1,4}:){1,4}:(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d))$/iu;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date regex.\n*/\nconst ISO_DATE_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])$/u;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time regex.\n*/\nconst ISO_DATE_TIME_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])[T ](?:0\\d|1\\d|2[0-3]):[0-5]\\d$/u;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) time regex.\n*/\nconst ISO_TIME_REGEX = /^(?:0\\d|1\\d|2[0-3]):[0-5]\\d$/u;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) time with seconds regex.\n*/\nconst ISO_TIME_SECOND_REGEX = /^(?:0\\d|1\\d|2[0-3])(?::[0-5]\\d){2}$/u;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) timestamp regex.\n*/\nconst ISO_TIMESTAMP_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])[T ](?:0\\d|1\\d|2[0-3])(?::[0-5]\\d){2}(?:\\.\\d{1,9})?(?:Z|[+-](?:0\\d|1\\d|2[0-3])(?::?[0-5]\\d)?)$/u;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) week regex.\n*/\nconst ISO_WEEK_REGEX = /^\\d{4}-W(?:0[1-9]|[1-4]\\d|5[0-3])$/u;\n/**\n* [MAC](https://en.wikipedia.org/wiki/MAC_address) 48 bit regex.\n*/\nconst MAC48_REGEX = /^(?:[\\da-f]{2}:){5}[\\da-f]{2}$|^(?:[\\da-f]{2}-){5}[\\da-f]{2}$|^(?:[\\da-f]{4}\\.){2}[\\da-f]{4}$/iu;\n/**\n* [MAC](https://en.wikipedia.org/wiki/MAC_address) 64 bit regex.\n*/\nconst MAC64_REGEX = /^(?:[\\da-f]{2}:){7}[\\da-f]{2}$|^(?:[\\da-f]{2}-){7}[\\da-f]{2}$|^(?:[\\da-f]{4}\\.){3}[\\da-f]{4}$|^(?:[\\da-f]{4}:){3}[\\da-f]{4}$/iu;\n/**\n* [MAC](https://en.wikipedia.org/wiki/MAC_address) regex.\n*/\nconst MAC_REGEX = /^(?:[\\da-f]{2}:){5}[\\da-f]{2}$|^(?:[\\da-f]{2}-){5}[\\da-f]{2}$|^(?:[\\da-f]{4}\\.){2}[\\da-f]{4}$|^(?:[\\da-f]{2}:){7}[\\da-f]{2}$|^(?:[\\da-f]{2}-){7}[\\da-f]{2}$|^(?:[\\da-f]{4}\\.){3}[\\da-f]{4}$|^(?:[\\da-f]{4}:){3}[\\da-f]{4}$/iu;\n/**\n* [Nano ID](https://github.com/ai/nanoid) regex.\n*/\nconst NANO_ID_REGEX = /^[\\w-]+$/u;\n/**\n* [Octal](https://en.wikipedia.org/wiki/Octal) regex.\n*/\nconst OCTAL_REGEX = /^(?:0o)?[0-7]+$/u;\n/**\n* [RFC 5322 email address](https://datatracker.ietf.org/doc/html/rfc5322#section-3.4.1) regex.\n*\n* Hint: This regex was taken from the [HTML Living Standard Specification](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address) and does not perfectly represent RFC 5322.\n*/\nconst RFC_EMAIL_REGEX = /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/**\n* [Slug](https://en.wikipedia.org/wiki/Clean_URL#Slug) regex.\n*/\nconst SLUG_REGEX = /^[\\da-z]+(?:[-_][\\da-z]+)*$/u;\n/**\n* [ULID](https://github.com/ulid/spec) regex.\n*\n* Hint: We decided against the `i` flag for better JSON Schema compatibility.\n*/\nconst ULID_REGEX = /^[\\da-hjkmnp-tv-zA-HJKMNP-TV-Z]{26}$/u;\n/**\n* [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier) regex.\n*/\nconst UUID_REGEX = /^[\\da-f]{8}(?:-[\\da-f]{4}){3}-[\\da-f]{12}$/iu;\n\n//#endregion\n//#region src/actions/base64/base64.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction base64(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"base64\",\n\t\treference: base64,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: BASE64_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"Base64\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/bic/bic.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction bic(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"bic\",\n\t\treference: bic,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: BIC_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"BIC\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/brand/brand.ts\n/**\n* Creates a brand transformation action.\n*\n* @param name The brand name.\n*\n* @returns A brand action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction brand(name) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"brand\",\n\t\treference: brand,\n\t\tasync: false,\n\t\tname,\n\t\t\"~run\"(dataset) {\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/bytes/bytes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction bytes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"bytes\",\n\t\treference: bytes,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst length$1 = /* @__PURE__ */ _getByteCount(dataset.value);\n\t\t\t\tif (length$1 !== this.requirement) _addIssue(this, \"bytes\", dataset, config$1, { received: `${length$1}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/check/check.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction check(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"check\",\n\t\treference: check,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"input\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/check/checkAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction checkAsync(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"check\",\n\t\treference: checkAsync,\n\t\tasync: true,\n\t\texpects: null,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !await this.requirement(dataset.value)) _addIssue(this, \"input\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/checkItems/checkItems.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction checkItems(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"check_items\",\n\t\treference: checkItems,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) for (let index = 0; index < dataset.value.length; index++) {\n\t\t\t\tconst item = dataset.value[index];\n\t\t\t\tif (!this.requirement(item, index, dataset.value)) _addIssue(this, \"item\", dataset, config$1, {\n\t\t\t\t\tinput: item,\n\t\t\t\t\tpath: [{\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\tinput: dataset.value,\n\t\t\t\t\t\tkey: index,\n\t\t\t\t\t\tvalue: item\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/checkItems/checkItemsAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction checkItemsAsync(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"check_items\",\n\t\treference: checkItemsAsync,\n\t\tasync: true,\n\t\texpects: null,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst requirementResults = await Promise.all(dataset.value.map(this.requirement));\n\t\t\t\tfor (let index = 0; index < dataset.value.length; index++) if (!requirementResults[index]) {\n\t\t\t\t\tconst item = dataset.value[index];\n\t\t\t\t\t_addIssue(this, \"item\", dataset, config$1, {\n\t\t\t\t\t\tinput: item,\n\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput: dataset.value,\n\t\t\t\t\t\t\tkey: index,\n\t\t\t\t\t\t\tvalue: item\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/creditCard/creditCard.ts\n/**\n* Credit card regex.\n*/\nconst CREDIT_CARD_REGEX = /^(?:\\d{14,19}|\\d{4}(?: \\d{3,6}){2,4}|\\d{4}(?:-\\d{3,6}){2,4})$/u;\n/**\n* Sanitize regex.\n*/\nconst SANITIZE_REGEX = /[- ]/gu;\n/**\n* Provider regex list.\n*/\nconst PROVIDER_REGEX_LIST = [\n\t/^3[47]\\d{13}$/u,\n\t/^3(?:0[0-5]|[68]\\d)\\d{11,13}$/u,\n\t/^6(?:011|5\\d{2})\\d{12,15}$/u,\n\t/^(?:2131|1800|35\\d{3})\\d{11}$/u,\n\t/^5[1-5]\\d{2}|(?:222\\d|22[3-9]\\d|2[3-6]\\d{2}|27[01]\\d|2720)\\d{12}$/u,\n\t/^(?:6[27]\\d{14,17}|81\\d{14,17})$/u,\n\t/^4\\d{12}(?:\\d{3,6})?$/u\n];\n/* @__NO_SIDE_EFFECTS__ */\nfunction creditCard(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"credit_card\",\n\t\treference: creditCard,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement(input) {\n\t\t\tlet sanitized;\n\t\t\treturn CREDIT_CARD_REGEX.test(input) && (sanitized = input.replace(SANITIZE_REGEX, \"\")) && PROVIDER_REGEX_LIST.some((regex$1) => regex$1.test(sanitized)) && /* @__PURE__ */ _isLuhnAlgo(sanitized);\n\t\t},\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"credit card\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/cuid2/cuid2.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction cuid2(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"cuid2\",\n\t\treference: cuid2,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: CUID2_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"Cuid2\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/decimal/decimal.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction decimal(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"decimal\",\n\t\treference: decimal,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: DECIMAL_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"decimal\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/description/description.ts\n/**\n* Creates a description metadata action.\n*\n* @param description_ The description text.\n*\n* @returns A description action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction description(description_) {\n\treturn {\n\t\tkind: \"metadata\",\n\t\ttype: \"description\",\n\t\treference: description,\n\t\tdescription: description_\n\t};\n}\n\n//#endregion\n//#region src/actions/digits/digits.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction digits(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"digits\",\n\t\treference: digits,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: DIGITS_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"digits\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/email/email.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction email(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"email\",\n\t\treference: email,\n\t\texpects: null,\n\t\tasync: false,\n\t\trequirement: EMAIL_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"email\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/emoji/emoji.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction emoji(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"emoji\",\n\t\treference: emoji,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: EMOJI_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"emoji\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/empty/empty.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction empty(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"empty\",\n\t\treference: empty,\n\t\tasync: false,\n\t\texpects: \"0\",\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.length > 0) _addIssue(this, \"length\", dataset, config$1, { received: `${dataset.value.length}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/endsWith/endsWith.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction endsWith(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"ends_with\",\n\t\treference: endsWith,\n\t\tasync: false,\n\t\texpects: `\"${requirement}\"`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !dataset.value.endsWith(this.requirement)) _addIssue(this, \"end\", dataset, config$1, { received: `\"${dataset.value.slice(-this.requirement.length)}\"` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/entries/entries.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction entries(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"entries\",\n\t\treference: entries,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (!dataset.typed) return dataset;\n\t\t\tconst count = Object.keys(dataset.value).length;\n\t\t\tif (dataset.typed && count !== this.requirement) _addIssue(this, \"entries\", dataset, config$1, { received: `${count}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/everyItem/everyItem.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction everyItem(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"every_item\",\n\t\treference: everyItem,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !dataset.value.every(this.requirement)) _addIssue(this, \"item\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/examples/examples.ts\n/**\n* Creates an examples metadata action.\n*\n* @param examples_ The examples.\n*\n* @returns An examples action.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction examples(examples_) {\n\treturn {\n\t\tkind: \"metadata\",\n\t\ttype: \"examples\",\n\t\treference: examples,\n\t\texamples: examples_\n\t};\n}\n\n//#endregion\n//#region src/actions/excludes/excludes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction excludes(requirement, message$1) {\n\tconst received = /* @__PURE__ */ _stringify(requirement);\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"excludes\",\n\t\treference: excludes,\n\t\tasync: false,\n\t\texpects: `!${received}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.includes(this.requirement)) _addIssue(this, \"content\", dataset, config$1, { received });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/filterItems/filterItems.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction filterItems(operation) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"filter_items\",\n\t\treference: filterItems,\n\t\tasync: false,\n\t\toperation,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.filter(this.operation);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/findItem/findItem.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction findItem(operation) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"find_item\",\n\t\treference: findItem,\n\t\tasync: false,\n\t\toperation,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.find(this.operation);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/finite/finite.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction finite(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"finite\",\n\t\treference: finite,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: Number.isFinite,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"finite\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/flavor/flavor.ts\n/**\n* Creates a flavor transformation action.\n*\n* @param name The flavor name.\n*\n* @returns A flavor action.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction flavor(name) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"flavor\",\n\t\treference: flavor,\n\t\tasync: false,\n\t\tname,\n\t\t\"~run\"(dataset) {\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/graphemes/graphemes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction graphemes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"graphemes\",\n\t\treference: graphemes,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getGraphemeCount(dataset.value);\n\t\t\t\tif (count !== this.requirement) _addIssue(this, \"graphemes\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/gtValue/gtValue.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction gtValue(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"gt_value\",\n\t\treference: gtValue,\n\t\tasync: false,\n\t\texpects: `>${requirement instanceof Date ? requirement.toJSON() : /* @__PURE__ */ _stringify(requirement)}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !(dataset.value > this.requirement)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/hash/hash.ts\n/**\n* Hash lengths object.\n*/\nconst HASH_LENGTHS = {\n\tmd4: 32,\n\tmd5: 32,\n\tsha1: 40,\n\tsha256: 64,\n\tsha384: 96,\n\tsha512: 128,\n\tripemd128: 32,\n\tripemd160: 40,\n\ttiger128: 32,\n\ttiger160: 40,\n\ttiger192: 48,\n\tcrc32: 8,\n\tcrc32b: 8,\n\tadler32: 8\n};\n/* @__NO_SIDE_EFFECTS__ */\nfunction hash(types, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"hash\",\n\t\treference: hash,\n\t\texpects: null,\n\t\tasync: false,\n\t\trequirement: RegExp(types.map((type) => `^[a-f0-9]{${HASH_LENGTHS[type]}}$`).join(\"|\"), \"iu\"),\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"hash\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/hexadecimal/hexadecimal.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction hexadecimal(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"hexadecimal\",\n\t\treference: hexadecimal,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: HEXADECIMAL_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"hexadecimal\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/hexColor/hexColor.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction hexColor(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"hex_color\",\n\t\treference: hexColor,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: HEX_COLOR_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"hex color\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/imei/imei.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction imei(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"imei\",\n\t\treference: imei,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement(input) {\n\t\t\treturn IMEI_REGEX.test(input) && /* @__PURE__ */ _isLuhnAlgo(input);\n\t\t},\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"IMEI\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/includes/includes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction includes(requirement, message$1) {\n\tconst expects = /* @__PURE__ */ _stringify(requirement);\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"includes\",\n\t\treference: includes,\n\t\tasync: false,\n\t\texpects,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !dataset.value.includes(this.requirement)) _addIssue(this, \"content\", dataset, config$1, { received: `!${expects}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/integer/integer.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction integer(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"integer\",\n\t\treference: integer,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: Number.isInteger,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"integer\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/ip/ip.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction ip(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"ip\",\n\t\treference: ip,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: IP_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"IP\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/ipv4/ipv4.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction ipv4(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"ipv4\",\n\t\treference: ipv4,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: IPV4_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"IPv4\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/ipv6/ipv6.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction ipv6(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"ipv6\",\n\t\treference: ipv6,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: IPV6_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"IPv6\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoDate/isoDate.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoDate(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_date\",\n\t\treference: isoDate,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_DATE_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"date\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoDateTime/isoDateTime.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoDateTime(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_date_time\",\n\t\treference: isoDateTime,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_DATE_TIME_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"date-time\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoTime/isoTime.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoTime(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_time\",\n\t\treference: isoTime,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_TIME_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"time\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoTimeSecond/isoTimeSecond.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoTimeSecond(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_time_second\",\n\t\treference: isoTimeSecond,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_TIME_SECOND_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"time-second\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoTimestamp/isoTimestamp.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoTimestamp(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_timestamp\",\n\t\treference: isoTimestamp,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_TIMESTAMP_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"timestamp\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoWeek/isoWeek.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoWeek(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_week\",\n\t\treference: isoWeek,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_WEEK_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"week\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/length/length.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction length(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"length\",\n\t\treference: length,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.length !== this.requirement) _addIssue(this, \"length\", dataset, config$1, { received: `${dataset.value.length}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/ltValue/ltValue.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction ltValue(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"lt_value\",\n\t\treference: ltValue,\n\t\tasync: false,\n\t\texpects: `<${requirement instanceof Date ? requirement.toJSON() : /* @__PURE__ */ _stringify(requirement)}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !(dataset.value < this.requirement)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/mac/mac.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction mac(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"mac\",\n\t\treference: mac,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: MAC_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"MAC\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/mac48/mac48.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction mac48(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"mac48\",\n\t\treference: mac48,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: MAC48_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"48-bit MAC\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/mac64/mac64.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction mac64(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"mac64\",\n\t\treference: mac64,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: MAC64_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"64-bit MAC\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/mapItems/mapItems.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction mapItems(operation) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"map_items\",\n\t\treference: mapItems,\n\t\tasync: false,\n\t\toperation,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.map(this.operation);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxBytes/maxBytes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxBytes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_bytes\",\n\t\treference: maxBytes,\n\t\tasync: false,\n\t\texpects: `<=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst length$1 = /* @__PURE__ */ _getByteCount(dataset.value);\n\t\t\t\tif (length$1 > this.requirement) _addIssue(this, \"bytes\", dataset, config$1, { received: `${length$1}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxEntries/maxEntries.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxEntries(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_entries\",\n\t\treference: maxEntries,\n\t\tasync: false,\n\t\texpects: `<=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (!dataset.typed) return dataset;\n\t\t\tconst count = Object.keys(dataset.value).length;\n\t\t\tif (dataset.typed && count > this.requirement) _addIssue(this, \"entries\", dataset, config$1, { received: `${count}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxGraphemes/maxGraphemes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxGraphemes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_graphemes\",\n\t\treference: maxGraphemes,\n\t\tasync: false,\n\t\texpects: `<=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getGraphemeCount(dataset.value);\n\t\t\t\tif (count > this.requirement) _addIssue(this, \"graphemes\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxLength/maxLength.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxLength(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_length\",\n\t\treference: maxLength,\n\t\tasync: false,\n\t\texpects: `<=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.length > this.requirement) _addIssue(this, \"length\", dataset, config$1, { received: `${dataset.value.length}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxSize/maxSize.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxSize(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_size\",\n\t\treference: maxSize,\n\t\tasync: false,\n\t\texpects: `<=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.size > this.requirement) _addIssue(this, \"size\", dataset, config$1, { received: `${dataset.value.size}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxValue/maxValue.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxValue(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_value\",\n\t\treference: maxValue,\n\t\tasync: false,\n\t\texpects: `<=${requirement instanceof Date ? requirement.toJSON() : /* @__PURE__ */ _stringify(requirement)}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !(dataset.value <= this.requirement)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxWords/maxWords.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxWords(locales, requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_words\",\n\t\treference: maxWords,\n\t\tasync: false,\n\t\texpects: `<=${requirement}`,\n\t\tlocales,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getWordCount(this.locales, dataset.value);\n\t\t\t\tif (count > this.requirement) _addIssue(this, \"words\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/metadata/metadata.ts\n/**\n* Creates a custom metadata action.\n*\n* @param metadata_ The metadata object.\n*\n* @returns A metadata action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction metadata(metadata_) {\n\treturn {\n\t\tkind: \"metadata\",\n\t\ttype: \"metadata\",\n\t\treference: metadata,\n\t\tmetadata: metadata_\n\t};\n}\n\n//#endregion\n//#region src/actions/mimeType/mimeType.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction mimeType(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"mime_type\",\n\t\treference: mimeType,\n\t\tasync: false,\n\t\texpects: /* @__PURE__ */ _joinExpects(requirement.map((option) => `\"${option}\"`), \"|\"),\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.includes(dataset.value.type)) _addIssue(this, \"MIME type\", dataset, config$1, { received: `\"${dataset.value.type}\"` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minBytes/minBytes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minBytes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_bytes\",\n\t\treference: minBytes,\n\t\tasync: false,\n\t\texpects: `>=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst length$1 = /* @__PURE__ */ _getByteCount(dataset.value);\n\t\t\t\tif (length$1 < this.requirement) _addIssue(this, \"bytes\", dataset, config$1, { received: `${length$1}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minEntries/minEntries.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minEntries(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_entries\",\n\t\treference: minEntries,\n\t\tasync: false,\n\t\texpects: `>=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (!dataset.typed) return dataset;\n\t\t\tconst count = Object.keys(dataset.value).length;\n\t\t\tif (dataset.typed && count < this.requirement) _addIssue(this, \"entries\", dataset, config$1, { received: `${count}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minGraphemes/minGraphemes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minGraphemes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_graphemes\",\n\t\treference: minGraphemes,\n\t\tasync: false,\n\t\texpects: `>=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getGraphemeCount(dataset.value);\n\t\t\t\tif (count < this.requirement) _addIssue(this, \"graphemes\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minLength/minLength.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minLength(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_length\",\n\t\treference: minLength,\n\t\tasync: false,\n\t\texpects: `>=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.length < this.requirement) _addIssue(this, \"length\", dataset, config$1, { received: `${dataset.value.length}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minSize/minSize.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minSize(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_size\",\n\t\treference: minSize,\n\t\tasync: false,\n\t\texpects: `>=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.size < this.requirement) _addIssue(this, \"size\", dataset, config$1, { received: `${dataset.value.size}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minValue/minValue.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minValue(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_value\",\n\t\treference: minValue,\n\t\tasync: false,\n\t\texpects: `>=${requirement instanceof Date ? requirement.toJSON() : /* @__PURE__ */ _stringify(requirement)}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !(dataset.value >= this.requirement)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minWords/minWords.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minWords(locales, requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_words\",\n\t\treference: minWords,\n\t\tasync: false,\n\t\texpects: `>=${requirement}`,\n\t\tlocales,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getWordCount(this.locales, dataset.value);\n\t\t\t\tif (count < this.requirement) _addIssue(this, \"words\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/multipleOf/multipleOf.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction multipleOf(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"multiple_of\",\n\t\treference: multipleOf,\n\t\tasync: false,\n\t\texpects: `%${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value % this.requirement != 0) _addIssue(this, \"multiple\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/nanoid/nanoid.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nanoid(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"nanoid\",\n\t\treference: nanoid,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: NANO_ID_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"Nano ID\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/nonEmpty/nonEmpty.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonEmpty(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"non_empty\",\n\t\treference: nonEmpty,\n\t\tasync: false,\n\t\texpects: \"!0\",\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.length === 0) _addIssue(this, \"length\", dataset, config$1, { received: \"0\" });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/normalize/normalize.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction normalize(form) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"normalize\",\n\t\treference: normalize,\n\t\tasync: false,\n\t\tform,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.normalize(this.form);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notBytes/notBytes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notBytes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_bytes\",\n\t\treference: notBytes,\n\t\tasync: false,\n\t\texpects: `!${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst length$1 = /* @__PURE__ */ _getByteCount(dataset.value);\n\t\t\t\tif (length$1 === this.requirement) _addIssue(this, \"bytes\", dataset, config$1, { received: `${length$1}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notEntries/notEntries.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notEntries(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_entries\",\n\t\treference: notEntries,\n\t\tasync: false,\n\t\texpects: `!${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (!dataset.typed) return dataset;\n\t\t\tconst count = Object.keys(dataset.value).length;\n\t\t\tif (dataset.typed && count === this.requirement) _addIssue(this, \"entries\", dataset, config$1, { received: `${count}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notGraphemes/notGraphemes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notGraphemes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_graphemes\",\n\t\treference: notGraphemes,\n\t\tasync: false,\n\t\texpects: `!${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getGraphemeCount(dataset.value);\n\t\t\t\tif (count === this.requirement) _addIssue(this, \"graphemes\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notLength/notLength.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notLength(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_length\",\n\t\treference: notLength,\n\t\tasync: false,\n\t\texpects: `!${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.length === this.requirement) _addIssue(this, \"length\", dataset, config$1, { received: `${dataset.value.length}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notSize/notSize.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notSize(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_size\",\n\t\treference: notSize,\n\t\tasync: false,\n\t\texpects: `!${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.size === this.requirement) _addIssue(this, \"size\", dataset, config$1, { received: `${dataset.value.size}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notValue/notValue.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notValue(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_value\",\n\t\treference: notValue,\n\t\tasync: false,\n\t\texpects: requirement instanceof Date ? `!${requirement.toJSON()}` : `!${/* @__PURE__ */ _stringify(requirement)}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && this.requirement <= dataset.value && this.requirement >= dataset.value) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notValues/notValues.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notValues(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_values\",\n\t\treference: notValues,\n\t\tasync: false,\n\t\texpects: `!${/* @__PURE__ */ _joinExpects(requirement.map((value$1) => value$1 instanceof Date ? value$1.toJSON() : /* @__PURE__ */ _stringify(value$1)), \"|\")}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && this.requirement.some((value$1) => value$1 <= dataset.value && value$1 >= dataset.value)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notWords/notWords.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notWords(locales, requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_words\",\n\t\treference: notWords,\n\t\tasync: false,\n\t\texpects: `!${requirement}`,\n\t\tlocales,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getWordCount(this.locales, dataset.value);\n\t\t\t\tif (count === this.requirement) _addIssue(this, \"words\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/octal/octal.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction octal(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"octal\",\n\t\treference: octal,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: OCTAL_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"octal\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/parseJson/parseJson.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction parseJson(config$1, message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"parse_json\",\n\t\treference: parseJson,\n\t\tconfig: config$1,\n\t\tmessage: message$1,\n\t\tasync: false,\n\t\t\"~run\"(dataset, config$2) {\n\t\t\ttry {\n\t\t\t\tdataset.value = JSON.parse(dataset.value, this.config?.reviver);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\t_addIssue(this, \"JSON\", dataset, config$2, { received: `\"${error.message}\"` });\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t} else throw error;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/partialCheck/utils/_isPartiallyTyped/_isPartiallyTyped.ts\n/**\n* Checks if a dataset is partially typed.\n*\n* @param dataset The dataset to check.\n* @param paths The paths to check.\n*\n* @returns Whether it is partially typed.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _isPartiallyTyped(dataset, paths) {\n\tif (dataset.issues) for (const path of paths) for (const issue of dataset.issues) {\n\t\tlet typed = false;\n\t\tconst bound = Math.min(path.length, issue.path?.length ?? 0);\n\t\tfor (let index = 0; index < bound; index++) if (path[index] !== issue.path[index].key && (path[index] !== \"$\" || issue.path[index].type !== \"array\")) {\n\t\t\ttyped = true;\n\t\t\tbreak;\n\t\t}\n\t\tif (!typed) return false;\n\t}\n\treturn true;\n}\n\n//#endregion\n//#region src/actions/partialCheck/partialCheck.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction partialCheck(paths, requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"partial_check\",\n\t\treference: partialCheck,\n\t\tasync: false,\n\t\texpects: null,\n\t\tpaths,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif ((dataset.typed || /* @__PURE__ */ _isPartiallyTyped(dataset, paths)) && !this.requirement(dataset.value)) _addIssue(this, \"input\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/partialCheck/partialCheckAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction partialCheckAsync(paths, requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"partial_check\",\n\t\treference: partialCheckAsync,\n\t\tasync: true,\n\t\texpects: null,\n\t\tpaths,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif ((dataset.typed || /* @__PURE__ */ _isPartiallyTyped(dataset, paths)) && !await this.requirement(dataset.value)) _addIssue(this, \"input\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/rawCheck/rawCheck.ts\n/**\n* Creates a raw check validation action.\n*\n* @param action The validation action.\n*\n* @returns A raw check action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction rawCheck(action) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"raw_check\",\n\t\treference: rawCheck,\n\t\tasync: false,\n\t\texpects: null,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\taction({\n\t\t\t\tdataset,\n\t\t\t\tconfig: config$1,\n\t\t\t\taddIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config$1, info)\n\t\t\t});\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/rawCheck/rawCheckAsync.ts\n/**\n* Creates a raw check validation action.\n*\n* @param action The validation action.\n*\n* @returns A raw check action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction rawCheckAsync(action) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"raw_check\",\n\t\treference: rawCheckAsync,\n\t\tasync: true,\n\t\texpects: null,\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tawait action({\n\t\t\t\tdataset,\n\t\t\t\tconfig: config$1,\n\t\t\t\taddIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config$1, info)\n\t\t\t});\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/rawTransform/rawTransform.ts\n/**\n* Creates a raw transformation action.\n*\n* @param action The transformation action.\n*\n* @returns A raw transform action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction rawTransform(action) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"raw_transform\",\n\t\treference: rawTransform,\n\t\tasync: false,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst output = action({\n\t\t\t\tdataset,\n\t\t\t\tconfig: config$1,\n\t\t\t\taddIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config$1, info),\n\t\t\t\tNEVER: null\n\t\t\t});\n\t\t\tif (dataset.issues) dataset.typed = false;\n\t\t\telse dataset.value = output;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/rawTransform/rawTransformAsync.ts\n/**\n* Creates a raw transformation action.\n*\n* @param action The transformation action.\n*\n* @returns A raw transform action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction rawTransformAsync(action) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"raw_transform\",\n\t\treference: rawTransformAsync,\n\t\tasync: true,\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst output = await action({\n\t\t\t\tdataset,\n\t\t\t\tconfig: config$1,\n\t\t\t\taddIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config$1, info),\n\t\t\t\tNEVER: null\n\t\t\t});\n\t\t\tif (dataset.issues) dataset.typed = false;\n\t\t\telse dataset.value = output;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/readonly/readonly.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction readonly() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"readonly\",\n\t\treference: readonly,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/reduceItems/reduceItems.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction reduceItems(operation, initial) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"reduce_items\",\n\t\treference: reduceItems,\n\t\tasync: false,\n\t\toperation,\n\t\tinitial,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.reduce(this.operation, this.initial);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/regex/regex.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction regex(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"regex\",\n\t\treference: regex,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"format\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/returns/returns.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction returns(schema) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"returns\",\n\t\treference: returns,\n\t\tasync: false,\n\t\tschema,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst func = dataset.value;\n\t\t\tdataset.value = (...args_) => {\n\t\t\t\tconst returnsDataset = this.schema[\"~run\"]({ value: func(...args_) }, config$1);\n\t\t\t\tif (returnsDataset.issues) throw new ValiError(returnsDataset.issues);\n\t\t\t\treturn returnsDataset.value;\n\t\t\t};\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/returns/returnsAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction returnsAsync(schema) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"returns\",\n\t\treference: returnsAsync,\n\t\tasync: false,\n\t\tschema,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst func = dataset.value;\n\t\t\tdataset.value = async (...args_) => {\n\t\t\t\tconst returnsDataset = await this.schema[\"~run\"]({ value: await func(...args_) }, config$1);\n\t\t\t\tif (returnsDataset.issues) throw new ValiError(returnsDataset.issues);\n\t\t\t\treturn returnsDataset.value;\n\t\t\t};\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/rfcEmail/rfcEmail.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction rfcEmail(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"rfc_email\",\n\t\treference: rfcEmail,\n\t\texpects: null,\n\t\tasync: false,\n\t\trequirement: RFC_EMAIL_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"email\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/safeInteger/safeInteger.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction safeInteger(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"safe_integer\",\n\t\treference: safeInteger,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: Number.isSafeInteger,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"safe integer\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/size/size.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction size(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"size\",\n\t\treference: size,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.size !== this.requirement) _addIssue(this, \"size\", dataset, config$1, { received: `${dataset.value.size}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/slug/slug.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction slug(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"slug\",\n\t\treference: slug,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: SLUG_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"slug\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/someItem/someItem.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction someItem(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"some_item\",\n\t\treference: someItem,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !dataset.value.some(this.requirement)) _addIssue(this, \"item\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/sortItems/sortItems.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction sortItems(operation) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"sort_items\",\n\t\treference: sortItems,\n\t\tasync: false,\n\t\toperation,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.sort(this.operation);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/startsWith/startsWith.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction startsWith(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"starts_with\",\n\t\treference: startsWith,\n\t\tasync: false,\n\t\texpects: `\"${requirement}\"`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !dataset.value.startsWith(this.requirement)) _addIssue(this, \"start\", dataset, config$1, { received: `\"${dataset.value.slice(0, this.requirement.length)}\"` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/stringifyJson/stringifyJson.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction stringifyJson(config$1, message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"stringify_json\",\n\t\treference: stringifyJson,\n\t\tmessage: message$1,\n\t\tconfig: config$1,\n\t\tasync: false,\n\t\t\"~run\"(dataset, config$2) {\n\t\t\ttry {\n\t\t\t\tconst output = JSON.stringify(dataset.value, this.config?.replacer, this.config?.space);\n\t\t\t\tif (output === void 0) {\n\t\t\t\t\t_addIssue(this, \"JSON\", dataset, config$2);\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t}\n\t\t\t\tdataset.value = output;\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\t_addIssue(this, \"JSON\", dataset, config$2, { received: `\"${error.message}\"` });\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t} else throw error;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/title/title.ts\n/**\n* Creates a title metadata action.\n*\n* @param title_ The title text.\n*\n* @returns A title action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction title(title_) {\n\treturn {\n\t\tkind: \"metadata\",\n\t\ttype: \"title\",\n\t\treference: title,\n\t\ttitle: title_\n\t};\n}\n\n//#endregion\n//#region src/actions/toBigint/toBigint.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction toBigint(message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_bigint\",\n\t\treference: toBigint,\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\ttry {\n\t\t\t\tdataset.value = BigInt(dataset.value);\n\t\t\t} catch {\n\t\t\t\t_addIssue(this, \"bigint\", dataset, config$1);\n\t\t\t\tdataset.typed = false;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toBoolean/toBoolean.ts\n/**\n* Creates a to boolean transformation action.\n*\n* @returns A to boolean action.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toBoolean() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_boolean\",\n\t\treference: toBoolean,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = Boolean(dataset.value);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toDate/toDate.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction toDate(message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_date\",\n\t\treference: toDate,\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\ttry {\n\t\t\t\tdataset.value = new Date(dataset.value);\n\t\t\t\tif (isNaN(dataset.value)) {\n\t\t\t\t\t_addIssue(this, \"date\", dataset, config$1, { received: \"\\\"Invalid Date\\\"\" });\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t_addIssue(this, \"date\", dataset, config$1);\n\t\t\t\tdataset.typed = false;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toLowerCase/toLowerCase.ts\n/**\n* Creates a to lower case transformation action.\n*\n* @returns A to lower case action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toLowerCase() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_lower_case\",\n\t\treference: toLowerCase,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.toLowerCase();\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toMaxValue/toMaxValue.ts\n/**\n* Creates a to max value transformation action.\n*\n* @param requirement The maximum value.\n*\n* @returns A to max value action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toMaxValue(requirement) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_max_value\",\n\t\treference: toMaxValue,\n\t\tasync: false,\n\t\trequirement,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value > this.requirement ? this.requirement : dataset.value;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toMinValue/toMinValue.ts\n/**\n* Creates a to min value transformation action.\n*\n* @param requirement The minimum value.\n*\n* @returns A to min value action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toMinValue(requirement) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_min_value\",\n\t\treference: toMinValue,\n\t\tasync: false,\n\t\trequirement,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value < this.requirement ? this.requirement : dataset.value;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toNumber/toNumber.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction toNumber(message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_number\",\n\t\treference: toNumber,\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\ttry {\n\t\t\t\tdataset.value = Number(dataset.value);\n\t\t\t\tif (isNaN(dataset.value)) {\n\t\t\t\t\t_addIssue(this, \"number\", dataset, config$1);\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t_addIssue(this, \"number\", dataset, config$1);\n\t\t\t\tdataset.typed = false;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toString/toString.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction toString(message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_string\",\n\t\treference: toString,\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\ttry {\n\t\t\t\tdataset.value = String(dataset.value);\n\t\t\t} catch {\n\t\t\t\t_addIssue(this, \"string\", dataset, config$1);\n\t\t\t\tdataset.typed = false;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toUpperCase/toUpperCase.ts\n/**\n* Creates a to upper case transformation action.\n*\n* @returns A to upper case action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toUpperCase() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_upper_case\",\n\t\treference: toUpperCase,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.toUpperCase();\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/transform/transform.ts\n/**\n* Creates a custom transformation action.\n*\n* @param operation The transformation operation.\n*\n* @returns A transform action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction transform(operation) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"transform\",\n\t\treference: transform,\n\t\tasync: false,\n\t\toperation,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = this.operation(dataset.value);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/transform/transformAsync.ts\n/**\n* Creates a custom transformation action.\n*\n* @param operation The transformation operation.\n*\n* @returns A transform action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction transformAsync(operation) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"transform\",\n\t\treference: transformAsync,\n\t\tasync: true,\n\t\toperation,\n\t\tasync \"~run\"(dataset) {\n\t\t\tdataset.value = await this.operation(dataset.value);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/trim/trim.ts\n/**\n* Creates a trim transformation action.\n*\n* @returns A trim action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction trim() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"trim\",\n\t\treference: trim,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.trim();\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/trimEnd/trimEnd.ts\n/**\n* Creates a trim end transformation action.\n*\n* @returns A trim end action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction trimEnd() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"trim_end\",\n\t\treference: trimEnd,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.trimEnd();\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/trimStart/trimStart.ts\n/**\n* Creates a trim start transformation action.\n*\n* @returns A trim start action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction trimStart() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"trim_start\",\n\t\treference: trimStart,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.trimStart();\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/ulid/ulid.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction ulid(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"ulid\",\n\t\treference: ulid,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ULID_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"ULID\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/url/url.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction url(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"url\",\n\t\treference: url,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement(input) {\n\t\t\ttry {\n\t\t\t\tnew URL(input);\n\t\t\t\treturn true;\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"URL\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/uuid/uuid.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction uuid(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"uuid\",\n\t\treference: uuid,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: UUID_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"UUID\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/value/value.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction value(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"value\",\n\t\treference: value,\n\t\tasync: false,\n\t\texpects: requirement instanceof Date ? requirement.toJSON() : /* @__PURE__ */ _stringify(requirement),\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !(this.requirement <= dataset.value && this.requirement >= dataset.value)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/values/values.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction values(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"values\",\n\t\treference: values,\n\t\tasync: false,\n\t\texpects: `${/* @__PURE__ */ _joinExpects(requirement.map((value$1) => value$1 instanceof Date ? value$1.toJSON() : /* @__PURE__ */ _stringify(value$1)), \"|\")}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.some((value$1) => value$1 <= dataset.value && value$1 >= dataset.value)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/words/words.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction words(locales, requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"words\",\n\t\treference: words,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\tlocales,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getWordCount(this.locales, dataset.value);\n\t\t\t\tif (count !== this.requirement) _addIssue(this, \"words\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/assert/assert.ts\n/**\n* Checks if the input matches the schema. As this is an assertion function, it\n* can be used as a type guard.\n*\n* @param schema The schema to be used.\n* @param input The input to be tested.\n*/\nfunction assert(schema, input) {\n\tconst issues = schema[\"~run\"]({ value: input }, { abortEarly: true }).issues;\n\tif (issues) throw new ValiError(issues);\n}\n\n//#endregion\n//#region src/methods/config/config.ts\n/**\n* Changes the local configuration of a schema.\n*\n* @param schema The schema to configure.\n* @param config The parse configuration.\n*\n* @returns The configured schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction config(schema, config$1) {\n\treturn {\n\t\t...schema,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config_) {\n\t\t\treturn schema[\"~run\"](dataset, {\n\t\t\t\t...config_,\n\t\t\t\t...config$1\n\t\t\t});\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/getFallback/getFallback.ts\n/**\n* Returns the fallback value of the schema.\n*\n* @param schema The schema to get it from.\n* @param dataset The output dataset if available.\n* @param config The config if available.\n*\n* @returns The fallback value.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getFallback(schema, dataset, config$1) {\n\treturn typeof schema.fallback === \"function\" ? schema.fallback(dataset, config$1) : schema.fallback;\n}\n\n//#endregion\n//#region src/methods/fallback/fallback.ts\n/**\n* Returns a fallback value as output if the input does not match the schema.\n*\n* @param schema The schema to catch.\n* @param fallback The fallback value.\n*\n* @returns The passed schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction fallback(schema, fallback$1) {\n\treturn {\n\t\t...schema,\n\t\tfallback: fallback$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst outputDataset = schema[\"~run\"](dataset, config$1);\n\t\t\treturn outputDataset.issues ? {\n\t\t\t\ttyped: true,\n\t\t\t\tvalue: /* @__PURE__ */ getFallback(this, outputDataset, config$1)\n\t\t\t} : outputDataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/fallback/fallbackAsync.ts\n/**\n* Returns a fallback value as output if the input does not match the schema.\n*\n* @param schema The schema to catch.\n* @param fallback The fallback value.\n*\n* @returns The passed schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction fallbackAsync(schema, fallback$1) {\n\treturn {\n\t\t...schema,\n\t\tfallback: fallback$1,\n\t\tasync: true,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst outputDataset = await schema[\"~run\"](dataset, config$1);\n\t\t\treturn outputDataset.issues ? {\n\t\t\t\ttyped: true,\n\t\t\t\tvalue: await /* @__PURE__ */ getFallback(this, outputDataset, config$1)\n\t\t\t} : outputDataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/flatten/flatten.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction flatten(issues) {\n\tconst flatErrors = {};\n\tfor (const issue of issues) if (issue.path) {\n\t\tconst dotPath = /* @__PURE__ */ getDotPath(issue);\n\t\tif (dotPath) {\n\t\t\tif (!flatErrors.nested) flatErrors.nested = {};\n\t\t\tif (flatErrors.nested[dotPath]) flatErrors.nested[dotPath].push(issue.message);\n\t\t\telse flatErrors.nested[dotPath] = [issue.message];\n\t\t} else if (flatErrors.other) flatErrors.other.push(issue.message);\n\t\telse flatErrors.other = [issue.message];\n\t} else if (flatErrors.root) flatErrors.root.push(issue.message);\n\telse flatErrors.root = [issue.message];\n\treturn flatErrors;\n}\n\n//#endregion\n//#region src/methods/forward/forward.ts\n/**\n* Forwards the issues of the passed validation action.\n*\n* @param action The validation action.\n* @param path The path to forward the issues to.\n*\n* @returns The modified action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction forward(action, path) {\n\treturn {\n\t\t...action,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst prevIssues = dataset.issues && [...dataset.issues];\n\t\t\tdataset = action[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.issues) {\n\t\t\t\tfor (const issue of dataset.issues) if (!prevIssues?.includes(issue)) {\n\t\t\t\t\tlet pathInput = dataset.value;\n\t\t\t\t\tfor (const key of path) {\n\t\t\t\t\t\tconst pathValue = pathInput[key];\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"unknown\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput: pathInput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: pathValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (issue.path) issue.path.push(pathItem);\n\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\tif (!pathValue) break;\n\t\t\t\t\t\tpathInput = pathValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/forward/forwardAsync.ts\n/**\n* Forwards the issues of the passed validation action.\n*\n* @param action The validation action.\n* @param path The path to forward the issues to.\n*\n* @returns The modified action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction forwardAsync(action, path) {\n\treturn {\n\t\t...action,\n\t\tasync: true,\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst prevIssues = dataset.issues && [...dataset.issues];\n\t\t\tdataset = await action[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.issues) {\n\t\t\t\tfor (const issue of dataset.issues) if (!prevIssues?.includes(issue)) {\n\t\t\t\t\tlet pathInput = dataset.value;\n\t\t\t\t\tfor (const key of path) {\n\t\t\t\t\t\tconst pathValue = pathInput[key];\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"unknown\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput: pathInput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: pathValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (issue.path) issue.path.push(pathItem);\n\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\tif (!pathValue) break;\n\t\t\t\t\t\tpathInput = pathValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/getDefault/getDefault.ts\n/**\n* Returns the default value of the schema.\n*\n* @param schema The schema to get it from.\n* @param dataset The input dataset if available.\n* @param config The config if available.\n*\n* @returns The default value.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getDefault(schema, dataset, config$1) {\n\treturn typeof schema.default === \"function\" ? schema.default(dataset, config$1) : schema.default;\n}\n\n//#endregion\n//#region src/methods/getDefaults/getDefaults.ts\n/**\n* Returns the default values of the schema.\n*\n* Hint: The difference to `getDefault` is that for object and tuple schemas\n* this function recursively returns the default values of the subschemas\n* instead of `undefined`.\n*\n* @param schema The schema to get them from.\n*\n* @returns The default values.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getDefaults(schema) {\n\tif (\"entries\" in schema) {\n\t\tconst object$1 = {};\n\t\tfor (const key in schema.entries) object$1[key] = /* @__PURE__ */ getDefaults(schema.entries[key]);\n\t\treturn object$1;\n\t}\n\tif (\"items\" in schema) return schema.items.map(getDefaults);\n\treturn /* @__PURE__ */ getDefault(schema);\n}\n\n//#endregion\n//#region src/methods/getDefaults/getDefaultsAsync.ts\n/**\n* Returns the default values of the schema.\n*\n* Hint: The difference to `getDefault` is that for object and tuple schemas\n* this function recursively returns the default values of the subschemas\n* instead of `undefined`.\n*\n* @param schema The schema to get them from.\n*\n* @returns The default values.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nasync function getDefaultsAsync(schema) {\n\tif (\"entries\" in schema) return Object.fromEntries(await Promise.all(Object.entries(schema.entries).map(async ([key, value$1]) => [key, await /* @__PURE__ */ getDefaultsAsync(value$1)])));\n\tif (\"items\" in schema) return Promise.all(schema.items.map(getDefaultsAsync));\n\treturn /* @__PURE__ */ getDefault(schema);\n}\n\n//#endregion\n//#region src/methods/getDescription/getDescription.ts\n/**\n* Returns the description of the schema.\n*\n* If multiple descriptions are defined, the last one of the highest level is\n* returned. If no description is defined, `undefined` is returned.\n*\n* @param schema The schema to get the description from.\n*\n* @returns The description, if any.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getDescription(schema) {\n\treturn /* @__PURE__ */ _getLastMetadata(schema, \"description\");\n}\n\n//#endregion\n//#region src/methods/getExamples/getExamples.ts\n/**\n* Returns the examples of a schema.\n*\n* If multiple examples are defined, it concatenates them using depth-first\n* search. If no examples are defined, an empty array is returned.\n*\n* @param schema The schema to get the examples from.\n*\n* @returns The examples, if any.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getExamples(schema) {\n\tconst examples$1 = [];\n\tfunction depthFirstCollect(schema$1) {\n\t\tif (\"pipe\" in schema$1) {\n\t\t\tfor (const item of schema$1.pipe) if (item.kind === \"schema\" && \"pipe\" in item) depthFirstCollect(item);\n\t\t\telse if (item.kind === \"metadata\" && item.type === \"examples\") examples$1.push(...item.examples);\n\t\t}\n\t}\n\tdepthFirstCollect(schema);\n\treturn examples$1;\n}\n\n//#endregion\n//#region src/methods/getFallbacks/getFallbacks.ts\n/**\n* Returns the fallback values of the schema.\n*\n* Hint: The difference to `getFallback` is that for object and tuple schemas\n* this function recursively returns the fallback values of the subschemas\n* instead of `undefined`.\n*\n* @param schema The schema to get them from.\n*\n* @returns The fallback values.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getFallbacks(schema) {\n\tif (\"entries\" in schema) {\n\t\tconst object$1 = {};\n\t\tfor (const key in schema.entries) object$1[key] = /* @__PURE__ */ getFallbacks(schema.entries[key]);\n\t\treturn object$1;\n\t}\n\tif (\"items\" in schema) return schema.items.map(getFallbacks);\n\treturn /* @__PURE__ */ getFallback(schema);\n}\n\n//#endregion\n//#region src/methods/getFallbacks/getFallbacksAsync.ts\n/**\n* Returns the fallback values of the schema.\n*\n* Hint: The difference to `getFallback` is that for object and tuple schemas\n* this function recursively returns the fallback values of the subschemas\n* instead of `undefined`.\n*\n* @param schema The schema to get them from.\n*\n* @returns The fallback values.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nasync function getFallbacksAsync(schema) {\n\tif (\"entries\" in schema) return Object.fromEntries(await Promise.all(Object.entries(schema.entries).map(async ([key, value$1]) => [key, await /* @__PURE__ */ getFallbacksAsync(value$1)])));\n\tif (\"items\" in schema) return Promise.all(schema.items.map(getFallbacksAsync));\n\treturn /* @__PURE__ */ getFallback(schema);\n}\n\n//#endregion\n//#region src/methods/getMetadata/getMetadata.ts\n/**\n* Returns the metadata of a schema.\n*\n* If multiple metadata are defined, it shallowly merges them using depth-first\n* search. If no metadata is defined, an empty object is returned.\n*\n* @param schema Schema to get the metadata from.\n*\n* @returns The metadata, if any.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getMetadata(schema) {\n\tconst result = {};\n\tfunction depthFirstMerge(schema$1) {\n\t\tif (\"pipe\" in schema$1) {\n\t\t\tfor (const item of schema$1.pipe) if (item.kind === \"schema\" && \"pipe\" in item) depthFirstMerge(item);\n\t\t\telse if (item.kind === \"metadata\" && item.type === \"metadata\") Object.assign(result, item.metadata);\n\t\t}\n\t}\n\tdepthFirstMerge(schema);\n\treturn result;\n}\n\n//#endregion\n//#region src/methods/getTitle/getTitle.ts\n/**\n* Returns the title of the schema.\n*\n* If multiple titles are defined, the last one of the highest level is\n* returned. If no title is defined, `undefined` is returned.\n*\n* @param schema The schema to get the title from.\n*\n* @returns The title, if any.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getTitle(schema) {\n\treturn /* @__PURE__ */ _getLastMetadata(schema, \"title\");\n}\n\n//#endregion\n//#region src/methods/is/is.ts\n/**\n* Checks if the input matches the schema. By using a type predicate, this\n* function can be used as a type guard.\n*\n* @param schema The schema to be used.\n* @param input The input to be tested.\n*\n* @returns Whether the input matches the schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction is(schema, input) {\n\treturn !schema[\"~run\"]({ value: input }, { abortEarly: true }).issues;\n}\n\n//#endregion\n//#region src/schemas/any/any.ts\n/**\n* Creates an any schema.\n*\n* Hint: This schema function exists only for completeness and is not\n* recommended in practice. Instead, `unknown` should be used to accept\n* unknown data.\n*\n* @returns An any schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction any() {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"any\",\n\t\treference: any,\n\t\texpects: \"any\",\n\t\tasync: false,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.typed = true;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/array/array.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction array(item, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"array\",\n\t\treference: array,\n\t\texpects: \"Array\",\n\t\tasync: false,\n\t\titem,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tfor (let key = 0; key < input.length; key++) {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\tconst itemDataset = this.item[\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/array/arrayAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction arrayAsync(item, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"array\",\n\t\treference: arrayAsync,\n\t\texpects: \"Array\",\n\t\tasync: true,\n\t\titem,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tconst itemDatasets = await Promise.all(input.map((value$1) => this.item[\"~run\"]({ value: value$1 }, config$1)));\n\t\t\t\tfor (let key = 0; key < itemDatasets.length; key++) {\n\t\t\t\t\tconst itemDataset = itemDatasets[key];\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/bigint/bigint.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction bigint(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"bigint\",\n\t\treference: bigint,\n\t\texpects: \"bigint\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (typeof dataset.value === \"bigint\") dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/blob/blob.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction blob(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"blob\",\n\t\treference: blob,\n\t\texpects: \"Blob\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value instanceof Blob) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/boolean/boolean.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction boolean(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"boolean\",\n\t\treference: boolean,\n\t\texpects: \"boolean\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (typeof dataset.value === \"boolean\") dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/custom/custom.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction custom(check$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"custom\",\n\t\treference: custom,\n\t\texpects: \"unknown\",\n\t\tasync: false,\n\t\tcheck: check$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (this.check(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/custom/customAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction customAsync(check$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"custom\",\n\t\treference: customAsync,\n\t\texpects: \"unknown\",\n\t\tasync: true,\n\t\tcheck: check$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (await this.check(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/date/date.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction date(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"date\",\n\t\treference: date,\n\t\texpects: \"Date\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value instanceof Date) if (!isNaN(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1, { received: \"\\\"Invalid Date\\\"\" });\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/enum/enum.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction enum_(enum__, message$1) {\n\tconst options = [];\n\tfor (const key in enum__) if (`${+key}` !== key || typeof enum__[key] !== \"string\" || !Object.is(enum__[enum__[key]], +key)) options.push(enum__[key]);\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"enum\",\n\t\treference: enum_,\n\t\texpects: /* @__PURE__ */ _joinExpects(options.map(_stringify), \"|\"),\n\t\tasync: false,\n\t\tenum: enum__,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (this.options.includes(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/exactOptional/exactOptional.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction exactOptional(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"exact_optional\",\n\t\treference: exactOptional,\n\t\texpects: wrapped.expects,\n\t\tasync: false,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/exactOptional/exactOptionalAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction exactOptionalAsync(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"exact_optional\",\n\t\treference: exactOptionalAsync,\n\t\texpects: wrapped.expects,\n\t\tasync: true,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/file/file.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction file(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"file\",\n\t\treference: file,\n\t\texpects: \"File\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value instanceof File) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/function/function.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction function_(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"function\",\n\t\treference: function_,\n\t\texpects: \"Function\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (typeof dataset.value === \"function\") dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/instance/instance.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction instance(class_, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"instance\",\n\t\treference: instance,\n\t\texpects: class_.name,\n\t\tasync: false,\n\t\tclass: class_,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value instanceof this.class) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/intersect/utils/_merge/_merge.ts\n/**\n* Merges two values into one single output.\n*\n* @param value1 First value.\n* @param value2 Second value.\n*\n* @returns The merge dataset.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _merge(value1, value2) {\n\tif (typeof value1 === typeof value2) {\n\t\tif (value1 === value2 || value1 instanceof Date && value2 instanceof Date && +value1 === +value2) return { value: value1 };\n\t\tif (value1 && value2 && value1.constructor === Object && value2.constructor === Object) {\n\t\t\tfor (const key in value2) if (key in value1) {\n\t\t\t\tconst dataset = /* @__PURE__ */ _merge(value1[key], value2[key]);\n\t\t\t\tif (dataset.issue) return dataset;\n\t\t\t\tvalue1[key] = dataset.value;\n\t\t\t} else value1[key] = value2[key];\n\t\t\treturn { value: value1 };\n\t\t}\n\t\tif (Array.isArray(value1) && Array.isArray(value2)) {\n\t\t\tif (value1.length === value2.length) {\n\t\t\t\tfor (let index = 0; index < value1.length; index++) {\n\t\t\t\t\tconst dataset = /* @__PURE__ */ _merge(value1[index], value2[index]);\n\t\t\t\t\tif (dataset.issue) return dataset;\n\t\t\t\t\tvalue1[index] = dataset.value;\n\t\t\t\t}\n\t\t\t\treturn { value: value1 };\n\t\t\t}\n\t\t}\n\t}\n\treturn { issue: true };\n}\n\n//#endregion\n//#region src/schemas/intersect/intersect.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction intersect(options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"intersect\",\n\t\treference: intersect,\n\t\texpects: /* @__PURE__ */ _joinExpects(options.map((option) => option.expects), \"&\"),\n\t\tasync: false,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (this.options.length) {\n\t\t\t\tconst input = dataset.value;\n\t\t\t\tlet outputs;\n\t\t\t\tdataset.typed = true;\n\t\t\t\tfor (const schema of this.options) {\n\t\t\t\t\tconst optionDataset = schema[\"~run\"]({ value: input }, config$1);\n\t\t\t\t\tif (optionDataset.issues) {\n\t\t\t\t\t\tif (dataset.issues) dataset.issues.push(...optionDataset.issues);\n\t\t\t\t\t\telse dataset.issues = optionDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!optionDataset.typed) dataset.typed = false;\n\t\t\t\t\tif (dataset.typed) if (outputs) outputs.push(optionDataset.value);\n\t\t\t\t\telse outputs = [optionDataset.value];\n\t\t\t\t}\n\t\t\t\tif (dataset.typed) {\n\t\t\t\t\tdataset.value = outputs[0];\n\t\t\t\t\tfor (let index = 1; index < outputs.length; index++) {\n\t\t\t\t\t\tconst mergeDataset = /* @__PURE__ */ _merge(dataset.value, outputs[index]);\n\t\t\t\t\t\tif (mergeDataset.issue) {\n\t\t\t\t\t\t\t_addIssue(this, \"type\", dataset, config$1, { received: \"unknown\" });\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataset.value = mergeDataset.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/intersect/intersectAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction intersectAsync(options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"intersect\",\n\t\treference: intersectAsync,\n\t\texpects: /* @__PURE__ */ _joinExpects(options.map((option) => option.expects), \"&\"),\n\t\tasync: true,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (this.options.length) {\n\t\t\t\tconst input = dataset.value;\n\t\t\t\tlet outputs;\n\t\t\t\tdataset.typed = true;\n\t\t\t\tconst optionDatasets = await Promise.all(this.options.map((schema) => schema[\"~run\"]({ value: input }, config$1)));\n\t\t\t\tfor (const optionDataset of optionDatasets) {\n\t\t\t\t\tif (optionDataset.issues) {\n\t\t\t\t\t\tif (dataset.issues) dataset.issues.push(...optionDataset.issues);\n\t\t\t\t\t\telse dataset.issues = optionDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!optionDataset.typed) dataset.typed = false;\n\t\t\t\t\tif (dataset.typed) if (outputs) outputs.push(optionDataset.value);\n\t\t\t\t\telse outputs = [optionDataset.value];\n\t\t\t\t}\n\t\t\t\tif (dataset.typed) {\n\t\t\t\t\tdataset.value = outputs[0];\n\t\t\t\t\tfor (let index = 1; index < outputs.length; index++) {\n\t\t\t\t\t\tconst mergeDataset = /* @__PURE__ */ _merge(dataset.value, outputs[index]);\n\t\t\t\t\t\tif (mergeDataset.issue) {\n\t\t\t\t\t\t\t_addIssue(this, \"type\", dataset, config$1, { received: \"unknown\" });\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataset.value = mergeDataset.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/lazy/lazy.ts\n/**\n* Creates a lazy schema.\n*\n* @param getter The schema getter.\n*\n* @returns A lazy schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction lazy(getter) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"lazy\",\n\t\treference: lazy,\n\t\texpects: \"unknown\",\n\t\tasync: false,\n\t\tgetter,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\treturn this.getter(dataset.value)[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/lazy/lazyAsync.ts\n/**\n* Creates a lazy schema.\n*\n* @param getter The schema getter.\n*\n* @returns A lazy schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction lazyAsync(getter) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"lazy\",\n\t\treference: lazyAsync,\n\t\texpects: \"unknown\",\n\t\tasync: true,\n\t\tgetter,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\treturn (await this.getter(dataset.value))[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/literal/literal.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction literal(literal_, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"literal\",\n\t\treference: literal,\n\t\texpects: /* @__PURE__ */ _stringify(literal_),\n\t\tasync: false,\n\t\tliteral: literal_,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === this.literal) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/looseObject/looseObject.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction looseObject(entries$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"loose_object\",\n\t\treference: looseObject,\n\t\texpects: \"Object\",\n\t\tasync: false,\n\t\tentries: entries$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tfor (const key in this.entries) {\n\t\t\t\t\tconst valueSchema = this.entries[key];\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\tconst valueDataset = valueSchema[\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) {\n\t\t\t\t\tfor (const key in input) if (/* @__PURE__ */ _isValidObjectKey(input, key) && !(key in this.entries)) dataset.value[key] = input[key];\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/looseObject/looseObjectAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction looseObjectAsync(entries$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"loose_object\",\n\t\treference: looseObjectAsync,\n\t\texpects: \"Object\",\n\t\tasync: true,\n\t\tentries: entries$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tconst valueDatasets = await Promise.all(Object.entries(this.entries).map(async ([key, valueSchema]) => {\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : await /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\t\tawait valueSchema[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tinput[key],\n\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\tnull\n\t\t\t\t\t];\n\t\t\t\t}));\n\t\t\t\tfor (const [key, value$1, valueSchema, valueDataset] of valueDatasets) if (valueDataset) {\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = await /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) {\n\t\t\t\t\tfor (const key in input) if (/* @__PURE__ */ _isValidObjectKey(input, key) && !(key in this.entries)) dataset.value[key] = input[key];\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/looseTuple/looseTuple.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction looseTuple(items, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"loose_tuple\",\n\t\treference: looseTuple,\n\t\texpects: \"Array\",\n\t\tasync: false,\n\t\titems,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tfor (let key = 0; key < this.items.length; key++) {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\tconst itemDataset = this.items[key][\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) for (let key = this.items.length; key < input.length; key++) dataset.value.push(input[key]);\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/looseTuple/looseTupleAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction looseTupleAsync(items, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"loose_tuple\",\n\t\treference: looseTupleAsync,\n\t\texpects: \"Array\",\n\t\tasync: true,\n\t\titems,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tconst itemDatasets = await Promise.all(this.items.map(async (item, key) => {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\tawait item[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t];\n\t\t\t\t}));\n\t\t\t\tfor (const [key, value$1, itemDataset] of itemDatasets) {\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) for (let key = this.items.length; key < input.length; key++) dataset.value.push(input[key]);\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/map/map.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction map(key, value$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"map\",\n\t\treference: map,\n\t\texpects: \"Map\",\n\t\tasync: false,\n\t\tkey,\n\t\tvalue: value$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input instanceof Map) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = /* @__PURE__ */ new Map();\n\t\t\t\tfor (const [inputKey, inputValue] of input) {\n\t\t\t\t\tconst keyDataset = this.key[\"~run\"]({ value: inputKey }, config$1);\n\t\t\t\t\tif (keyDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"map\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: inputKey,\n\t\t\t\t\t\t\tvalue: inputValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of keyDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = keyDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst valueDataset = this.value[\"~run\"]({ value: inputValue }, config$1);\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"map\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: inputKey,\n\t\t\t\t\t\t\tvalue: inputValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!keyDataset.typed || !valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.set(keyDataset.value, valueDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/map/mapAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction mapAsync(key, value$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"map\",\n\t\treference: mapAsync,\n\t\texpects: \"Map\",\n\t\tasync: true,\n\t\tkey,\n\t\tvalue: value$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input instanceof Map) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = /* @__PURE__ */ new Map();\n\t\t\t\tconst datasets = await Promise.all([...input].map(([inputKey, inputValue]) => Promise.all([\n\t\t\t\t\tinputKey,\n\t\t\t\t\tinputValue,\n\t\t\t\t\tthis.key[\"~run\"]({ value: inputKey }, config$1),\n\t\t\t\t\tthis.value[\"~run\"]({ value: inputValue }, config$1)\n\t\t\t\t])));\n\t\t\t\tfor (const [inputKey, inputValue, keyDataset, valueDataset] of datasets) {\n\t\t\t\t\tif (keyDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"map\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: inputKey,\n\t\t\t\t\t\t\tvalue: inputValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of keyDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = keyDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"map\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: inputKey,\n\t\t\t\t\t\t\tvalue: inputValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!keyDataset.typed || !valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.set(keyDataset.value, valueDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nan/nan.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nan(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"nan\",\n\t\treference: nan,\n\t\texpects: \"NaN\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (Number.isNaN(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/never/never.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction never(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"never\",\n\t\treference: never,\n\t\texpects: \"never\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\t_addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nonNullable/nonNullable.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonNullable(wrapped, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"non_nullable\",\n\t\treference: nonNullable,\n\t\texpects: \"!null\",\n\t\tasync: false,\n\t\twrapped,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value !== null) dataset = this.wrapped[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.value === null) _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nonNullable/nonNullableAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonNullableAsync(wrapped, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"non_nullable\",\n\t\treference: nonNullableAsync,\n\t\texpects: \"!null\",\n\t\tasync: true,\n\t\twrapped,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value !== null) dataset = await this.wrapped[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.value === null) _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nonNullish/nonNullish.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonNullish(wrapped, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"non_nullish\",\n\t\treference: nonNullish,\n\t\texpects: \"(!null & !undefined)\",\n\t\tasync: false,\n\t\twrapped,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (!(dataset.value === null || dataset.value === void 0)) dataset = this.wrapped[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.value === null || dataset.value === void 0) _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nonNullish/nonNullishAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonNullishAsync(wrapped, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"non_nullish\",\n\t\treference: nonNullishAsync,\n\t\texpects: \"(!null & !undefined)\",\n\t\tasync: true,\n\t\twrapped,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (!(dataset.value === null || dataset.value === void 0)) dataset = await this.wrapped[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.value === null || dataset.value === void 0) _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nonOptional/nonOptional.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonOptional(wrapped, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"non_optional\",\n\t\treference: nonOptional,\n\t\texpects: \"!undefined\",\n\t\tasync: false,\n\t\twrapped,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value !== void 0) dataset = this.wrapped[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.value === void 0) _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nonOptional/nonOptionalAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonOptionalAsync(wrapped, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"non_optional\",\n\t\treference: nonOptionalAsync,\n\t\texpects: \"!undefined\",\n\t\tasync: true,\n\t\twrapped,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value !== void 0) dataset = await this.wrapped[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.value === void 0) _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/null/null.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction null_(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"null\",\n\t\treference: null_,\n\t\texpects: \"null\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === null) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nullable/nullable.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nullable(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"nullable\",\n\t\treference: nullable,\n\t\texpects: `(${wrapped.expects} | null)`,\n\t\tasync: false,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === null) {\n\t\t\t\tif (this.default !== void 0) dataset.value = /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === null) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nullable/nullableAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nullableAsync(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"nullable\",\n\t\treference: nullableAsync,\n\t\texpects: `(${wrapped.expects} | null)`,\n\t\tasync: true,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === null) {\n\t\t\t\tif (this.default !== void 0) dataset.value = await /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === null) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nullish/nullish.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nullish(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"nullish\",\n\t\treference: nullish,\n\t\texpects: `(${wrapped.expects} | null | undefined)`,\n\t\tasync: false,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === null || dataset.value === void 0) {\n\t\t\t\tif (this.default !== void 0) dataset.value = /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === null || dataset.value === void 0) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nullish/nullishAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nullishAsync(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"nullish\",\n\t\treference: nullishAsync,\n\t\texpects: `(${wrapped.expects} | null | undefined)`,\n\t\tasync: true,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === null || dataset.value === void 0) {\n\t\t\t\tif (this.default !== void 0) dataset.value = await /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === null || dataset.value === void 0) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/number/number.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction number(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"number\",\n\t\treference: number,\n\t\texpects: \"number\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (typeof dataset.value === \"number\" && !isNaN(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/object/object.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction object(entries$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"object\",\n\t\treference: object,\n\t\texpects: \"Object\",\n\t\tasync: false,\n\t\tentries: entries$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tfor (const key in this.entries) {\n\t\t\t\t\tconst valueSchema = this.entries[key];\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\tconst valueDataset = valueSchema[\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/object/objectAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction objectAsync(entries$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"object\",\n\t\treference: objectAsync,\n\t\texpects: \"Object\",\n\t\tasync: true,\n\t\tentries: entries$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tconst valueDatasets = await Promise.all(Object.entries(this.entries).map(async ([key, valueSchema]) => {\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : await /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\t\tawait valueSchema[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tinput[key],\n\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\tnull\n\t\t\t\t\t];\n\t\t\t\t}));\n\t\t\t\tfor (const [key, value$1, valueSchema, valueDataset] of valueDatasets) if (valueDataset) {\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = await /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/objectWithRest/objectWithRest.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction objectWithRest(entries$1, rest, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"object_with_rest\",\n\t\treference: objectWithRest,\n\t\texpects: \"Object\",\n\t\tasync: false,\n\t\tentries: entries$1,\n\t\trest,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tfor (const key in this.entries) {\n\t\t\t\t\tconst valueSchema = this.entries[key];\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\tconst valueDataset = valueSchema[\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) {\n\t\t\t\t\tfor (const key in input) if (/* @__PURE__ */ _isValidObjectKey(input, key) && !(key in this.entries)) {\n\t\t\t\t\t\tconst valueDataset = this.rest[\"~run\"]({ value: input[key] }, config$1);\n\t\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/objectWithRest/objectWithRestAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction objectWithRestAsync(entries$1, rest, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"object_with_rest\",\n\t\treference: objectWithRestAsync,\n\t\texpects: \"Object\",\n\t\tasync: true,\n\t\tentries: entries$1,\n\t\trest,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tconst [normalDatasets, restDatasets] = await Promise.all([Promise.all(Object.entries(this.entries).map(async ([key, valueSchema]) => {\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : await /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\t\tawait valueSchema[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tinput[key],\n\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\tnull\n\t\t\t\t\t];\n\t\t\t\t})), Promise.all(Object.entries(input).filter(([key]) => /* @__PURE__ */ _isValidObjectKey(input, key) && !(key in this.entries)).map(async ([key, value$1]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue$1,\n\t\t\t\t\tawait this.rest[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t]))]);\n\t\t\t\tfor (const [key, value$1, valueSchema, valueDataset] of normalDatasets) if (valueDataset) {\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = await /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) for (const [key, value$1, valueDataset] of restDatasets) {\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/optional/optional.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction optional(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"optional\",\n\t\treference: optional,\n\t\texpects: `(${wrapped.expects} | undefined)`,\n\t\tasync: false,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === void 0) {\n\t\t\t\tif (this.default !== void 0) dataset.value = /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === void 0) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/optional/optionalAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction optionalAsync(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"optional\",\n\t\treference: optionalAsync,\n\t\texpects: `(${wrapped.expects} | undefined)`,\n\t\tasync: true,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === void 0) {\n\t\t\t\tif (this.default !== void 0) dataset.value = await /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === void 0) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/picklist/picklist.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction picklist(options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"picklist\",\n\t\treference: picklist,\n\t\texpects: /* @__PURE__ */ _joinExpects(options.map(_stringify), \"|\"),\n\t\tasync: false,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (this.options.includes(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/promise/promise.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction promise(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"promise\",\n\t\treference: promise,\n\t\texpects: \"Promise\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value instanceof Promise) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/record/record.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction record(key, value$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"record\",\n\t\treference: record,\n\t\texpects: \"Object\",\n\t\tasync: false,\n\t\tkey,\n\t\tvalue: value$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tfor (const entryKey in input) if (/* @__PURE__ */ _isValidObjectKey(input, entryKey)) {\n\t\t\t\t\tconst entryValue = input[entryKey];\n\t\t\t\t\tconst keyDataset = this.key[\"~run\"]({ value: entryKey }, config$1);\n\t\t\t\t\tif (keyDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: entryKey,\n\t\t\t\t\t\t\tvalue: entryValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of keyDataset.issues) {\n\t\t\t\t\t\t\tissue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = keyDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst valueDataset = this.value[\"~run\"]({ value: entryValue }, config$1);\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: entryKey,\n\t\t\t\t\t\t\tvalue: entryValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!keyDataset.typed || !valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tif (keyDataset.typed) dataset.value[keyDataset.value] = valueDataset.value;\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/record/recordAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction recordAsync(key, value$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"record\",\n\t\treference: recordAsync,\n\t\texpects: \"Object\",\n\t\tasync: true,\n\t\tkey,\n\t\tvalue: value$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tconst datasets = await Promise.all(Object.entries(input).filter(([key$1]) => /* @__PURE__ */ _isValidObjectKey(input, key$1)).map(([entryKey, entryValue]) => Promise.all([\n\t\t\t\t\tentryKey,\n\t\t\t\t\tentryValue,\n\t\t\t\t\tthis.key[\"~run\"]({ value: entryKey }, config$1),\n\t\t\t\t\tthis.value[\"~run\"]({ value: entryValue }, config$1)\n\t\t\t\t])));\n\t\t\t\tfor (const [entryKey, entryValue, keyDataset, valueDataset] of datasets) {\n\t\t\t\t\tif (keyDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: entryKey,\n\t\t\t\t\t\t\tvalue: entryValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of keyDataset.issues) {\n\t\t\t\t\t\t\tissue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = keyDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: entryKey,\n\t\t\t\t\t\t\tvalue: entryValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!keyDataset.typed || !valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tif (keyDataset.typed) dataset.value[keyDataset.value] = valueDataset.value;\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/set/set.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction set(value$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"set\",\n\t\treference: set,\n\t\texpects: \"Set\",\n\t\tasync: false,\n\t\tvalue: value$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input instanceof Set) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = /* @__PURE__ */ new Set();\n\t\t\t\tfor (const inputValue of input) {\n\t\t\t\t\tconst valueDataset = this.value[\"~run\"]({ value: inputValue }, config$1);\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"set\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: null,\n\t\t\t\t\t\t\tvalue: inputValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.add(valueDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/set/setAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction setAsync(value$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"set\",\n\t\treference: setAsync,\n\t\texpects: \"Set\",\n\t\tasync: true,\n\t\tvalue: value$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input instanceof Set) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = /* @__PURE__ */ new Set();\n\t\t\t\tconst valueDatasets = await Promise.all([...input].map(async (inputValue) => [inputValue, await this.value[\"~run\"]({ value: inputValue }, config$1)]));\n\t\t\t\tfor (const [inputValue, valueDataset] of valueDatasets) {\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"set\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: null,\n\t\t\t\t\t\t\tvalue: inputValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.add(valueDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/strictObject/strictObject.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction strictObject(entries$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"strict_object\",\n\t\treference: strictObject,\n\t\texpects: \"Object\",\n\t\tasync: false,\n\t\tentries: entries$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tfor (const key in this.entries) {\n\t\t\t\t\tconst valueSchema = this.entries[key];\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\tconst valueDataset = valueSchema[\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) {\n\t\t\t\t\tfor (const key in input) if (!(key in this.entries)) {\n\t\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\t\tinput: key,\n\t\t\t\t\t\t\texpected: \"never\",\n\t\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/strictObject/strictObjectAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction strictObjectAsync(entries$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"strict_object\",\n\t\treference: strictObjectAsync,\n\t\texpects: \"Object\",\n\t\tasync: true,\n\t\tentries: entries$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tconst valueDatasets = await Promise.all(Object.entries(this.entries).map(async ([key, valueSchema]) => {\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : await /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\t\tawait valueSchema[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tinput[key],\n\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\tnull\n\t\t\t\t\t];\n\t\t\t\t}));\n\t\t\t\tfor (const [key, value$1, valueSchema, valueDataset] of valueDatasets) if (valueDataset) {\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = await /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) {\n\t\t\t\t\tfor (const key in input) if (!(key in this.entries)) {\n\t\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\t\tinput: key,\n\t\t\t\t\t\t\texpected: \"never\",\n\t\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/strictTuple/strictTuple.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction strictTuple(items, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"strict_tuple\",\n\t\treference: strictTuple,\n\t\texpects: \"Array\",\n\t\tasync: false,\n\t\titems,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tfor (let key = 0; key < this.items.length; key++) {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\tconst itemDataset = this.items[key][\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t\tif (!(dataset.issues && config$1.abortEarly) && this.items.length < input.length) _addIssue(this, \"type\", dataset, config$1, {\n\t\t\t\t\tinput: input[this.items.length],\n\t\t\t\t\texpected: \"never\",\n\t\t\t\t\tpath: [{\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\tkey: this.items.length,\n\t\t\t\t\t\tvalue: input[this.items.length]\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/strictTuple/strictTupleAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction strictTupleAsync(items, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"strict_tuple\",\n\t\treference: strictTupleAsync,\n\t\texpects: \"Array\",\n\t\tasync: true,\n\t\titems,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tconst itemDatasets = await Promise.all(this.items.map(async (item, key) => {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\tawait item[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t];\n\t\t\t\t}));\n\t\t\t\tfor (const [key, value$1, itemDataset] of itemDatasets) {\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t\tif (!(dataset.issues && config$1.abortEarly) && this.items.length < input.length) _addIssue(this, \"type\", dataset, config$1, {\n\t\t\t\t\tinput: input[this.items.length],\n\t\t\t\t\texpected: \"never\",\n\t\t\t\t\tpath: [{\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\tkey: this.items.length,\n\t\t\t\t\t\tvalue: input[this.items.length]\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/string/string.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction string(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"string\",\n\t\treference: string,\n\t\texpects: \"string\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (typeof dataset.value === \"string\") dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/symbol/symbol.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction symbol(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"symbol\",\n\t\treference: symbol,\n\t\texpects: \"symbol\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (typeof dataset.value === \"symbol\") dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/tuple/tuple.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction tuple(items, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"tuple\",\n\t\treference: tuple,\n\t\texpects: \"Array\",\n\t\tasync: false,\n\t\titems,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tfor (let key = 0; key < this.items.length; key++) {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\tconst itemDataset = this.items[key][\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/tuple/tupleAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction tupleAsync(items, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"tuple\",\n\t\treference: tupleAsync,\n\t\texpects: \"Array\",\n\t\tasync: true,\n\t\titems,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tconst itemDatasets = await Promise.all(this.items.map(async (item, key) => {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\tawait item[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t];\n\t\t\t\t}));\n\t\t\t\tfor (const [key, value$1, itemDataset] of itemDatasets) {\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/tupleWithRest/tupleWithRest.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction tupleWithRest(items, rest, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"tuple_with_rest\",\n\t\treference: tupleWithRest,\n\t\texpects: \"Array\",\n\t\tasync: false,\n\t\titems,\n\t\trest,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tfor (let key = 0; key < this.items.length; key++) {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\tconst itemDataset = this.items[key][\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) for (let key = this.items.length; key < input.length; key++) {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\tconst itemDataset = this.rest[\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/tupleWithRest/tupleWithRestAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction tupleWithRestAsync(items, rest, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"tuple_with_rest\",\n\t\treference: tupleWithRestAsync,\n\t\texpects: \"Array\",\n\t\tasync: true,\n\t\titems,\n\t\trest,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tconst [normalDatasets, restDatasets] = await Promise.all([Promise.all(this.items.map(async (item, key) => {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\tawait item[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t];\n\t\t\t\t})), Promise.all(input.slice(this.items.length).map(async (value$1, key) => {\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey + this.items.length,\n\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\tawait this.rest[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t];\n\t\t\t\t}))]);\n\t\t\t\tfor (const [key, value$1, itemDataset] of normalDatasets) {\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) for (const [key, value$1, itemDataset] of restDatasets) {\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/undefined/undefined.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction undefined_(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"undefined\",\n\t\treference: undefined_,\n\t\texpects: \"undefined\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === void 0) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/undefinedable/undefinedable.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction undefinedable(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"undefinedable\",\n\t\treference: undefinedable,\n\t\texpects: `(${wrapped.expects} | undefined)`,\n\t\tasync: false,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === void 0) {\n\t\t\t\tif (this.default !== void 0) dataset.value = /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === void 0) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/undefinedable/undefinedableAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction undefinedableAsync(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"undefinedable\",\n\t\treference: undefinedableAsync,\n\t\texpects: `(${wrapped.expects} | undefined)`,\n\t\tasync: true,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === void 0) {\n\t\t\t\tif (this.default !== void 0) dataset.value = await /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === void 0) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/union/utils/_subIssues/_subIssues.ts\n/**\n* Returns the sub issues of the provided datasets for the union issue.\n*\n* @param datasets The datasets.\n*\n* @returns The sub issues.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _subIssues(datasets) {\n\tlet issues;\n\tif (datasets) for (const dataset of datasets) if (issues) issues.push(...dataset.issues);\n\telse issues = dataset.issues;\n\treturn issues;\n}\n\n//#endregion\n//#region src/schemas/union/union.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction union(options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"union\",\n\t\treference: union,\n\t\texpects: /* @__PURE__ */ _joinExpects(options.map((option) => option.expects), \"|\"),\n\t\tasync: false,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tlet validDataset;\n\t\t\tlet typedDatasets;\n\t\t\tlet untypedDatasets;\n\t\t\tfor (const schema of this.options) {\n\t\t\t\tconst optionDataset = schema[\"~run\"]({ value: dataset.value }, config$1);\n\t\t\t\tif (optionDataset.typed) if (optionDataset.issues) if (typedDatasets) typedDatasets.push(optionDataset);\n\t\t\t\telse typedDatasets = [optionDataset];\n\t\t\t\telse {\n\t\t\t\t\tvalidDataset = optionDataset;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse if (untypedDatasets) untypedDatasets.push(optionDataset);\n\t\t\t\telse untypedDatasets = [optionDataset];\n\t\t\t}\n\t\t\tif (validDataset) return validDataset;\n\t\t\tif (typedDatasets) {\n\t\t\t\tif (typedDatasets.length === 1) return typedDatasets[0];\n\t\t\t\t_addIssue(this, \"type\", dataset, config$1, { issues: /* @__PURE__ */ _subIssues(typedDatasets) });\n\t\t\t\tdataset.typed = true;\n\t\t\t} else if (untypedDatasets?.length === 1) return untypedDatasets[0];\n\t\t\telse _addIssue(this, \"type\", dataset, config$1, { issues: /* @__PURE__ */ _subIssues(untypedDatasets) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/union/unionAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction unionAsync(options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"union\",\n\t\treference: unionAsync,\n\t\texpects: /* @__PURE__ */ _joinExpects(options.map((option) => option.expects), \"|\"),\n\t\tasync: true,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tlet validDataset;\n\t\t\tlet typedDatasets;\n\t\t\tlet untypedDatasets;\n\t\t\tfor (const schema of this.options) {\n\t\t\t\tconst optionDataset = await schema[\"~run\"]({ value: dataset.value }, config$1);\n\t\t\t\tif (optionDataset.typed) if (optionDataset.issues) if (typedDatasets) typedDatasets.push(optionDataset);\n\t\t\t\telse typedDatasets = [optionDataset];\n\t\t\t\telse {\n\t\t\t\t\tvalidDataset = optionDataset;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse if (untypedDatasets) untypedDatasets.push(optionDataset);\n\t\t\t\telse untypedDatasets = [optionDataset];\n\t\t\t}\n\t\t\tif (validDataset) return validDataset;\n\t\t\tif (typedDatasets) {\n\t\t\t\tif (typedDatasets.length === 1) return typedDatasets[0];\n\t\t\t\t_addIssue(this, \"type\", dataset, config$1, { issues: /* @__PURE__ */ _subIssues(typedDatasets) });\n\t\t\t\tdataset.typed = true;\n\t\t\t} else if (untypedDatasets?.length === 1) return untypedDatasets[0];\n\t\t\telse _addIssue(this, \"type\", dataset, config$1, { issues: /* @__PURE__ */ _subIssues(untypedDatasets) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/unknown/unknown.ts\n/**\n* Creates a unknown schema.\n*\n* @returns A unknown schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction unknown() {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"unknown\",\n\t\treference: unknown,\n\t\texpects: \"unknown\",\n\t\tasync: false,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.typed = true;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/variant/variant.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction variant(key, options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"variant\",\n\t\treference: variant,\n\t\texpects: \"Object\",\n\t\tasync: false,\n\t\tkey,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tlet outputDataset;\n\t\t\t\tlet maxDiscriminatorPriority = 0;\n\t\t\t\tlet invalidDiscriminatorKey = this.key;\n\t\t\t\tlet expectedDiscriminators = [];\n\t\t\t\tconst parseOptions = (variant$1, allKeys) => {\n\t\t\t\t\tfor (const schema of variant$1.options) {\n\t\t\t\t\t\tif (schema.type === \"variant\") parseOptions(schema, new Set(allKeys).add(schema.key));\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tlet keysAreValid = true;\n\t\t\t\t\t\t\tlet currentPriority = 0;\n\t\t\t\t\t\t\tfor (const currentKey of allKeys) {\n\t\t\t\t\t\t\t\tconst discriminatorSchema = schema.entries[currentKey];\n\t\t\t\t\t\t\t\tif (currentKey in input ? discriminatorSchema[\"~run\"]({\n\t\t\t\t\t\t\t\t\ttyped: false,\n\t\t\t\t\t\t\t\t\tvalue: input[currentKey]\n\t\t\t\t\t\t\t\t}, { abortEarly: true }).issues : discriminatorSchema.type !== \"exact_optional\" && discriminatorSchema.type !== \"optional\" && discriminatorSchema.type !== \"nullish\") {\n\t\t\t\t\t\t\t\t\tkeysAreValid = false;\n\t\t\t\t\t\t\t\t\tif (invalidDiscriminatorKey !== currentKey && (maxDiscriminatorPriority < currentPriority || maxDiscriminatorPriority === currentPriority && currentKey in input && !(invalidDiscriminatorKey in input))) {\n\t\t\t\t\t\t\t\t\t\tmaxDiscriminatorPriority = currentPriority;\n\t\t\t\t\t\t\t\t\t\tinvalidDiscriminatorKey = currentKey;\n\t\t\t\t\t\t\t\t\t\texpectedDiscriminators = [];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (invalidDiscriminatorKey === currentKey) expectedDiscriminators.push(schema.entries[currentKey].expects);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcurrentPriority++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (keysAreValid) {\n\t\t\t\t\t\t\t\tconst optionDataset = schema[\"~run\"]({ value: input }, config$1);\n\t\t\t\t\t\t\t\tif (!outputDataset || !outputDataset.typed && optionDataset.typed) outputDataset = optionDataset;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (outputDataset && !outputDataset.issues) break;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tparseOptions(this, new Set([this.key]));\n\t\t\t\tif (outputDataset) return outputDataset;\n\t\t\t\t_addIssue(this, \"type\", dataset, config$1, {\n\t\t\t\t\tinput: input[invalidDiscriminatorKey],\n\t\t\t\t\texpected: /* @__PURE__ */ _joinExpects(expectedDiscriminators, \"|\"),\n\t\t\t\t\tpath: [{\n\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\tkey: invalidDiscriminatorKey,\n\t\t\t\t\t\tvalue: input[invalidDiscriminatorKey]\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/variant/variantAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction variantAsync(key, options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"variant\",\n\t\treference: variantAsync,\n\t\texpects: \"Object\",\n\t\tasync: true,\n\t\tkey,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tlet outputDataset;\n\t\t\t\tlet maxDiscriminatorPriority = 0;\n\t\t\t\tlet invalidDiscriminatorKey = this.key;\n\t\t\t\tlet expectedDiscriminators = [];\n\t\t\t\tconst parseOptions = async (variant$1, allKeys) => {\n\t\t\t\t\tfor (const schema of variant$1.options) {\n\t\t\t\t\t\tif (schema.type === \"variant\") await parseOptions(schema, new Set(allKeys).add(schema.key));\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tlet keysAreValid = true;\n\t\t\t\t\t\t\tlet currentPriority = 0;\n\t\t\t\t\t\t\tfor (const currentKey of allKeys) {\n\t\t\t\t\t\t\t\tconst discriminatorSchema = schema.entries[currentKey];\n\t\t\t\t\t\t\t\tif (currentKey in input ? (await discriminatorSchema[\"~run\"]({\n\t\t\t\t\t\t\t\t\ttyped: false,\n\t\t\t\t\t\t\t\t\tvalue: input[currentKey]\n\t\t\t\t\t\t\t\t}, { abortEarly: true })).issues : discriminatorSchema.type !== \"exact_optional\" && discriminatorSchema.type !== \"optional\" && discriminatorSchema.type !== \"nullish\") {\n\t\t\t\t\t\t\t\t\tkeysAreValid = false;\n\t\t\t\t\t\t\t\t\tif (invalidDiscriminatorKey !== currentKey && (maxDiscriminatorPriority < currentPriority || maxDiscriminatorPriority === currentPriority && currentKey in input && !(invalidDiscriminatorKey in input))) {\n\t\t\t\t\t\t\t\t\t\tmaxDiscriminatorPriority = currentPriority;\n\t\t\t\t\t\t\t\t\t\tinvalidDiscriminatorKey = currentKey;\n\t\t\t\t\t\t\t\t\t\texpectedDiscriminators = [];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (invalidDiscriminatorKey === currentKey) expectedDiscriminators.push(schema.entries[currentKey].expects);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcurrentPriority++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (keysAreValid) {\n\t\t\t\t\t\t\t\tconst optionDataset = await schema[\"~run\"]({ value: input }, config$1);\n\t\t\t\t\t\t\t\tif (!outputDataset || !outputDataset.typed && optionDataset.typed) outputDataset = optionDataset;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (outputDataset && !outputDataset.issues) break;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tawait parseOptions(this, new Set([this.key]));\n\t\t\t\tif (outputDataset) return outputDataset;\n\t\t\t\t_addIssue(this, \"type\", dataset, config$1, {\n\t\t\t\t\tinput: input[invalidDiscriminatorKey],\n\t\t\t\t\texpected: /* @__PURE__ */ _joinExpects(expectedDiscriminators, \"|\"),\n\t\t\t\t\tpath: [{\n\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\tkey: invalidDiscriminatorKey,\n\t\t\t\t\t\tvalue: input[invalidDiscriminatorKey]\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/void/void.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction void_(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"void\",\n\t\treference: void_,\n\t\texpects: \"void\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === void 0) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/keyof/keyof.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction keyof(schema, message$1) {\n\treturn /* @__PURE__ */ picklist(Object.keys(schema.entries), message$1);\n}\n\n//#endregion\n//#region src/methods/message/message.ts\n/**\n* Changes the local message configuration of a schema.\n*\n* @param schema The schema to configure.\n* @param message_ The error message.\n*\n* @returns The configured schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction message(schema, message_) {\n\treturn {\n\t\t...schema,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\treturn schema[\"~run\"](dataset, {\n\t\t\t\t...config$1,\n\t\t\t\tmessage: message_\n\t\t\t});\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/omit/omit.ts\n/**\n* Creates a modified copy of an object schema that does not contain the\n* selected entries.\n*\n* @param schema The schema to omit from.\n* @param keys The selected entries.\n*\n* @returns An object schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction omit(schema, keys) {\n\tconst entries$1 = { ...schema.entries };\n\tfor (const key of keys) delete entries$1[key];\n\treturn {\n\t\t...schema,\n\t\tentries: entries$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/parse/parse.ts\n/**\n* Parses an unknown input based on a schema.\n*\n* @param schema The schema to be used.\n* @param input The input to be parsed.\n* @param config The parse configuration.\n*\n* @returns The parsed input.\n*/\nfunction parse(schema, input, config$1) {\n\tconst dataset = schema[\"~run\"]({ value: input }, /* @__PURE__ */ getGlobalConfig(config$1));\n\tif (dataset.issues) throw new ValiError(dataset.issues);\n\treturn dataset.value;\n}\n\n//#endregion\n//#region src/methods/parse/parseAsync.ts\n/**\n* Parses an unknown input based on a schema.\n*\n* @param schema The schema to be used.\n* @param input The input to be parsed.\n* @param config The parse configuration.\n*\n* @returns The parsed input.\n*/\nasync function parseAsync(schema, input, config$1) {\n\tconst dataset = await schema[\"~run\"]({ value: input }, /* @__PURE__ */ getGlobalConfig(config$1));\n\tif (dataset.issues) throw new ValiError(dataset.issues);\n\treturn dataset.value;\n}\n\n//#endregion\n//#region src/methods/parser/parser.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction parser(schema, config$1) {\n\tconst func = (input) => parse(schema, input, config$1);\n\tfunc.schema = schema;\n\tfunc.config = config$1;\n\treturn func;\n}\n\n//#endregion\n//#region src/methods/parser/parserAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction parserAsync(schema, config$1) {\n\tconst func = (input) => parseAsync(schema, input, config$1);\n\tfunc.schema = schema;\n\tfunc.config = config$1;\n\treturn func;\n}\n\n//#endregion\n//#region src/methods/partial/partial.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction partial(schema, keys) {\n\tconst entries$1 = {};\n\tfor (const key in schema.entries) entries$1[key] = !keys || keys.includes(key) ? /* @__PURE__ */ optional(schema.entries[key]) : schema.entries[key];\n\treturn {\n\t\t...schema,\n\t\tentries: entries$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/partial/partialAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction partialAsync(schema, keys) {\n\tconst entries$1 = {};\n\tfor (const key in schema.entries) entries$1[key] = !keys || keys.includes(key) ? /* @__PURE__ */ optionalAsync(schema.entries[key]) : schema.entries[key];\n\treturn {\n\t\t...schema,\n\t\tentries: entries$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/pick/pick.ts\n/**\n* Creates a modified copy of an object schema that contains only the selected\n* entries.\n*\n* @param schema The schema to pick from.\n* @param keys The selected entries.\n*\n* @returns An object schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction pick(schema, keys) {\n\tconst entries$1 = {};\n\tfor (const key of keys) entries$1[key] = schema.entries[key];\n\treturn {\n\t\t...schema,\n\t\tentries: entries$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/pipe/pipe.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction pipe(...pipe$1) {\n\treturn {\n\t\t...pipe$1[0],\n\t\tpipe: pipe$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tfor (const item of pipe$1) if (item.kind !== \"metadata\") {\n\t\t\t\tif (dataset.issues && (item.kind === \"schema\" || item.kind === \"transformation\")) {\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly && !config$1.abortPipeEarly) dataset = item[\"~run\"](dataset, config$1);\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/pipe/pipeAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction pipeAsync(...pipe$1) {\n\treturn {\n\t\t...pipe$1[0],\n\t\tpipe: pipe$1,\n\t\tasync: true,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tfor (const item of pipe$1) if (item.kind !== \"metadata\") {\n\t\t\t\tif (dataset.issues && (item.kind === \"schema\" || item.kind === \"transformation\")) {\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly && !config$1.abortPipeEarly) dataset = await item[\"~run\"](dataset, config$1);\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/required/required.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction required(schema, arg2, arg3) {\n\tconst keys = Array.isArray(arg2) ? arg2 : void 0;\n\tconst message$1 = Array.isArray(arg2) ? arg3 : arg2;\n\tconst entries$1 = {};\n\tfor (const key in schema.entries) entries$1[key] = !keys || keys.includes(key) ? /* @__PURE__ */ nonOptional(schema.entries[key], message$1) : schema.entries[key];\n\treturn {\n\t\t...schema,\n\t\tentries: entries$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/required/requiredAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction requiredAsync(schema, arg2, arg3) {\n\tconst keys = Array.isArray(arg2) ? arg2 : void 0;\n\tconst message$1 = Array.isArray(arg2) ? arg3 : arg2;\n\tconst entries$1 = {};\n\tfor (const key in schema.entries) entries$1[key] = !keys || keys.includes(key) ? /* @__PURE__ */ nonOptionalAsync(schema.entries[key], message$1) : schema.entries[key];\n\treturn {\n\t\t...schema,\n\t\tentries: entries$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/safeParse/safeParse.ts\n/**\n* Parses an unknown input based on a schema.\n*\n* @param schema The schema to be used.\n* @param input The input to be parsed.\n* @param config The parse configuration.\n*\n* @returns The parse result.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction safeParse(schema, input, config$1) {\n\tconst dataset = schema[\"~run\"]({ value: input }, /* @__PURE__ */ getGlobalConfig(config$1));\n\treturn {\n\t\ttyped: dataset.typed,\n\t\tsuccess: !dataset.issues,\n\t\toutput: dataset.value,\n\t\tissues: dataset.issues\n\t};\n}\n\n//#endregion\n//#region src/methods/safeParse/safeParseAsync.ts\n/**\n* Parses an unknown input based on a schema.\n*\n* @param schema The schema to be used.\n* @param input The input to be parsed.\n* @param config The parse configuration.\n*\n* @returns The parse result.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nasync function safeParseAsync(schema, input, config$1) {\n\tconst dataset = await schema[\"~run\"]({ value: input }, /* @__PURE__ */ getGlobalConfig(config$1));\n\treturn {\n\t\ttyped: dataset.typed,\n\t\tsuccess: !dataset.issues,\n\t\toutput: dataset.value,\n\t\tissues: dataset.issues\n\t};\n}\n\n//#endregion\n//#region src/methods/safeParser/safeParser.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction safeParser(schema, config$1) {\n\tconst func = (input) => /* @__PURE__ */ safeParse(schema, input, config$1);\n\tfunc.schema = schema;\n\tfunc.config = config$1;\n\treturn func;\n}\n\n//#endregion\n//#region src/methods/safeParser/safeParserAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction safeParserAsync(schema, config$1) {\n\tconst func = (input) => /* @__PURE__ */ safeParseAsync(schema, input, config$1);\n\tfunc.schema = schema;\n\tfunc.config = config$1;\n\treturn func;\n}\n\n//#endregion\n//#region src/methods/summarize/summarize.ts\n/**\n* Summarize the error messages of issues in a pretty-printable multi-line string.\n*\n* @param issues The list of issues.\n*\n* @returns A summary of the issues.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction summarize(issues) {\n\tlet summary = \"\";\n\tfor (const issue of issues) {\n\t\tif (summary) summary += \"\\n\";\n\t\tsummary += `× ${issue.message}`;\n\t\tconst dotPath = /* @__PURE__ */ getDotPath(issue);\n\t\tif (dotPath) summary += `\\n → at ${dotPath}`;\n\t}\n\treturn summary;\n}\n\n//#endregion\n//#region src/methods/unwrap/unwrap.ts\n/**\n* Unwraps the wrapped schema.\n*\n* @param schema The schema to be unwrapped.\n*\n* @returns The unwrapped schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction unwrap(schema) {\n\treturn schema.wrapped;\n}\n\n//#endregion\nexport { BASE64_REGEX, BIC_REGEX, CUID2_REGEX, DECIMAL_REGEX, DIGITS_REGEX, EMAIL_REGEX, EMOJI_REGEX, HEXADECIMAL_REGEX, HEX_COLOR_REGEX, IMEI_REGEX, IPV4_REGEX, IPV6_REGEX, IP_REGEX, ISO_DATE_REGEX, ISO_DATE_TIME_REGEX, ISO_TIMESTAMP_REGEX, ISO_TIME_REGEX, ISO_TIME_SECOND_REGEX, ISO_WEEK_REGEX, MAC48_REGEX, MAC64_REGEX, MAC_REGEX, NANO_ID_REGEX, OCTAL_REGEX, RFC_EMAIL_REGEX, SLUG_REGEX, ULID_REGEX, UUID_REGEX, ValiError, _addIssue, _getByteCount, _getGraphemeCount, _getLastMetadata, _getStandardProps, _getWordCount, _isLuhnAlgo, _isValidObjectKey, _joinExpects, _stringify, any, args, argsAsync, array, arrayAsync, assert, awaitAsync, base64, bic, bigint, blob, boolean, brand, bytes, check, checkAsync, checkItems, checkItemsAsync, config, creditCard, cuid2, custom, customAsync, date, decimal, deleteGlobalConfig, deleteGlobalMessage, deleteSchemaMessage, deleteSpecificMessage, description, digits, email, emoji, empty, endsWith, entries, entriesFromList, entriesFromObjects, enum_ as enum, enum_, everyItem, exactOptional, exactOptionalAsync, examples, excludes, fallback, fallbackAsync, file, filterItems, findItem, finite, flatten, flavor, forward, forwardAsync, function_ as function, function_, getDefault, getDefaults, getDefaultsAsync, getDescription, getDotPath, getExamples, getFallback, getFallbacks, getFallbacksAsync, getGlobalConfig, getGlobalMessage, getMetadata, getSchemaMessage, getSpecificMessage, getTitle, graphemes, gtValue, hash, hexColor, hexadecimal, imei, includes, instance, integer, intersect, intersectAsync, ip, ipv4, ipv6, is, isOfKind, isOfType, isValiError, isoDate, isoDateTime, isoTime, isoTimeSecond, isoTimestamp, isoWeek, keyof, lazy, lazyAsync, length, literal, looseObject, looseObjectAsync, looseTuple, looseTupleAsync, ltValue, mac, mac48, mac64, map, mapAsync, mapItems, maxBytes, maxEntries, maxGraphemes, maxLength, maxSize, maxValue, maxWords, message, metadata, mimeType, minBytes, minEntries, minGraphemes, minLength, minSize, minValue, minWords, multipleOf, nan, nanoid, never, nonEmpty, nonNullable, nonNullableAsync, nonNullish, nonNullishAsync, nonOptional, nonOptionalAsync, normalize, notBytes, notEntries, notGraphemes, notLength, notSize, notValue, notValues, notWords, null_ as null, null_, nullable, nullableAsync, nullish, nullishAsync, number, object, objectAsync, objectWithRest, objectWithRestAsync, octal, omit, optional, optionalAsync, parse, parseAsync, parseJson, parser, parserAsync, partial, partialAsync, partialCheck, partialCheckAsync, pick, picklist, pipe, pipeAsync, promise, rawCheck, rawCheckAsync, rawTransform, rawTransformAsync, readonly, record, recordAsync, reduceItems, regex, required, requiredAsync, returns, returnsAsync, rfcEmail, safeInteger, safeParse, safeParseAsync, safeParser, safeParserAsync, set, setAsync, setGlobalConfig, setGlobalMessage, setSchemaMessage, setSpecificMessage, size, slug, someItem, sortItems, startsWith, strictObject, strictObjectAsync, strictTuple, strictTupleAsync, string, stringifyJson, summarize, symbol, title, toBigint, toBoolean, toDate, toLowerCase, toMaxValue, toMinValue, toNumber, toString, toUpperCase, transform, transformAsync, trim, trimEnd, trimStart, tuple, tupleAsync, tupleWithRest, tupleWithRestAsync, ulid, undefined_ as undefined, undefined_, undefinedable, undefinedableAsync, union, unionAsync, unknown, unwrap, url, uuid, value, values, variant, variantAsync, void_ as void, void_, words };","import * as v from \"valibot\";\nimport { spawn } from \"node:child_process\";\nimport { ResultAsync, err, ok } from \"neverthrow\";\n\n//#region src/schemas.ts\n/**\n* agent-browser CLI出力のvalibotスキーマ定義\n*\n* 外部CLI(agent-browser)の出力を厳密に検証するためのスキーマ。\n* 各コマンドのdataフィールドの型を定義する。\n*\n* 注意: {success, data, error}の共通構造はvalidator.ts内で処理され、\n* 外部には data の型のみがエクスポートされる。\n*/\n/**\n* open コマンドのデータスキーマ\n*/\nconst OpenDataSchema = v.object({ url: v.string() });\n/**\n* 単純操作コマンドのデータスキーマ(空オブジェクト)\n*\n* click, type, fill, hover, focus, scrollintoview, press, select, scroll, wait, close\n*/\nconst EmptyDataSchema = v.object({});\n/**\n* screenshot コマンドのデータスキーマ\n*/\nconst ScreenshotDataSchema = v.object({ path: v.string() });\n/**\n* snapshot コマンドの参照要素スキーマ\n*/\nconst SnapshotRefSchema = v.object({\n\tname: v.string(),\n\trole: v.string()\n});\n/**\n* snapshot コマンドのデータスキーマ\n*/\nconst SnapshotDataSchema = v.object({\n\tsnapshot: v.string(),\n\trefs: v.record(v.string(), SnapshotRefSchema)\n});\n/**\n* eval コマンドのデータスキーマ\n*/\nconst EvalDataSchema = v.object({ result: v.unknown() });\n/**\n* is visible コマンドのデータスキーマ\n*/\nconst IsVisibleDataSchema = v.object({ visible: v.boolean() });\n/**\n* is enabled コマンドのデータスキーマ\n*/\nconst IsEnabledDataSchema = v.object({ enabled: v.boolean() });\n/**\n* is checked コマンドのデータスキーマ\n*/\nconst IsCheckedDataSchema = v.object({ checked: v.boolean() });\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* 注意: この関数は内部実装用。外部からは commands/ 配下の型安全な関数を使用すること。\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 ResultAsync.fromPromise(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 rawError = extractErrorMessage(stdout);\n\t\t\t\tdebugLog(`command failed, rawError=${rawError}, stderr=${stderr}`);\n\t\t\t\tresolveOnce(err({\n\t\t\t\t\ttype: \"command_failed\",\n\t\t\t\t\tmessage: rawError || `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\trawError\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\t\ttype: \"command_failed\",\n\t\tmessage: \"Unexpected error during command execution\",\n\t\tcommand,\n\t\targs,\n\t\texitCode: 1,\n\t\tstderr: \"\",\n\t\trawError: null\n\t})).andThen((result) => result);\n};\n/**\n* 引数をシェルセーフにエスケープする\n*\n* shell: true を使用しているため、特殊文字(ダブルクォート、スペース等)を含む引数は\n* シェルに解釈されてしまう。シングルクォートで囲むことで保護する。\n* 引数内のシングルクォートは '\\'' でエスケープする。\n*\n* @param arg - エスケープする引数\n* @returns シェルセーフにエスケープされた引数\n*/\nconst escapeShellArg = (arg) => {\n\tif (/^[\\w./@-]+$/.test(arg)) return arg;\n\treturn `'${arg.replace(/'/g, \"'\\\\''\")}'`;\n};\n/**\n* コマンドライン引数を構築する\n*/\nconst buildArgs = (command, args, sessionName, headed) => {\n\tconst result = [command, ...args.map(escapeShellArg)];\n\tif (sessionName !== void 0) result.push(\"--session\", escapeShellArg(sessionName));\n\tif (headed) result.push(\"--headed\");\n\treturn result;\n};\n/**\n* オブジェクトかどうかを判定する型ガード\n*/\nconst isRecord = (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(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/validator.ts\n/**\n* agent-browser CLI出力のバリデーター\n*\n* 外部CLI(agent-browser)からの出力を検証し、型安全なデータに変換する。\n* success: falseの場合はエラーとして扱い、dataのみを返す。\n*/\n/**\n* agent-browserの共通出力構造スキーマ\n*\n* 内部検証用。dataフィールドの型は個別スキーマで指定する。\n*/\nconst createOutputSchema = (dataSchema) => v.object({\n\tsuccess: v.boolean(),\n\tdata: v.nullable(dataSchema),\n\terror: v.nullable(v.string())\n});\n/**\n* stdoutをJSONパースする\n*\n* @param stdout - 標準出力文字列\n* @returns パース成功時: unknown、失敗時: parse_error\n*/\nconst parseJsonOutput = (stdout) => {\n\ttry {\n\t\treturn ok(JSON.parse(stdout));\n\t} catch (e) {\n\t\treturn err({\n\t\t\ttype: \"parse_error\",\n\t\t\tmessage: e instanceof Error ? e.message : \"Unknown parse error\",\n\t\t\trawOutput: stdout\n\t\t});\n\t}\n};\n/**\n* スキーマ検証を実行する\n*\n* @param parsed - パース済みのオブジェクト\n* @param dataSchema - dataフィールドのスキーマ\n* @param command - コマンド名(エラー情報用)\n* @param rawOutput - 元の出力文字列(エラー情報用)\n* @returns 検証成功時: 検証済みの出力構造、失敗時: agent_browser_output_parse_error\n*/\nconst validateSchema = (parsed, dataSchema, command, rawOutput) => {\n\tconst outputSchema = createOutputSchema(dataSchema);\n\tconst result = v.safeParse(outputSchema, parsed);\n\tif (!result.success) return err({\n\t\ttype: \"agent_browser_output_parse_error\",\n\t\tmessage: `Schema validation failed for command \"${command}\"`,\n\t\tcommand,\n\t\tissues: result.issues,\n\t\trawOutput\n\t});\n\treturn ok(result.output);\n};\n/**\n* 出力構造からdataを抽出する\n*\n* success: falseまたはdata: nullの場合はエラーを返す\n*\n* @param output - スキーマ検証済みの出力構造\n* @param command - コマンド名(エラー情報用)\n* @returns data抽出成功時: data、失敗時: command_execution_failed\n*/\nconst extractData = (output, command) => {\n\tif (!output.success) return err({\n\t\ttype: \"command_execution_failed\",\n\t\tmessage: output.error || `Command \"${command}\" failed`,\n\t\tcommand,\n\t\trawError: output.error || \"Unknown error\"\n\t});\n\tif (output.data === null) return err({\n\t\ttype: \"command_execution_failed\",\n\t\tmessage: `Command \"${command}\" succeeded but returned no data`,\n\t\tcommand,\n\t\trawError: \"data is null\"\n\t});\n\treturn ok(output.data);\n};\n/**\n* stdout文字列をJSONパースし、検証し、dataを抽出する\n*\n* 外部境界(agent-browser CLIの出力)からのデータを厳密に検証する。\n* - JSONパースエラー → parse_error\n* - スキーマ検証エラー → agent_browser_output_parse_error\n* - success: false → command_execution_failed\n* - success: true → dataを返す\n*\n* @param stdout - executeCommandからの標準出力\n* @param dataSchema - dataフィールドの検証に使用するvalibotスキーマ\n* @param command - コマンド名(エラー情報用)\n* @returns 成功時: data、失敗時: AgentBrowserError\n*/\nconst validateAndExtractData = (stdout, dataSchema, command) => {\n\treturn parseJsonOutput(stdout).andThen((parsed) => validateSchema(parsed, dataSchema, command, stdout)).andThen((output) => extractData(output, command));\n};\n\n//#endregion\n//#region src/commands/navigation.ts\n/**\n* 指定したURLをブラウザで開く\n*\n* agent-browser の open コマンドを実行し、結果をvalibotで検証して返す。\n*\n* @param url - 開くURL\n* @param options - 実行オプション\n* @returns 成功時: OpenData、失敗時: AgentBrowserError\n*/\nconst browserOpen = (url, options = {}) => executeCommand(\"open\", [url, \"--json\"], options).andThen((stdout) => validateAndExtractData(stdout, OpenDataSchema, \"open\"));\n\n//#endregion\n//#region src/commands/interaction.ts\n/**\n* 指定したセレクタの要素をクリックする\n*\n* @param selector - クリック対象のセレクタ(CssSelector、RefSelector、CliTextSelector、CliXpathSelector)\n* @param options - 実行オプション\n* @returns 成功時: EmptyData、失敗時: AgentBrowserError\n*/\nconst browserClick = (selector, options = {}) => executeCommand(\"click\", [selector, \"--json\"], options).andThen((stdout) => validateAndExtractData(stdout, EmptyDataSchema, \"click\"));\n/**\n* 指定したセレクタの要素にテキストを入力する(既存テキストはクリアしない)\n*\n* @param selector - 入力対象のセレクタ(CssSelector、RefSelector、CliTextSelector、CliXpathSelector)\n* @param value - 入力するテキスト\n* @param options - 実行オプション\n* @returns 成功時: EmptyData、失敗時: AgentBrowserError\n*/\nconst browserType = (selector, value, options = {}) => executeCommand(\"type\", [\n\tselector,\n\tvalue,\n\t\"--json\"\n], options).andThen((stdout) => validateAndExtractData(stdout, EmptyDataSchema, \"type\"));\n/**\n* 指定したセレクタのフォーム要素にテキストを入力する(既存テキストをクリア)\n*\n* @param selector - 入力対象のセレクタ(CssSelector、RefSelector、CliTextSelector、CliXpathSelector)\n* @param value - 入力するテキスト\n* @param options - 実行オプション\n* @returns 成功時: EmptyData、失敗時: AgentBrowserError\n*/\nconst browserFill = (selector, value, options = {}) => executeCommand(\"fill\", [\n\tselector,\n\tvalue,\n\t\"--json\"\n], options).andThen((stdout) => validateAndExtractData(stdout, EmptyDataSchema, \"fill\"));\n/**\n* 指定したキーボードキーを押す\n*\n* @param key - 押すキー\n* @param options - 実行オプション\n* @returns 成功時: EmptyData、失敗時: AgentBrowserError\n*/\nconst browserPress = (key, options = {}) => executeCommand(\"press\", [key, \"--json\"], options).andThen((stdout) => validateAndExtractData(stdout, EmptyDataSchema, \"press\"));\n/**\n* 指定したセレクタの要素にマウスホバーする\n*\n* @param selector - ホバー対象のセレクタ(CssSelector、RefSelector、CliTextSelector、CliXpathSelector)\n* @param options - 実行オプション\n* @returns 成功時: EmptyData、失敗時: AgentBrowserError\n*/\nconst browserHover = (selector, options = {}) => executeCommand(\"hover\", [selector, \"--json\"], options).andThen((stdout) => validateAndExtractData(stdout, EmptyDataSchema, \"hover\"));\n/**\n* 指定したセレクタのセレクトボックスから値を選択する\n*\n* @param selector - セレクトボックスのセレクタ(CssSelector、RefSelector、CliTextSelector、CliXpathSelector)\n* @param value - 選択する値\n* @param options - 実行オプション\n* @returns 成功時: EmptyData、失敗時: AgentBrowserError\n*/\nconst browserSelect = (selector, value, options = {}) => executeCommand(\"select\", [\n\tselector,\n\tvalue,\n\t\"--json\"\n], options).andThen((stdout) => validateAndExtractData(stdout, EmptyDataSchema, \"select\"));\n/**\n* 指定したセレクタの要素にフォーカスする\n*\n* @param selector - フォーカス対象のセレクタ(CssSelector、RefSelector、CliTextSelector、CliXpathSelector)\n* @param options - 実行オプション\n* @returns 成功時: EmptyData、失敗時: AgentBrowserError\n*/\nconst browserFocus = (selector, options = {}) => executeCommand(\"focus\", [selector, \"--json\"], options).andThen((stdout) => validateAndExtractData(stdout, EmptyDataSchema, \"focus\"));\n\n//#endregion\n//#region src/commands/scroll.ts\n/**\n* ページを指定した方向と量でスクロールする\n*\n* @param direction - スクロール方向\n* @param amount - スクロール量(ピクセル)\n* @param options - 実行オプション\n* @returns 成功時: EmptyData、失敗時: AgentBrowserError\n*/\nconst browserScroll = (direction, amount, options = {}) => executeCommand(\"scroll\", [\n\tdirection,\n\tamount.toString(),\n\t\"--json\"\n], options).andThen((stdout) => validateAndExtractData(stdout, EmptyDataSchema, \"scroll\"));\n/**\n* 指定したセレクタの要素がビューポートに表示されるようにスクロールする\n*\n* @param selector - スクロール先のセレクタ(CSSセレクタ、Refセレクタ、TextSelector(text=xxx形式)、またはXpathSelector(xpath=xxx形式))\n* @param options - 実行オプション\n* @returns 成功時: EmptyData、失敗時: AgentBrowserError\n*/\nconst browserScrollIntoView = (selector, options = {}) => executeCommand(\"scrollintoview\", [selector, \"--json\"], options).andThen((stdout) => validateAndExtractData(stdout, EmptyDataSchema, \"scrollintoview\"));\n\n//#endregion\n//#region src/commands/wait.ts\n/**\n* 指定したミリ秒だけ待機する\n*\n* @param ms - 待機時間(ミリ秒)\n* @param options - 実行オプション\n* @returns 成功時: EmptyData、失敗時: AgentBrowserError\n*/\nconst browserWaitForMs = (ms, options = {}) => executeCommand(\"wait\", [ms.toString(), \"--json\"], options).andThen((stdout) => validateAndExtractData(stdout, EmptyDataSchema, \"wait\"));\n/**\n* 指定したセレクタの要素が出現するまで待機する\n*\n* @param selector - 待機対象のセレクタ(CssSelector、RefSelector、CliTextSelector、CliXpathSelector)\n* @param options - 実行オプション\n* @returns 成功時: EmptyData、失敗時: AgentBrowserError\n*/\nconst browserWaitForSelector = (selector, options = {}) => executeCommand(\"wait\", [selector, \"--json\"], options).andThen((stdout) => validateAndExtractData(stdout, EmptyDataSchema, \"wait\"));\n/**\n* 指定したテキストがページに出現するまで待機する\n*\n* @param text - 待機対象のテキスト\n* @param options - 実行オプション\n* @returns 成功時: EmptyData、失敗時: AgentBrowserError\n*/\nconst browserWaitForText = (text, options = {}) => executeCommand(\"wait\", [\n\t\"--text\",\n\ttext,\n\t\"--json\"\n], options).andThen((stdout) => validateAndExtractData(stdout, EmptyDataSchema, \"wait\"));\n/**\n* 指定したロード状態になるまで待機する\n*\n* @param state - 待機するロード状態\n* @param options - 実行オプション\n* @returns 成功時: EmptyData、失敗時: AgentBrowserError\n*/\nconst browserWaitForLoad = (state, options = {}) => executeCommand(\"wait\", [\n\t\"--load\",\n\tstate,\n\t\"--json\"\n], options).andThen((stdout) => validateAndExtractData(stdout, EmptyDataSchema, \"wait\"));\n/**\n* ネットワークがアイドル状態になるまで待機する\n*\n* browserWaitForLoad('networkidle') のショートカット\n*\n* @param options - 実行オプション\n* @returns 成功時: EmptyData、失敗時: AgentBrowserError\n*/\nconst browserWaitForNetworkIdle = (options = {}) => browserWaitForLoad(\"networkidle\", options);\n/**\n* URLが指定したパターンに変化するまで待機する\n*\n* @param pattern - URLのパターン(正規表現文字列)\n* @param options - 実行オプション\n* @returns 成功時: EmptyData、失敗時: AgentBrowserError\n*/\nconst browserWaitForUrl = (pattern, options = {}) => executeCommand(\"wait\", [\n\t\"--url\",\n\tpattern,\n\t\"--json\"\n], options).andThen((stdout) => validateAndExtractData(stdout, EmptyDataSchema, \"wait\"));\n/**\n* 指定したJavaScript式がtruthyになるまで待機する\n*\n* @param expression - JavaScript式\n* @param options - 実行オプション\n* @returns 成功時: EmptyData、失敗時: AgentBrowserError\n*/\nconst browserWaitForFunction = (expression, options = {}) => executeCommand(\"wait\", [\n\t\"--fn\",\n\texpression,\n\t\"--json\"\n], options).andThen((stdout) => validateAndExtractData(stdout, EmptyDataSchema, \"wait\"));\n\n//#endregion\n//#region src/commands/capture.ts\n/**\n* ページのスクリーンショットを撮影する\n*\n* @param path - 保存先のファイルパス\n* @param options - 実行オプション(fullPageオプション含む)\n* @returns 成功時: ScreenshotData、失敗時: AgentBrowserError\n*/\nconst browserScreenshot = (path, options = {}) => {\n\tconst { fullPage, ...executeOptions } = options;\n\treturn executeCommand(\"screenshot\", fullPage ? [\n\t\tpath,\n\t\t\"--full\",\n\t\t\"--json\"\n\t] : [path, \"--json\"], executeOptions).andThen((stdout) => validateAndExtractData(stdout, ScreenshotDataSchema, \"screenshot\"));\n};\n/**\n* ページの構造をスナップショットとして取得する\n*\n* @param options - 実行オプション\n* @returns 成功時: SnapshotData、失敗時: AgentBrowserError\n*/\nconst browserSnapshot = (options = {}) => executeCommand(\"snapshot\", [\"--json\"], options).andThen((stdout) => validateAndExtractData(stdout, SnapshotDataSchema, \"snapshot\"));\n\n//#endregion\n//#region src/commands/eval.ts\n/**\n* ブラウザコンテキストでJavaScriptを実行する\n*\n* @param script - 実行するスクリプト\n* @param options - 実行オプション\n* @returns 成功時: EvalData、失敗時: AgentBrowserError\n*/\nconst browserEval = (script, options = {}) => executeCommand(\"eval\", [script, \"--json\"], options).andThen((stdout) => validateAndExtractData(stdout, EvalDataSchema, \"eval\"));\n\n//#endregion\n//#region src/commands/is.ts\n/**\n* 指定したセレクタの要素が表示されているかチェックする\n*\n* @param selector - チェック対象のセレクタ(CssSelector、RefSelector、CliTextSelector、CliXpathSelector)\n* @param options - 実行オプション\n* @returns 成功時: IsVisibleData、失敗時: AgentBrowserError\n*/\nconst browserIsVisible = (selector, options = {}) => executeCommand(\"is\", [\n\t\"visible\",\n\tselector,\n\t\"--json\"\n], options).andThen((stdout) => validateAndExtractData(stdout, IsVisibleDataSchema, \"is visible\"));\n/**\n* 指定したセレクタの要素が有効化されているかチェックする\n*\n* @param selector - チェック対象のセレクタ(CssSelector、RefSelector、CliTextSelector、CliXpathSelector)\n* @param options - 実行オプション\n* @returns 成功時: IsEnabledData、失敗時: AgentBrowserError\n*/\nconst browserIsEnabled = (selector, options = {}) => executeCommand(\"is\", [\n\t\"enabled\",\n\tselector,\n\t\"--json\"\n], options).andThen((stdout) => validateAndExtractData(stdout, IsEnabledDataSchema, \"is enabled\"));\n/**\n* 指定したセレクタのチェックボックスがチェックされているかチェックする\n*\n* @param selector - チェック対象のセレクタ(CssSelector、RefSelector、CliTextSelector、CliXpathSelector)\n* @param options - 実行オプション\n* @returns 成功時: IsCheckedData、失敗時: AgentBrowserError\n*/\nconst browserIsChecked = (selector, options = {}) => executeCommand(\"is\", [\n\t\"checked\",\n\tselector,\n\t\"--json\"\n], options).andThen((stdout) => validateAndExtractData(stdout, IsCheckedDataSchema, \"is checked\"));\n\n//#endregion\n//#region src/commands/session.ts\n/**\n* ブラウザセッションをクローズする\n*\n* @param sessionName - クローズするセッション名\n* @returns 成功時: EmptyData、失敗時: AgentBrowserError\n*/\nconst browserClose = (sessionName) => executeCommand(\"close\", [\"--json\"], { sessionName }).andThen((stdout) => validateAndExtractData(stdout, EmptyDataSchema, \"close\"));\n\n//#endregion\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 = () => ResultAsync.fromPromise(new Promise((resolve) => {\n\tconst proc = spawn(\"npx\", [\"agent-browser\", \"--help\"], {\n\t\tstdio: [\n\t\t\t\"ignore\",\n\t\t\t\"pipe\",\n\t\t\t\"pipe\"\n\t\t],\n\t\tshell: true\n\t});\n\tproc.on(\"error\", (error) => {\n\t\tresolve(err({\n\t\t\ttype: \"not_installed\",\n\t\t\tmessage: `agent-browser is not installed: ${error.message}`\n\t\t}));\n\t});\n\tproc.on(\"close\", (exitCode) => {\n\t\tif (exitCode === 0) resolve(ok(\"agent-browser is installed\"));\n\t\telse resolve(err({\n\t\t\ttype: \"not_installed\",\n\t\t\tmessage: `agent-browser check failed with exit code ${exitCode}`\n\t\t}));\n\t});\n}), () => ({\n\ttype: \"not_installed\",\n\tmessage: \"Unexpected error during agent-browser check\"\n})).andThen((result) => result);\n\n//#endregion\n//#region src/types.ts\n/**\n* CSSセレクタ\n*\n* Playwrightに直接渡せるCSSセレクタ形式\n* 例: \"#login-button\", \".submit\", \"div\", \"[data-testid='x']\", \"button.primary\", \":nth-child(1)\"\n* 空文字列は許可されない\n*\n* 基本的な形式チェック:\n* - タグ名(英字で始まる): div, button, input\n* - ID: #xxx\n* - クラス: .xxx\n* - 属性: [xxx]\n* - 疑似セレクタ: :xxx\n* - ユニバーサル: *\n*/\nconst CssSelectorSchema = v.pipe(v.string(), v.minLength(1, \"CSSセレクタは空文字列にできません\"), v.regex(/^[a-zA-Z#.[:*]/, \"CSSセレクタはタグ名、#、.、[、:、* のいずれかで始まる必要があります\"), v.brand(\"CssSelector\"));\n/**\n* Ref形式セレクタ\n*\n* agent-browser snapshot由来の要素参照\n* 形式: @ + 英数字 (例: @e1, @e2, @login)\n*/\nconst RefSelectorSchema = v.pipe(v.string(), v.regex(/^@[a-zA-Z0-9]+$/, \"RefSelectorは@で始まり英数字が続く形式です\"), v.brand(\"RefSelector\"));\n/**\n* 全要素テキストセレクタ(AnyText)\n*\n* 全ての要素(静的テキスト含む)をテキスト内容で検索するためのセレクタ\n* assertVisible, assertNotVisible, scrollIntoView, wait で使用\n* text=形式で直接処理される\n* 空文字列は許可されない\n*/\nconst AnyTextSelectorSchema = v.pipe(v.string(), v.minLength(1, \"AnyTextSelectorは空文字列にできません\"), v.brand(\"AnyTextSelector\"));\n/**\n* インタラクティブ要素テキストセレクタ(InteractableText)\n*\n* インタラクティブ要素(ボタン、リンク、入力欄等)をテキスト内容で検索するためのセレクタ\n* click, fill, type, hover, select, assertEnabled, assertChecked で使用\n* 実行時にsnapshot→テキストマッチ→RefSelectorに変換される\n* 空文字列は許可されない\n*/\nconst InteractableTextSelectorSchema = v.pipe(v.string(), v.minLength(1, \"InteractableTextSelectorは空文字列にできません\"), v.brand(\"InteractableTextSelector\"));\n/**\n* XPathセレクタ\n*\n* XPath形式で要素を指定するセレクタ\n* 例: \"//button[@type='submit']\", \"/html/body/div\"\n* agent-browserへは xpath=//xxx 形式で渡される\n*\n* 基本的な形式チェック:\n* - 絶対パス: /xxx\n* - 相対パス: //xxx\n*/\nconst XpathSelectorSchema = v.pipe(v.string(), v.minLength(1, \"XPathセレクタは空文字列にできません\"), v.regex(/^\\//, \"XPathセレクタは / で始まる必要があります\"), v.brand(\"XpathSelector\"));\n/**\n* CLI形式テキストセレクタ\n*\n* agent-browser CLIに渡すテキスト検索形式\n* 形式: \"text=xxx\"(例: \"text=ログイン\")\n*/\nconst CliTextSelectorSchema = v.pipe(v.string(), v.regex(/^text=.+$/, \"CliTextSelectorは \\\"text=\\\" で始まる必要があります\"), v.brand(\"CliTextSelector\"));\n/**\n* CLI形式XPathセレクタ\n*\n* agent-browser CLIに渡すXPath検索形式\n* 形式: \"xpath=xxx\"(例: \"xpath=//button[@type='submit']\")\n*/\nconst CliXpathSelectorSchema = v.pipe(v.string(), v.regex(/^xpath=\\/.+$/, \"CliXpathSelectorは \\\"xpath=/\\\" で始まる必要があります\"), v.brand(\"CliXpathSelector\"));\n/**\n* URL文字列\n*\n* 例: \"https://example.com\"\n* 空文字列は許可されない(agent-browserのz.string().min(1)に対応)\n*/\nconst UrlSchema = v.pipe(v.string(), v.minLength(1, \"URLは空文字列にできません\"), v.brand(\"Url\"));\n/**\n* ファイルパス文字列\n*\n* 例: \"./screenshots/result.png\"\n* 空文字列は許可されない(agent-browserのz.string().min(1)に対応)\n*/\nconst FilePathSchema = v.pipe(v.string(), v.minLength(1, \"ファイルパスは空文字列にできません\"), v.brand(\"FilePath\"));\n/**\n* キーボードキー名\n*\n* 例: \"Enter\", \"Tab\", \"Escape\"\n* 空文字列は許可されない(agent-browserのz.string().min(1)に対応)\n*/\nconst KeyboardKeySchema = v.pipe(v.string(), v.minLength(1, \"キーボードキーは空文字列にできません\"), v.brand(\"KeyboardKey\"));\n/**\n* JavaScript式\n*\n* 例: \"document.title\", \"window.scrollY > 100\"\n* 空文字列は許可されない(agent-browserのz.string().min(1)に対応)\n*/\nconst JsExpressionSchema = v.pipe(v.string(), v.minLength(1, \"JavaScript式は空文字列にできません\"), v.brand(\"JsExpression\"));\n/**\n* CSSセレクタとして検証・変換\n*\n* 空文字列の場合はエラーを返す\n*\n* @param value - 検証する文字列\n* @returns 検証成功時はCssSelector型、失敗時はBrandValidationError\n*/\nconst asCssSelector = (value) => {\n\tconst result = v.safeParse(CssSelectorSchema, value);\n\tif (result.success) return ok(result.output);\n\treturn err({\n\t\ttype: \"brand_validation_error\",\n\t\tmessage: \"CSSセレクタは空文字列にできません\",\n\t\tfield: \"cssSelector\",\n\t\tvalue\n\t});\n};\n/**\n* RefSelectorとして検証・変換\n*\n* @で始まり英数字が続く形式でない場合はエラーを返す\n*\n* @param value - 検証する文字列\n* @returns 検証成功時はRefSelector型、失敗時はBrandValidationError\n*/\nconst asRefSelector = (value) => {\n\tconst result = v.safeParse(RefSelectorSchema, value);\n\tif (result.success) return ok(result.output);\n\treturn err({\n\t\ttype: \"brand_validation_error\",\n\t\tmessage: \"RefSelectorは@で始まり英数字が続く形式です\",\n\t\tfield: \"refSelector\",\n\t\tvalue\n\t});\n};\n/**\n* AnyTextSelectorとして検証・変換\n*\n* 空文字列の場合はエラーを返す\n*\n* @param value - 検証する文字列\n* @returns 検証成功時はAnyTextSelector型、失敗時はBrandValidationError\n*/\nconst asAnyTextSelector = (value) => {\n\tconst result = v.safeParse(AnyTextSelectorSchema, value);\n\tif (result.success) return ok(result.output);\n\treturn err({\n\t\ttype: \"brand_validation_error\",\n\t\tmessage: \"AnyTextSelectorは空文字列にできません\",\n\t\tfield: \"anyTextSelector\",\n\t\tvalue\n\t});\n};\n/**\n* InteractableTextSelectorとして検証・変換\n*\n* 空文字列の場合はエラーを返す\n*\n* @param value - 検証する文字列\n* @returns 検証成功時はInteractableTextSelector型、失敗時はBrandValidationError\n*/\nconst asInteractableTextSelector = (value) => {\n\tconst result = v.safeParse(InteractableTextSelectorSchema, value);\n\tif (result.success) return ok(result.output);\n\treturn err({\n\t\ttype: \"brand_validation_error\",\n\t\tmessage: \"InteractableTextSelectorは空文字列にできません\",\n\t\tfield: \"interactableTextSelector\",\n\t\tvalue\n\t});\n};\n/**\n* XpathSelectorとして検証・変換\n*\n* 空文字列の場合はエラーを返す\n*\n* @param value - 検証する文字列\n* @returns 検証成功時はXpathSelector型、失敗時はBrandValidationError\n*/\nconst asXpathSelector = (value) => {\n\tconst result = v.safeParse(XpathSelectorSchema, value);\n\tif (result.success) return ok(result.output);\n\treturn err({\n\t\ttype: \"brand_validation_error\",\n\t\tmessage: \"XpathSelectorは空文字列にできません\",\n\t\tfield: \"xpathSelector\",\n\t\tvalue\n\t});\n};\n/**\n* CliTextSelectorとして検証・変換\n*\n* \"text=\" で始まらない場合はエラーを返す\n*\n* @param value - 検証する文字列\n* @returns 検証成功時はCliTextSelector型、失敗時はBrandValidationError\n*/\nconst asCliTextSelector = (value) => {\n\tconst result = v.safeParse(CliTextSelectorSchema, value);\n\tif (result.success) return ok(result.output);\n\treturn err({\n\t\ttype: \"brand_validation_error\",\n\t\tmessage: \"CliTextSelectorは \\\"text=\\\" で始まる必要があります\",\n\t\tfield: \"cliTextSelector\",\n\t\tvalue\n\t});\n};\n/**\n* CliXpathSelectorとして検証・変換\n*\n* \"xpath=/\" で始まらない場合はエラーを返す\n*\n* @param value - 検証する文字列\n* @returns 検証成功時はCliXpathSelector型、失敗時はBrandValidationError\n*/\nconst asCliXpathSelector = (value) => {\n\tconst result = v.safeParse(CliXpathSelectorSchema, value);\n\tif (result.success) return ok(result.output);\n\treturn err({\n\t\ttype: \"brand_validation_error\",\n\t\tmessage: \"CliXpathSelectorは \\\"xpath=/\\\" で始まる必要があります\",\n\t\tfield: \"cliXpathSelector\",\n\t\tvalue\n\t});\n};\n/**\n* URLとして検証・変換\n*\n* 空文字列の場合はエラーを返す\n*\n* @param value - 検証する文字列\n* @returns 検証成功時はUrl型、失敗時はBrandValidationError\n*/\nconst asUrl = (value) => {\n\tconst result = v.safeParse(UrlSchema, value);\n\tif (result.success) return ok(result.output);\n\treturn err({\n\t\ttype: \"brand_validation_error\",\n\t\tmessage: \"URLは空文字列にできません\",\n\t\tfield: \"url\",\n\t\tvalue\n\t});\n};\n/**\n* ファイルパスとして検証・変換\n*\n* 空文字列の場合はエラーを返す\n*\n* @param value - 検証する文字列\n* @returns 検証成功時はFilePath型、失敗時はBrandValidationError\n*/\nconst asFilePath = (value) => {\n\tconst result = v.safeParse(FilePathSchema, value);\n\tif (result.success) return ok(result.output);\n\treturn err({\n\t\ttype: \"brand_validation_error\",\n\t\tmessage: \"ファイルパスは空文字列にできません\",\n\t\tfield: \"filePath\",\n\t\tvalue\n\t});\n};\n/**\n* キーボードキーとして検証・変換\n*\n* 空文字列の場合はエラーを返す\n*\n* @param value - 検証する文字列\n* @returns 検証成功時はKeyboardKey型、失敗時はBrandValidationError\n*/\nconst asKeyboardKey = (value) => {\n\tconst result = v.safeParse(KeyboardKeySchema, value);\n\tif (result.success) return ok(result.output);\n\treturn err({\n\t\ttype: \"brand_validation_error\",\n\t\tmessage: \"キーボードキーは空文字列にできません\",\n\t\tfield: \"keyboardKey\",\n\t\tvalue\n\t});\n};\n/**\n* JavaScript式として検証・変換\n*\n* 空文字列の場合はエラーを返す\n*\n* @param value - 検証する文字列\n* @returns 検証成功時はJsExpression型、失敗時はBrandValidationError\n*/\nconst asJsExpression = (value) => {\n\tconst result = v.safeParse(JsExpressionSchema, value);\n\tif (result.success) return ok(result.output);\n\treturn err({\n\t\ttype: \"brand_validation_error\",\n\t\tmessage: \"JavaScript式は空文字列にできません\",\n\t\tfield: \"jsExpression\",\n\t\tvalue\n\t});\n};\n\n//#endregion\nexport { AnyTextSelectorSchema, CliTextSelectorSchema, CliXpathSelectorSchema, CssSelectorSchema, FilePathSchema, InteractableTextSelectorSchema, JsExpressionSchema, KeyboardKeySchema, RefSelectorSchema, UrlSchema, XpathSelectorSchema, asAnyTextSelector, asCliTextSelector, asCliXpathSelector, asCssSelector, asFilePath, asInteractableTextSelector, asJsExpression, asKeyboardKey, asRefSelector, asUrl, asXpathSelector, browserClick, browserClose, browserEval, browserFill, browserFocus, browserHover, browserIsChecked, browserIsEnabled, browserIsVisible, browserOpen, browserPress, browserScreenshot, browserScroll, browserScrollIntoView, browserSelect, browserSnapshot, browserType, browserWaitForFunction, browserWaitForLoad, browserWaitForMs, browserWaitForNetworkIdle, browserWaitForSelector, browserWaitForText, browserWaitForUrl, checkAgentBrowser };\n//# sourceMappingURL=index.mjs.map","import { readFile } from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { basename, join, resolve } from \"node:path\";\nimport { glob } from \"glob\";\nimport pLimit from \"p-limit\";\nimport { ResultAsync, err, errAsync, fromThrowable, ok, okAsync } from \"neverthrow\";\nimport { P, match } from \"ts-pattern\";\nimport * as yaml from \"yaml\";\nimport * as v from \"valibot\";\nimport { safeParse } from \"valibot\";\nimport { AnyTextSelectorSchema, CssSelectorSchema, FilePathSchema, InteractableTextSelectorSchema, JsExpressionSchema, KeyboardKeySchema, UrlSchema, XpathSelectorSchema, asCliTextSelector, asCliXpathSelector, asFilePath, asRefSelector, browserClick, browserClose, browserEval, browserFill, browserHover, browserIsChecked, browserIsEnabled, browserIsVisible, browserOpen, browserPress, browserScreenshot, browserScroll, browserScrollIntoView, browserSelect, browserSnapshot, browserType, browserWaitForFunction, browserWaitForLoad, browserWaitForMs, browserWaitForNetworkIdle, browserWaitForSelector, browserWaitForText, browserWaitForUrl } from \"@packages/agent-browser-adapter\";\nimport * as os from \"node:os\";\n\n//#region src/types/utility-types.ts\n/**\n* ユーティリティ型定義\n*\n* 汎用的なシンボルベースの型を定義する。\n* ドメイン固有の型(Command, Error, Flow)とは独立した、\n* プロジェクト全体で使用可能なユーティリティ型。\n*/\n/**\n* ユーザーが値を指定しなかった場合、デフォルト値を使用することを示すシンボル\n*\n* 用途:\n* - コマンドオプションで明示的な指定がない場合のデフォルト値適用\n* - 例: `full?: boolean` → `full: boolean | UseDefault`\n*\n* @example\n* ```typescript\n* type ScreenshotOptions = {\n* full: boolean | UseDefault;\n* };\n*\n* // ユーザーが指定しなかった場合\n* const options: ScreenshotOptions = { full: UseDefault };\n* ```\n*/\nconst UseDefault = Symbol(\"UseDefault\");\n/**\n* 情報が取得できなかった/存在しないことを示すシンボル\n*\n* 用途:\n* - パースエラーで行番号やカラム番号が取得できない場合\n* - 例: `line?: number` → `line: number | NoInfo`\n*\n* undefinedとの違い:\n* - undefined: 値が存在しない可能性がある(オプショナル)\n* - NoInfo: 値は必須だが、取得できなかった(明示的な情報不在)\n*\n* @example\n* ```typescript\n* type ParseError = {\n* message: string;\n* line: number | NoInfo;\n* column: number | NoInfo;\n* };\n*\n* // 行番号が取得できなかった場合\n* const error: ParseError = {\n* message: 'Syntax error',\n* line: NoInfo,\n* column: NoInfo,\n* };\n* ```\n*/\nconst NoInfo = Symbol(\"NoInfo\");\n\n//#endregion\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$1 of matches) {\n\t\tconst fullMatch = match$1[0];\n\t\tconst varName = match$1[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$1 = (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$1(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* まだCommand型にはなっていないため、Symbolを含まない。\n*\n* @param step - 解決対象のステップ(未検証)\n* @param envMap - 環境変数マップ\n* @param stepIndex - ステップのインデックス(エラー報告用)\n* @returns 成功時: 新しいステップオブジェクト、失敗時: ParseError\n*/\nconst resolveStepVariables = (step, envMap, stepIndex) => {\n\tconst cloned = structuredClone(step);\n\tif (!isRecord$1(cloned)) return ok(cloned);\n\treturn resolveObjectVariables(cloned, envMap, `step[${stepIndex}]`).map(() => cloned);\n};\n/**\n* 生のフローデータ内の環境変数参照を解決する\n*\n* @param rawFlow - パース済みの生フローデータ(Command型検証前)\n* @param processEnv - プロセス環境変数(process.env)\n* @param dotEnv - .envファイルから読み込んだ環境変数\n* @returns 成功時: 環境変数が展開された生フローデータ、失敗時: ParseError\n*\n* @remarks\n* 環境変数の優先順位:\n* 1. processEnv(最優先)\n* 2. dotEnv\n* 3. rawFlow.env(最後の選択肢)\n*\n* 注意: この関数はCommand型の検証前に呼び出される。\n* そのため、stepsはまだunknown[]であり、Symbolを含まない。\n*\n* @example\n* const rawFlow: RawFlowData = {\n* env: { BASE_URL: 'https://example.com' },\n* steps: [\n* { open: '${BASE_URL}' },\n* { fill: { selector: 'password', value: '${PASSWORD}' } }\n* ]\n* };\n*\n* const result = resolveEnvVariables(\n* rawFlow,\n* process.env,\n* { PASSWORD: 'secret' }\n* );\n*/\nconst resolveEnvVariables = (rawFlow, processEnv, dotEnv) => {\n\tconst envMap = mergeEnvMaps(processEnv, dotEnv, rawFlow.env);\n\treturn rawFlow.steps.reduce((acc, step, index) => acc.andThen((steps) => resolveStepVariables(step, envMap, index).map((resolved) => [...steps, resolved])), ok([])).map((resolvedSteps) => ({\n\t\t...rawFlow,\n\t\tsteps: resolvedSteps\n\t}));\n};\n\n//#endregion\n//#region src/parser/schemas/selector.schema.ts\n/**\n* セレクタスキーマ定義\n*\n* YAML入力形式のセレクタをvalibotで検証する。\n* css, text, xpath の3種類のセレクタを排他的unionで定義。\n*\n* Single Source of Truth:\n* - Runtime版スキーマのみを定義(brand/metadata込み)\n* - JSON Schema生成には typeMode: 'input' を使用\n*\n* 各セレクタはBranded Typeスキーマを使用し、format検証も行う。\n* これにより1段階で形式検証 + Branded Type化が完了する。\n*\n* 注意: refセレクタはsnapshotコマンドで取得した要素参照を使用するためのもので、\n* E2Eテストでは再現性がないため削除された。\n*/\n/**\n* CSSセレクタスキーマ\n*\n* CSS形式で要素を指定する。\n* 例: { css: \"#login-button\" }\n*\n* 出力はBranded Type (CssSelector)\n*/\nconst CssSelectorSchema$1 = v.object({ css: v.pipe(CssSelectorSchema, v.description(\"CSSセレクタ形式で要素を指定\"), v.metadata({ exampleValues: [\"#login-button\", \".submit-btn\"] })) });\n/**\n* InteractableTextセレクタスキーマ\n*\n* インタラクティブ要素(ボタン、リンク、入力欄等)をテキスト内容で検索する。\n* click, fill, type, hover, select, assertEnabled, assertChecked で使用。\n* 例: { interactableText: \"ログイン\" }\n*\n* 出力はBranded Type (InteractableTextSelector)\n*/\nconst InteractableTextSelectorSchema$1 = v.object({ interactableText: v.pipe(InteractableTextSelectorSchema, v.description(\"インタラクティブ要素をテキスト内容で検索\"), v.metadata({ exampleValues: [\"ログイン\", \"送信する\"] })) });\n/**\n* AnyTextセレクタスキーマ\n*\n* 全ての要素(静的テキスト含む)をテキスト内容で検索する。\n* assertVisible, assertNotVisible, scrollIntoView, wait で使用。\n* 例: { anyText: \"Welcome\" }\n*\n* 出力はBranded Type (AnyTextSelector)\n*/\nconst AnyTextSelectorSchema$1 = v.object({ anyText: v.pipe(AnyTextSelectorSchema, v.description(\"全要素をテキスト内容で検索\"), v.metadata({ exampleValues: [\"Welcome\", \"エラーメッセージ\"] })) });\n/**\n* XPathセレクタスキーマ\n*\n* XPath形式で要素を指定する。\n* 例: { xpath: \"//button[@type='submit']\" }\n*\n* 出力はBranded Type (XpathSelector)\n*/\nconst XpathSelectorSchema$1 = v.object({ xpath: v.pipe(XpathSelectorSchema, v.description(\"XPath形式で要素を指定\"), v.metadata({ exampleValues: [\"//button[@type='submit']\"] })) });\n/**\n* インタラクティブ要素用セレクタ指定スキーマ\n*\n* css, interactableText, xpath のいずれか1つのみを指定する。\n* click, fill, type, hover, select, assertEnabled, assertChecked で使用。\n*/\nconst InteractableSelectorSpecSchema = v.union([\n\tCssSelectorSchema$1,\n\tInteractableTextSelectorSchema$1,\n\tXpathSelectorSchema$1\n]);\n/**\n* 全要素用セレクタ指定スキーマ\n*\n* css, anyText, xpath のいずれか1つのみを指定する。\n* assertVisible, assertNotVisible, scrollIntoView, wait で使用。\n*/\nconst AnySelectorSpecSchema = v.union([\n\tCssSelectorSchema$1,\n\tAnyTextSelectorSchema$1,\n\tXpathSelectorSchema$1\n]);\n/**\n* セレクタ指定スキーマ(後方互換用)\n*\n* @deprecated 将来的にInteractableSelectorSpecSchemaまたはAnySelectorSpecSchemaを直接使用すること\n*/\nconst SelectorSpecSchema = v.union([InteractableSelectorSpecSchema, AnySelectorSpecSchema]);\n\n//#endregion\n//#region src/parser/schemas/commands/click.schema.ts\n/**\n* Clickコマンドスキーマ定義\n*\n* YAML入力形式のclickコマンドをvalibotで検証・変換する。\n*\n* 対応形式:\n* - 簡略形式: click: \"テキスト\" → { command: 'click', text: TextSelector }\n* - 詳細形式: click: { css: \"...\" } → { command: 'click', css: CssSelector }\n*\n* Single Source of Truth:\n* - ClickYamlSchema: Runtime版スキーマ(brand/transform込み)\n* - JSON Schema生成には typeMode: 'input' を使用\n*\n* 出力型:\n* - ClickCommand: スキーマから導出されるBranded Type\n*/\n/**\n* 簡略形式スキーマ\n*\n* click: \"テキスト\" → { command: 'click', interactableText: InteractableTextSelector }\n* 文字列を直接指定した場合、インタラクティブ要素のテキスト検索として解釈する。\n* InteractableTextSelectorとしてBranded Type化される。\n*/\nconst ClickShorthandSchema = v.pipe(v.object({ click: v.pipe(InteractableTextSelectorSchema, v.metadata({ exampleValues: [\"ログイン\", \"送信ボタン\"] })) }), v.metadata({ description: \"テキストで要素を指定してクリック\" }), v.transform((input) => ({\n\tcommand: \"click\",\n\tinteractableText: input.click\n})));\n/**\n* 詳細形式スキーマ\n*\n* click: { css: \"...\" } → { command: 'click', css: CssSelector }\n* click: { interactableText: \"...\" } → { command: 'click', interactableText: InteractableTextSelector }\n* click: { xpath: \"...\" } → { command: 'click', xpath: XpathSelector }\n*\n* InteractableSelectorSpecSchemaを使用。format検証 + Branded Type化が1段階で完了。\n*/\nconst ClickDetailedSchema = v.pipe(v.object({ click: InteractableSelectorSpecSchema }), v.metadata({ description: \"セレクタで要素を指定してクリック\" }), v.transform((input) => {\n\treturn {\n\t\tcommand: \"click\",\n\t\t...input.click\n\t};\n}));\n/**\n* ClickコマンドYAMLスキーマ(Single Source of Truth)\n*\n* 簡略形式と詳細形式の両方を受け付ける。\n* 出力型はClickCommand(Branded Type)。\n*\n* JSON Schema生成には typeMode: 'input' を使用し、\n* このRuntime版スキーマから入力形式のJSON Schemaを生成する。\n*/\nconst ClickYamlSchema = v.pipe(v.union([ClickShorthandSchema, ClickDetailedSchema]), v.description(\"要素をクリックする\"), v.metadata({ category: \"インタラクション\" }));\n\n//#endregion\n//#region src/parser/schemas/commands/hover.schema.ts\n/**\n* Hoverコマンドスキーマ定義\n*\n* YAML入力形式のhoverコマンドをvalibotで検証・変換する。\n*\n* 対応形式:\n* - 簡略形式: hover: \"テキスト\" → { command: 'hover', text: TextSelector }\n* - 詳細形式: hover: { css: \"...\" } → { command: 'hover', css: CssSelector }\n*\n* Single Source of Truth:\n* - HoverYamlSchema: Runtime版スキーマ(brand/transform込み)\n* - JSON Schema生成には typeMode: 'input' を使用\n*\n* 出力型:\n* - HoverCommand: スキーマから導出されるBranded Type\n*/\n/**\n* 簡略形式スキーマ\n*\n* hover: \"テキスト\" → { command: 'hover', interactableText: InteractableTextSelector }\n* 文字列を直接指定した場合、インタラクティブ要素のテキスト検索として解釈する。\n* InteractableTextSelectorとしてBranded Type化される。\n*/\nconst HoverShorthandSchema = v.pipe(v.object({ hover: v.pipe(InteractableTextSelectorSchema, v.metadata({ exampleValues: [\"ログイン\", \"メニュー\"] })) }), v.metadata({ description: \"テキストで要素を指定してホバー\" }), v.transform((input) => ({\n\tcommand: \"hover\",\n\tinteractableText: input.hover\n})));\n/**\n* 詳細形式スキーマ\n*\n* hover: { css: \"...\" } → { command: 'hover', css: CssSelector }\n* hover: { interactableText: \"...\" } → { command: 'hover', interactableText: InteractableTextSelector }\n* hover: { xpath: \"...\" } → { command: 'hover', xpath: XpathSelector }\n*\n* InteractableSelectorSpecSchemaを使用。format検証 + Branded Type化が1段階で完了。\n*/\nconst HoverDetailedSchema = v.pipe(v.object({ hover: InteractableSelectorSpecSchema }), v.metadata({ description: \"セレクタで要素を指定してホバー\" }), v.transform((input) => {\n\treturn {\n\t\tcommand: \"hover\",\n\t\t...input.hover\n\t};\n}));\n/**\n* HoverコマンドYAMLスキーマ(Single Source of Truth)\n*\n* 簡略形式と詳細形式の両方を受け付ける。\n* 出力型はHoverCommand(Branded Type)。\n*\n* JSON Schema生成には typeMode: 'input' を使用し、\n* このRuntime版スキーマから入力形式のJSON Schemaを生成する。\n*/\nconst HoverYamlSchema = v.pipe(v.union([HoverShorthandSchema, HoverDetailedSchema]), v.description(\"要素にホバーする\"), v.metadata({ category: \"インタラクション\" }));\n\n//#endregion\n//#region src/parser/schemas/commands/scrollIntoView.schema.ts\n/**\n* ScrollIntoViewコマンドスキーマ定義\n*\n* YAML入力形式のscrollIntoViewコマンドをvalibotで検証・変換する。\n*\n* 対応形式:\n* - 簡略形式: scrollIntoView: \"テキスト\" → { command: 'scrollIntoView', text: TextSelector }\n* - 詳細形式: scrollIntoView: { css: \"...\" } → { command: 'scrollIntoView', css: CssSelector }\n*\n* Single Source of Truth:\n* - ScrollIntoViewYamlSchema: Runtime版スキーマ(brand/transform込み)\n* - JSON Schema生成には typeMode: 'input' を使用\n*\n* 出力型:\n* - ScrollIntoViewCommand: スキーマから導出されるBranded Type\n*/\n/**\n* 簡略形式スキーマ\n*\n* scrollIntoView: \"テキスト\" → { command: 'scrollIntoView', anyText: AnyTextSelector }\n* 文字列を直接指定した場合、全要素をテキスト検索として解釈する。\n* AnyTextSelectorとしてBranded Type化される。\n*/\nconst ScrollIntoViewShorthandSchema = v.pipe(v.object({ scrollIntoView: v.pipe(AnyTextSelectorSchema, v.metadata({ exampleValues: [\"送信ボタン\", \"フッター\"] })) }), v.metadata({ description: \"テキストで要素を指定してスクロール\" }), v.transform((input) => ({\n\tcommand: \"scrollIntoView\",\n\tanyText: input.scrollIntoView\n})));\n/**\n* 詳細形式スキーマ\n*\n* scrollIntoView: { css: \"...\" } → { command: 'scrollIntoView', css: CssSelector }\n* scrollIntoView: { anyText: \"...\" } → { command: 'scrollIntoView', anyText: AnyTextSelector }\n* scrollIntoView: { xpath: \"...\" } → { command: 'scrollIntoView', xpath: XpathSelector }\n*\n* AnySelectorSpecSchemaを使用。format検証 + Branded Type化が1段階で完了。\n*/\nconst ScrollIntoViewDetailedSchema = v.pipe(v.object({ scrollIntoView: AnySelectorSpecSchema }), v.metadata({ description: \"セレクタで要素を指定してスクロール\" }), v.transform((input) => {\n\treturn {\n\t\tcommand: \"scrollIntoView\",\n\t\t...input.scrollIntoView\n\t};\n}));\n/**\n* ScrollIntoViewコマンドYAMLスキーマ(Single Source of Truth)\n*\n* 簡略形式と詳細形式の両方を受け付ける。\n* 出力型はScrollIntoViewCommand(Branded Type)。\n*\n* JSON Schema生成には typeMode: 'input' を使用し、\n* このRuntime版スキーマから入力形式のJSON Schemaを生成する。\n*/\nconst ScrollIntoViewYamlSchema = v.pipe(v.union([ScrollIntoViewShorthandSchema, ScrollIntoViewDetailedSchema]), v.description(\"要素が表示されるまでスクロール\"), v.metadata({ category: \"ナビゲーション\" }));\n\n//#endregion\n//#region src/parser/schemas/commands/scroll.schema.ts\n/**\n* スクロールコマンドスキーマ定義\n*\n* YAML入力形式のscrollコマンドをvalibotで検証・変換する。\n*\n* 対応形式:\n* - scroll: { direction: 'up' | 'down' | 'left' | 'right', amount: number }\n* → { command: 'scroll', direction: ..., amount: number }\n*\n* Single Source of Truth:\n* - ScrollYamlSchema: Runtime版スキーマ(transform込み)\n* - JSON Schema生成には typeMode: 'input' を使用\n*\n* 出力型:\n* - ScrollCommand: スキーマから導出される型\n*/\n/**\n* スクロール方向のリテラルユニオン\n*/\nconst ScrollDirectionSchema = v.pipe(v.picklist([\n\t\"up\",\n\t\"down\",\n\t\"left\",\n\t\"right\"\n]), v.description(\"スクロール方向\"));\n/**\n* ScrollコマンドYAMLスキーマ(Single Source of Truth)\n*\n* 詳細形式のみ対応(direction + amount必須)。\n* scroll: { direction: 'up' | 'down' | 'left' | 'right', amount: number }\n*\n* JSON Schema生成には typeMode: 'input' を使用し、\n* このRuntime版スキーマから入力形式のJSON Schemaを生成する。\n*/\nconst ScrollYamlSchema = v.pipe(v.object({ scroll: v.pipe(v.object({\n\tdirection: ScrollDirectionSchema,\n\tamount: v.pipe(v.number(), v.description(\"スクロール量(ピクセル)\"), v.metadata({ exampleValues: [100, 500] }))\n}), v.metadata({ exampleValues: [{\n\tdirection: \"down\",\n\tamount: 300\n}, {\n\tdirection: \"up\",\n\tamount: 100\n}] })) }), v.description(\"ページをスクロールする\"), v.metadata({ category: \"ナビゲーション\" }), v.transform((input) => ({\n\tcommand: \"scroll\",\n\tdirection: input.scroll.direction,\n\tamount: input.scroll.amount\n})));\n\n//#endregion\n//#region src/parser/schemas/commands/wait.schema.ts\n/**\n* 待機コマンドスキーマ定義\n*\n* YAML入力形式のwaitコマンドをvalibotで検証・変換する。\n*\n* 対応形式:\n* - wait: 1000 → { command: 'wait', ms: number }\n* - wait: { css: '#id' } → { command: 'wait', css: CssSelector }\n* - wait: { ref: 'name' } → { command: 'wait', ref: RefSelector }\n* - wait: { text: 'テキスト' } → { command: 'wait', text: TextSelector }\n* - wait: { xpath: '//div' } → { command: 'wait', xpath: XpathSelector }\n* - wait: { load: 'networkidle' } → { command: 'wait', load: LoadState }\n* - wait: { url: 'https://' } → { command: 'wait', url: string }\n* - wait: { fn: 'code' } → { command: 'wait', fn: string }\n*\n* Single Source of Truth:\n* - WaitYamlSchema: Runtime版スキーマ(brand/transform込み)\n* - JSON Schema生成には typeMode: 'input' を使用\n*/\n/**\n* ページ読み込み状態\n*\n* - load: ページの読み込み完了\n* - domcontentloaded: DOMの解析完了\n* - networkidle: ネットワークアイドル状態\n*/\nconst LoadStateSchema = v.pipe(v.picklist([\n\t\"load\",\n\t\"domcontentloaded\",\n\t\"networkidle\"\n]), v.description(\"ページの読み込み状態\"));\nconst WaitMsSchema = v.pipe(v.object({ wait: v.pipe(v.number(), v.description(\"待機時間(ミリ秒)\"), v.metadata({ exampleValues: [1e3, 3e3] })) }), v.metadata({ description: \"指定ミリ秒待機\" }), v.transform((input) => ({\n\tcommand: \"wait\",\n\tms: input.wait\n})));\nconst WaitCssSchema = v.pipe(v.object({ wait: v.object({ css: v.pipe(CssSelectorSchema, v.description(\"CSSセレクタ形式で要素を指定\"), v.metadata({ exampleValues: [\"#login-button\", \".submit-btn\"] })) }) }), v.metadata({ description: \"CSSセレクタで指定した要素が表示されるまで待機\" }), v.transform((input) => ({\n\tcommand: \"wait\",\n\tcss: input.wait.css\n})));\nconst WaitAnyTextSchema = v.pipe(v.object({ wait: v.object({ anyText: v.pipe(AnyTextSelectorSchema, v.description(\"全要素をテキスト内容で検索\"), v.metadata({ exampleValues: [\"ログイン\", \"送信する\"] })) }) }), v.metadata({ description: \"テキストで指定した要素が表示されるまで待機\" }), v.transform((input) => ({\n\tcommand: \"wait\",\n\tanyText: input.wait.anyText\n})));\nconst WaitXpathSchema = v.pipe(v.object({ wait: v.object({ xpath: v.pipe(XpathSelectorSchema, v.description(\"XPath形式で要素を指定\"), v.metadata({ exampleValues: [\"//button[@type='submit']\"] })) }) }), v.metadata({ description: \"XPathで指定した要素が表示されるまで待機\" }), v.transform((input) => ({\n\tcommand: \"wait\",\n\txpath: input.wait.xpath\n})));\nconst WaitLoadSchema = v.pipe(v.object({ wait: v.object({ load: v.pipe(LoadStateSchema, v.metadata({ exampleValues: [\"networkidle\", \"domcontentloaded\"] })) }) }), v.metadata({ description: \"ページの読み込み状態が指定の状態になるまで待機\" }), v.transform((input) => ({\n\tcommand: \"wait\",\n\tload: input.wait.load\n})));\nconst WaitUrlSchema = v.pipe(v.object({ wait: v.object({ url: v.pipe(v.string(), v.description(\"待機するURL(部分一致)\"), v.metadata({ exampleValues: [\"https://example.com\", \"/dashboard\"] })) }) }), v.metadata({ description: \"URLが指定の文字列を含むまで待機\" }), v.transform((input) => ({\n\tcommand: \"wait\",\n\turl: input.wait.url\n})));\nconst WaitFnSchema = v.pipe(v.object({ wait: v.object({ fn: v.pipe(JsExpressionSchema, v.description(\"待機条件の関数\"), v.metadata({ exampleValues: [\"() => document.readyState === \\\"complete\\\"\"] })) }) }), v.metadata({ description: \"関数が真を返すまで待機\" }), v.transform((input) => ({\n\tcommand: \"wait\",\n\tfn: input.wait.fn\n})));\n/**\n* WaitコマンドYAMLスキーマ(Single Source of Truth)\n*\n* 複数の待機バリアントをunionで表現。\n*\n* JSON Schema生成には typeMode: 'input' を使用し、\n* このRuntime版スキーマから入力形式のJSON Schemaを生成する。\n*/\nconst WaitYamlSchema = v.pipe(v.union([\n\tWaitMsSchema,\n\tWaitCssSchema,\n\tWaitAnyTextSchema,\n\tWaitXpathSchema,\n\tWaitLoadSchema,\n\tWaitUrlSchema,\n\tWaitFnSchema\n]), v.description(\"指定の条件まで待機する\"), v.metadata({ category: \"待機\" }));\n\n//#endregion\n//#region src/parser/schemas/commands/assertions.schema.ts\n/**\n* Assert系コマンドスキーマ定義\n*\n* YAML入力形式のassert系コマンドをvalibotで検証・変換する。\n*\n* 対応形式:\n* - assertVisible: 要素が表示されていることを検証\n* - assertNotVisible: 要素が非表示であることを検証\n* - assertEnabled: 要素が有効であることを検証\n* - assertChecked: チェックボックス/ラジオボタンの状態を検証\n*\n* 各コマンドの形式:\n* - 簡略形式: assertVisible: \"テキスト\" → { command: 'assertVisible', text: TextSelector }\n* - 詳細形式: assertVisible: { css: \"...\" } → { command: 'assertVisible', css: CssSelector }\n*\n* assertCheckedは特殊ケース:\n* - checkedフィールドがあり、boolean | UseDefaultを取る\n* - 簡略形式でchecked省略時はUseDefaultになる\n*\n* Single Source of Truth:\n* - 各Assert*YamlSchema: Runtime版スキーマ(brand/transform込み)\n* - JSON Schema生成には typeMode: 'input' を使用\n*\n* 出力型:\n* - Assert*Command: スキーマから導出されるBranded Type\n*/\n/**\n* 簡略形式スキーマ\n*\n* assertVisible: \"テキスト\" → { command: 'assertVisible', anyText: AnyTextSelector }\n* 文字列を直接指定した場合、全要素をテキスト検索として解釈する。\n* AnyTextSelectorとしてBranded Type化される。\n*/\nconst AssertVisibleShorthandSchema = v.pipe(v.object({ assertVisible: v.pipe(AnyTextSelectorSchema, v.metadata({ exampleValues: [\"ログインボタン\", \"送信完了\"] })) }), v.metadata({ description: \"テキストで要素を指定して表示を検証\" }), v.transform((input) => ({\n\tcommand: \"assertVisible\",\n\tanyText: input.assertVisible\n})));\n/**\n* 詳細形式スキーマ\n*\n* assertVisible: { css: \"...\" } → { command: 'assertVisible', css: CssSelector }\n* assertVisible: { anyText: \"...\" } → { command: 'assertVisible', anyText: AnyTextSelector }\n* assertVisible: { xpath: \"...\" } → { command: 'assertVisible', xpath: XpathSelector }\n*\n* AnySelectorSpecSchemaを使用。format検証 + Branded Type化が1段階で完了。\n*/\nconst AssertVisibleDetailedSchema = v.pipe(v.object({ assertVisible: AnySelectorSpecSchema }), v.metadata({ description: \"セレクタで要素を指定して表示を検証\" }), v.transform((input) => {\n\treturn {\n\t\tcommand: \"assertVisible\",\n\t\t...input.assertVisible\n\t};\n}));\n/**\n* AssertVisibleコマンドYAMLスキーマ(Single Source of Truth)\n*\n* 簡略形式と詳細形式の両方を受け付ける。\n* 出力型はAssertVisibleCommand(Branded Type)。\n*\n* JSON Schema生成には typeMode: 'input' を使用し、\n* このRuntime版スキーマから入力形式のJSON Schemaを生成する。\n*/\nconst AssertVisibleYamlSchema = v.pipe(v.union([AssertVisibleShorthandSchema, AssertVisibleDetailedSchema]), v.description(\"要素が表示されていることを検証する\"), v.metadata({ category: \"検証\" }));\n/**\n* 簡略形式スキーマ\n*\n* assertNotVisible: \"テキスト\" → { command: 'assertNotVisible', anyText: AnyTextSelector }\n* 文字列を直接指定した場合、全要素をテキスト検索として解釈する。\n* AnyTextSelectorとしてBranded Type化される。\n*/\nconst AssertNotVisibleShorthandSchema = v.pipe(v.object({ assertNotVisible: v.pipe(AnyTextSelectorSchema, v.metadata({ exampleValues: [\"エラーメッセージ\", \"非表示要素\"] })) }), v.metadata({ description: \"テキストで要素を指定して非表示を検証\" }), v.transform((input) => ({\n\tcommand: \"assertNotVisible\",\n\tanyText: input.assertNotVisible\n})));\n/**\n* 詳細形式スキーマ\n*\n* assertNotVisible: { css: \"...\" } → { command: 'assertNotVisible', css: CssSelector }\n* assertNotVisible: { anyText: \"...\" } → { command: 'assertNotVisible', anyText: AnyTextSelector }\n* assertNotVisible: { xpath: \"...\" } → { command: 'assertNotVisible', xpath: XpathSelector }\n*\n* AnySelectorSpecSchemaを使用。format検証 + Branded Type化が1段階で完了。\n*/\nconst AssertNotVisibleDetailedSchema = v.pipe(v.object({ assertNotVisible: AnySelectorSpecSchema }), v.metadata({ description: \"セレクタで要素を指定して非表示を検証\" }), v.transform((input) => {\n\treturn {\n\t\tcommand: \"assertNotVisible\",\n\t\t...input.assertNotVisible\n\t};\n}));\n/**\n* AssertNotVisibleコマンドYAMLスキーマ(Single Source of Truth)\n*\n* 簡略形式と詳細形式の両方を受け付ける。\n* 出力型はAssertNotVisibleCommand(Branded Type)。\n*\n* JSON Schema生成には typeMode: 'input' を使用し、\n* このRuntime版スキーマから入力形式のJSON Schemaを生成する。\n*/\nconst AssertNotVisibleYamlSchema = v.pipe(v.union([AssertNotVisibleShorthandSchema, AssertNotVisibleDetailedSchema]), v.description(\"要素が非表示であることを検証する\"), v.metadata({ category: \"検証\" }));\n/**\n* 簡略形式スキーマ\n*\n* assertEnabled: \"テキスト\" → { command: 'assertEnabled', interactableText: InteractableTextSelector }\n* 文字列を直接指定した場合、インタラクティブ要素のテキスト検索として解釈する。\n* InteractableTextSelectorとしてBranded Type化される。\n*/\nconst AssertEnabledShorthandSchema = v.pipe(v.object({ assertEnabled: v.pipe(InteractableTextSelectorSchema, v.metadata({ exampleValues: [\"送信ボタン\", \"入力フィールド\"] })) }), v.metadata({ description: \"テキストで要素を指定して有効を検証\" }), v.transform((input) => ({\n\tcommand: \"assertEnabled\",\n\tinteractableText: input.assertEnabled\n})));\n/**\n* 詳細形式スキーマ\n*\n* assertEnabled: { css: \"...\" } → { command: 'assertEnabled', css: CssSelector }\n* assertEnabled: { interactableText: \"...\" } → { command: 'assertEnabled', interactableText: InteractableTextSelector }\n* assertEnabled: { xpath: \"...\" } → { command: 'assertEnabled', xpath: XpathSelector }\n*\n* InteractableSelectorSpecSchemaを使用。format検証 + Branded Type化が1段階で完了。\n*/\nconst AssertEnabledDetailedSchema = v.pipe(v.object({ assertEnabled: InteractableSelectorSpecSchema }), v.metadata({ description: \"セレクタで要素を指定して有効を検証\" }), v.transform((input) => {\n\treturn {\n\t\tcommand: \"assertEnabled\",\n\t\t...input.assertEnabled\n\t};\n}));\n/**\n* AssertEnabledコマンドYAMLスキーマ(Single Source of Truth)\n*\n* 簡略形式と詳細形式の両方を受け付ける。\n* 出力型はAssertEnabledCommand(Branded Type)。\n*\n* JSON Schema生成には typeMode: 'input' を使用し、\n* このRuntime版スキーマから入力形式のJSON Schemaを生成する。\n*/\nconst AssertEnabledYamlSchema = v.pipe(v.union([AssertEnabledShorthandSchema, AssertEnabledDetailedSchema]), v.description(\"要素が有効であることを検証する\"), v.metadata({ category: \"検証\" }));\n/**\n* 簡略形式スキーマ\n*\n* assertChecked: \"テキスト\" → { command: 'assertChecked', interactableText: InteractableTextSelector, checked: UseDefault }\n* 文字列を直接指定した場合、インタラクティブ要素のテキスト検索として解釈する。\n* checkedフィールドは省略されるため、UseDefaultになる。\n* InteractableTextSelectorとしてBranded Type化される。\n*/\nconst AssertCheckedShorthandSchema = v.pipe(v.object({ assertChecked: v.pipe(InteractableTextSelectorSchema, v.metadata({ exampleValues: [\"利用規約に同意\", \"メール通知を有効化\"] })) }), v.metadata({ description: \"テキストで要素を指定してチェック状態を検証\" }), v.transform((input) => ({\n\tcommand: \"assertChecked\",\n\tinteractableText: input.assertChecked,\n\tchecked: UseDefault\n})));\n/**\n* checkedフィールドスキーマ(optional)\n*/\nconst CheckedFieldSchema = v.optional(v.pipe(v.boolean(), v.description(\"期待されるチェック状態(省略時はtrue)\")));\n/**\n* assertChecked: { css: \"...\", checked?: boolean }\n*/\nconst AssertCheckedCssSchema = v.pipe(v.object({ assertChecked: v.object({\n\tcss: v.pipe(CssSelectorSchema, v.description(\"CSSセレクタ形式で要素を指定\"), v.metadata({ exampleValues: [\"#agree-checkbox\", \".terms-checkbox\"] })),\n\tchecked: CheckedFieldSchema\n}) }), v.metadata({ description: \"CSSセレクタで要素を指定してチェック状態を検証\" }), v.transform((input) => ({\n\tcommand: \"assertChecked\",\n\tcss: input.assertChecked.css,\n\tchecked: input.assertChecked.checked ?? UseDefault\n})));\n/**\n* assertChecked: { interactableText: \"...\", checked?: boolean }\n*/\nconst AssertCheckedInteractableTextSchema = v.pipe(v.object({ assertChecked: v.object({\n\tinteractableText: v.pipe(InteractableTextSelectorSchema, v.description(\"インタラクティブ要素をテキスト内容で検索\"), v.metadata({ exampleValues: [\"利用規約に同意\", \"メール通知を有効化\"] })),\n\tchecked: CheckedFieldSchema\n}) }), v.metadata({ description: \"テキストで要素を指定してチェック状態を検証\" }), v.transform((input) => ({\n\tcommand: \"assertChecked\",\n\tinteractableText: input.assertChecked.interactableText,\n\tchecked: input.assertChecked.checked ?? UseDefault\n})));\n/**\n* assertChecked: { xpath: \"...\", checked?: boolean }\n*/\nconst AssertCheckedXpathSchema = v.pipe(v.object({ assertChecked: v.object({\n\txpath: v.pipe(XpathSelectorSchema, v.description(\"XPath形式で要素を指定\"), v.metadata({ exampleValues: [\"//input[@type='checkbox']\"] })),\n\tchecked: CheckedFieldSchema\n}) }), v.metadata({ description: \"XPathで要素を指定してチェック状態を検証\" }), v.transform((input) => ({\n\tcommand: \"assertChecked\",\n\txpath: input.assertChecked.xpath,\n\tchecked: input.assertChecked.checked ?? UseDefault\n})));\n/**\n* 詳細形式スキーマ(union)\n*\n* 3種類のセレクタをunionで組み合わせる。\n* checkedが省略された場合はUseDefaultになる。\n*/\nconst AssertCheckedDetailedSchema = v.union([\n\tAssertCheckedCssSchema,\n\tAssertCheckedInteractableTextSchema,\n\tAssertCheckedXpathSchema\n]);\n/**\n* AssertCheckedコマンドYAMLスキーマ(Single Source of Truth)\n*\n* 簡略形式と詳細形式の両方を受け付ける。\n* 出力型はAssertCheckedCommand(Branded Type)。\n*\n* JSON Schema生成には typeMode: 'input' を使用し、\n* このRuntime版スキーマから入力形式のJSON Schemaを生成する。\n*/\nconst AssertCheckedYamlSchema = v.pipe(v.union([AssertCheckedShorthandSchema, AssertCheckedDetailedSchema]), v.description(\"チェックボックス/ラジオボタンの状態を検証する\"), v.metadata({ category: \"検証\" }));\n\n//#endregion\n//#region src/parser/schemas/commands/input.schema.ts\n/**\n* 入力系コマンドスキーマ定義\n*\n* YAML入力形式のtype/fill/selectコマンドをvalibotで検証・変換する。\n*\n* これらのコマンドはセレクタ + valueフィールドを持つ共通パターン。\n* 各セレクタタイプごとにスキーマを定義し、unionで組み合わせる。\n*\n* 対応形式:\n* - type: { css: \"...\", value: \"...\" } → { command: 'type', css: CssSelector, value: '...' }\n* - fill: { css: \"...\", value: \"...\" } → { command: 'fill', css: CssSelector, value: '...' }\n* - select: { css: \"...\", value: \"...\" } → { command: 'select', css: CssSelector, value: '...' }\n*\n* Single Source of Truth:\n* - 各*YamlSchema: Runtime版スキーマ(brand/transform込み)\n* - JSON Schema生成には typeMode: 'input' を使用\n*\n* 出力型:\n* - TypeCommand, FillCommand, SelectCommand: スキーマから導出されるBranded Type\n*/\n/**\n* valueフィールドスキーマ(type用)\n*/\nconst TypeValueSchema = v.pipe(v.string(), v.description(\"入力するテキスト\"), v.metadata({ exampleValues: [\"ユーザー名\", \"test@example.com\"] }));\n/**\n* type: { css: \"...\", value: \"...\" }\n*/\nconst TypeCssSchema = v.pipe(v.object({ type: v.object({\n\tcss: v.pipe(CssSelectorSchema, v.description(\"CSSセレクタ形式で要素を指定\"), v.metadata({ exampleValues: [\"#username\", \".email-input\"] })),\n\tvalue: TypeValueSchema\n}) }), v.metadata({ description: \"CSSセレクタで要素を指定して入力\" }), v.transform((input) => ({\n\tcommand: \"type\",\n\tcss: input.type.css,\n\tvalue: input.type.value\n})));\n/**\n* type: { interactableText: \"...\", value: \"...\" }\n*/\nconst TypeInteractableTextSchema = v.pipe(v.object({ type: v.object({\n\tinteractableText: v.pipe(InteractableTextSelectorSchema, v.description(\"インタラクティブ要素をテキスト内容で検索\"), v.metadata({ exampleValues: [\"メールアドレス\", \"ユーザー名\"] })),\n\tvalue: TypeValueSchema\n}) }), v.metadata({ description: \"テキストで要素を指定して入力\" }), v.transform((input) => ({\n\tcommand: \"type\",\n\tinteractableText: input.type.interactableText,\n\tvalue: input.type.value\n})));\n/**\n* type: { xpath: \"...\", value: \"...\" }\n*/\nconst TypeXpathSchema = v.pipe(v.object({ type: v.object({\n\txpath: v.pipe(XpathSelectorSchema, v.description(\"XPath形式で要素を指定\"), v.metadata({ exampleValues: [\"//input[@name='email']\"] })),\n\tvalue: TypeValueSchema\n}) }), v.metadata({ description: \"XPathで要素を指定して入力\" }), v.transform((input) => ({\n\tcommand: \"type\",\n\txpath: input.type.xpath,\n\tvalue: input.type.value\n})));\n/**\n* TypeコマンドYAMLスキーマ(Single Source of Truth)\n*\n* 3種類のセレクタをunionで組み合わせる。\n*\n* JSON Schema生成には typeMode: 'input' を使用し、\n* このRuntime版スキーマから入力形式のJSON Schemaを生成する。\n*/\nconst TypeYamlSchema = v.pipe(v.union([\n\tTypeCssSchema,\n\tTypeInteractableTextSchema,\n\tTypeXpathSchema\n]), v.description(\"要素にテキストを入力する(既存テキストに追加)\"), v.metadata({ category: \"入力\" }));\n/**\n* valueフィールドスキーマ(fill用)\n*/\nconst FillValueSchema = v.pipe(v.string(), v.description(\"入力するテキスト(既存テキストをクリアして入力)\"), v.metadata({ exampleValues: [\"新しいユーザー名\", \"new@example.com\"] }));\n/**\n* fill: { css: \"...\", value: \"...\" }\n*/\nconst FillCssSchema = v.pipe(v.object({ fill: v.object({\n\tcss: v.pipe(CssSelectorSchema, v.description(\"CSSセレクタ形式で要素を指定\"), v.metadata({ exampleValues: [\"#email\", \".password-input\"] })),\n\tvalue: FillValueSchema\n}) }), v.metadata({ description: \"CSSセレクタで要素を指定して入力\" }), v.transform((input) => ({\n\tcommand: \"fill\",\n\tcss: input.fill.css,\n\tvalue: input.fill.value\n})));\n/**\n* fill: { interactableText: \"...\", value: \"...\" }\n*/\nconst FillInteractableTextSchema = v.pipe(v.object({ fill: v.object({\n\tinteractableText: v.pipe(InteractableTextSelectorSchema, v.description(\"インタラクティブ要素をテキスト内容で検索\"), v.metadata({ exampleValues: [\"メールアドレス\", \"パスワード\"] })),\n\tvalue: FillValueSchema\n}) }), v.metadata({ description: \"テキストで要素を指定して入力\" }), v.transform((input) => ({\n\tcommand: \"fill\",\n\tinteractableText: input.fill.interactableText,\n\tvalue: input.fill.value\n})));\n/**\n* fill: { xpath: \"...\", value: \"...\" }\n*/\nconst FillXpathSchema = v.pipe(v.object({ fill: v.object({\n\txpath: v.pipe(XpathSelectorSchema, v.description(\"XPath形式で要素を指定\"), v.metadata({ exampleValues: [\"//input[@type='password']\"] })),\n\tvalue: FillValueSchema\n}) }), v.metadata({ description: \"XPathで要素を指定して入力\" }), v.transform((input) => ({\n\tcommand: \"fill\",\n\txpath: input.fill.xpath,\n\tvalue: input.fill.value\n})));\n/**\n* FillコマンドYAMLスキーマ(Single Source of Truth)\n*\n* 3種類のセレクタをunionで組み合わせる。\n*\n* JSON Schema生成には typeMode: 'input' を使用し、\n* このRuntime版スキーマから入力形式のJSON Schemaを生成する。\n*/\nconst FillYamlSchema = v.pipe(v.union([\n\tFillCssSchema,\n\tFillInteractableTextSchema,\n\tFillXpathSchema\n]), v.description(\"要素にテキストを入力する(既存テキストをクリアして入力)\"), v.metadata({ category: \"入力\" }));\n/**\n* valueフィールドスキーマ(select用)\n*/\nconst SelectValueSchema = v.pipe(v.string(), v.description(\"選択するオプションの値\"), v.metadata({ exampleValues: [\"japan\", \"option1\"] }));\n/**\n* select: { css: \"...\", value: \"...\" }\n*/\nconst SelectCssSchema = v.pipe(v.object({ select: v.object({\n\tcss: v.pipe(CssSelectorSchema, v.description(\"CSSセレクタ形式で要素を指定\"), v.metadata({ exampleValues: [\"#country\", \".language-select\"] })),\n\tvalue: SelectValueSchema\n}) }), v.metadata({ description: \"CSSセレクタで要素を指定して選択\" }), v.transform((input) => ({\n\tcommand: \"select\",\n\tcss: input.select.css,\n\tvalue: input.select.value\n})));\n/**\n* select: { interactableText: \"...\", value: \"...\" }\n*/\nconst SelectInteractableTextSchema = v.pipe(v.object({ select: v.object({\n\tinteractableText: v.pipe(InteractableTextSelectorSchema, v.description(\"インタラクティブ要素をテキスト内容で検索\"), v.metadata({ exampleValues: [\"国を選択\", \"言語\"] })),\n\tvalue: SelectValueSchema\n}) }), v.metadata({ description: \"テキストで要素を指定して選択\" }), v.transform((input) => ({\n\tcommand: \"select\",\n\tinteractableText: input.select.interactableText,\n\tvalue: input.select.value\n})));\n/**\n* select: { xpath: \"...\", value: \"...\" }\n*/\nconst SelectXpathSchema = v.pipe(v.object({ select: v.object({\n\txpath: v.pipe(XpathSelectorSchema, v.description(\"XPath形式で要素を指定\"), v.metadata({ exampleValues: [\"//select[@name='country']\"] })),\n\tvalue: SelectValueSchema\n}) }), v.metadata({ description: \"XPathで要素を指定して選択\" }), v.transform((input) => ({\n\tcommand: \"select\",\n\txpath: input.select.xpath,\n\tvalue: input.select.value\n})));\n/**\n* SelectコマンドYAMLスキーマ(Single Source of Truth)\n*\n* 3種類のセレクタをunionで組み合わせる。\n*\n* JSON Schema生成には typeMode: 'input' を使用し、\n* このRuntime版スキーマから入力形式のJSON Schemaを生成する。\n*/\nconst SelectYamlSchema = v.pipe(v.union([\n\tSelectCssSchema,\n\tSelectInteractableTextSchema,\n\tSelectXpathSchema\n]), v.description(\"セレクトボックスからオプションを選択する\"), v.metadata({ category: \"入力\" }));\n\n//#endregion\n//#region src/parser/schemas/commands/simple.schema.ts\n/**\n* シンプルコマンドスキーマ定義\n*\n* YAML入力形式のシンプルなコマンド(セレクタを使用しない)をvalibotで検証・変換する。\n*\n* 対応コマンド:\n* - open: URLを開く\n* - press: キーを押す\n* - snapshot: アクセシビリティスナップショットを取得\n* - screenshot: スクリーンショットを取得\n* - eval: JavaScriptを実行\n*\n* Single Source of Truth:\n* - 各*YamlSchema: Runtime版スキーマ(transform込み)\n* - JSON Schema生成には typeMode: 'input' を使用\n*\n* 出力型:\n* - OpenCommand, PressCommand, SnapshotCommand, ScreenshotCommand, EvalCommand: スキーマから導出される型\n*/\n/**\n* OpenコマンドYAMLスキーマ(Single Source of Truth)\n*\n* open: \"https://...\" → { command: 'open', url: Url }\n*\n* URLを開く。Branded TypeのUrlとして型安全に変換。\n*/\nconst OpenYamlSchema = v.pipe(v.object({ open: v.pipe(UrlSchema, v.description(\"開くURL\"), v.metadata({ exampleValues: [\"https://example.com\", \"https://google.com\"] })) }), v.description(\"URLを開く\"), v.metadata({ category: \"ナビゲーション\" }), v.transform((input) => ({\n\tcommand: \"open\",\n\turl: input.open\n})));\n/**\n* PressコマンドYAMLスキーマ(Single Source of Truth)\n*\n* press: \"Enter\" → { command: 'press', key: KeyboardKey }\n*\n* キーを押す。Branded TypeのKeyboardKeyとして型安全に変換。\n*/\nconst PressYamlSchema = v.pipe(v.object({ press: v.pipe(KeyboardKeySchema, v.description(\"押すキー\"), v.metadata({ exampleValues: [\n\t\"Enter\",\n\t\"Escape\",\n\t\"Tab\",\n\t\"ArrowDown\"\n] })) }), v.description(\"キーを押す\"), v.metadata({ category: \"インタラクション\" }), v.transform((input) => ({\n\tcommand: \"press\",\n\tkey: input.press\n})));\n/**\n* Screenshot簡略形式スキーマ\n*\n* screenshot: \"./path.png\" → { command: 'screenshot', path: FilePath, full: UseDefault }\n*\n* パスのみを指定した場合、fullオプションはデフォルト値を使用。\n* Branded TypeのFilePathとして型安全に変換。\n*/\nconst ScreenshotShorthandSchema = v.pipe(v.object({ screenshot: v.pipe(FilePathSchema, v.description(\"スクリーンショットの保存パス\"), v.metadata({ exampleValues: [\"./screenshot.png\", \"./output/screen.png\"] })) }), v.transform((input) => ({\n\tcommand: \"screenshot\",\n\tpath: input.screenshot,\n\tfull: UseDefault\n})));\n/**\n* Screenshot詳細形式スキーマ\n*\n* screenshot: { path: \"...\", full?: boolean } → { command: 'screenshot', path: FilePath, full: boolean | UseDefault }\n*\n* パスとfullオプションを明示的に指定。\n* Branded TypeのFilePathとして型安全に変換。\n*/\nconst ScreenshotDetailedSchema = v.pipe(v.object({ screenshot: v.object({\n\tpath: v.pipe(FilePathSchema, v.description(\"スクリーンショットの保存パス\"), v.metadata({ exampleValues: [\"./screenshot.png\", \"./output/screen.png\"] })),\n\tfull: v.optional(v.pipe(v.boolean(), v.description(\"フルページスクリーンショットを取得するか\"), v.metadata({ exampleValues: [true, false] })))\n}) }), v.transform((input) => ({\n\tcommand: \"screenshot\",\n\tpath: input.screenshot.path,\n\tfull: input.screenshot.full ?? UseDefault\n})));\n/**\n* ScreenshotコマンドYAMLスキーマ(Single Source of Truth)\n*\n* 簡略形式と詳細形式の両方を受け付ける。\n* - 簡略形式: screenshot: \"./path.png\"\n* - 詳細形式: screenshot: { path: \"...\", full?: boolean }\n*\n* fullオプションが指定されない場合、UseDefaultシンボルを使用。\n*/\nconst ScreenshotYamlSchema = v.pipe(v.union([ScreenshotShorthandSchema, ScreenshotDetailedSchema]), v.description(\"スクリーンショットを取得する\"), v.metadata({ category: \"キャプチャ\" }));\n/**\n* EvalコマンドYAMLスキーマ(Single Source of Truth)\n*\n* eval: \"console.log('hello')\" → { command: 'eval', script: JsExpression }\n*\n* JavaScriptを実行する。Branded TypeのJsExpressionとして型安全に変換。\n*/\nconst EvalYamlSchema = v.pipe(v.object({ eval: v.pipe(JsExpressionSchema, v.description(\"実行するJavaScriptコード\"), v.metadata({ exampleValues: [\"console.log(\\\"hello\\\")\", \"document.title\"] })) }), v.description(\"JavaScriptを実行する\"), v.metadata({ category: \"その他\" }), v.transform((input) => ({\n\tcommand: \"eval\",\n\tscript: input.eval\n})));\n\n//#endregion\n//#region src/parser/schemas/command-registry.ts\n/**\n* 全コマンドスキーマのレジストリ(Single Source of Truth)\n*\n* 順序は関係ない。全てのコマンドがここに登録されている必要がある。\n* スキーマには以下のメタデータが含まれている:\n* - v.description('...') - コマンドの説明\n* - v.metadata({ category: '...' }) - カテゴリ\n*/\nconst commandSchemas = [\n\t{\n\t\tname: \"open\",\n\t\tschema: OpenYamlSchema\n\t},\n\t{\n\t\tname: \"scroll\",\n\t\tschema: ScrollYamlSchema\n\t},\n\t{\n\t\tname: \"scrollIntoView\",\n\t\tschema: ScrollIntoViewYamlSchema\n\t},\n\t{\n\t\tname: \"click\",\n\t\tschema: ClickYamlSchema\n\t},\n\t{\n\t\tname: \"hover\",\n\t\tschema: HoverYamlSchema\n\t},\n\t{\n\t\tname: \"type\",\n\t\tschema: TypeYamlSchema\n\t},\n\t{\n\t\tname: \"fill\",\n\t\tschema: FillYamlSchema\n\t},\n\t{\n\t\tname: \"select\",\n\t\tschema: SelectYamlSchema\n\t},\n\t{\n\t\tname: \"press\",\n\t\tschema: PressYamlSchema\n\t},\n\t{\n\t\tname: \"wait\",\n\t\tschema: WaitYamlSchema\n\t},\n\t{\n\t\tname: \"screenshot\",\n\t\tschema: ScreenshotYamlSchema\n\t},\n\t{\n\t\tname: \"assertVisible\",\n\t\tschema: AssertVisibleYamlSchema\n\t},\n\t{\n\t\tname: \"assertNotVisible\",\n\t\tschema: AssertNotVisibleYamlSchema\n\t},\n\t{\n\t\tname: \"assertEnabled\",\n\t\tschema: AssertEnabledYamlSchema\n\t},\n\t{\n\t\tname: \"assertChecked\",\n\t\tschema: AssertCheckedYamlSchema\n\t},\n\t{\n\t\tname: \"eval\",\n\t\tschema: EvalYamlSchema\n\t}\n];\n\n//#endregion\n//#region src/parser/validators/normalizers/index.barrel.ts\n/**\n* コマンド正規化関数の統合エクスポート\n*\n* commandSchemas(Single Source of Truth)から全てのnormalizerを生成する。\n* 各スキーマに対してsafeParseを呼び出すnormalizerを動的に作成。\n*\n* スキーマの出力はBranded Type化されたCommand型。\n* validateCommandではnormalizerの結果をそのままCommandとして使用可能。\n*/\n/**\n* スキーマからnormalizer関数を生成\n*\n* safeParseを使用してスキーマに対して検証を行い、\n* 成功した場合は変換後の値(Branded Type化されたCommand)を返す。\n*\n* @param schema - valibotスキーマ(出力型はCommand)\n* @returns normalizer関数\n*/\nconst createNormalizer = (schema) => {\n\treturn (value) => {\n\t\tconst result = safeParse(schema, value);\n\t\tif (result.success) return result.output;\n\t\treturn null;\n\t};\n};\n/**\n* 全てのnormalizer関数をまとめた配列\n*\n* commandSchemas(SSoT)から動的に生成される。\n* validateCommandで順次試行される。\n* 成功した場合、Branded Type化されたCommandを返す。\n*/\nconst normalizers = commandSchemas.map((entry) => createNormalizer(entry.schema));\n\n//#endregion\n//#region src/parser/validators/command-validator.ts\n/**\n* コマンドバリデーター\n*\n* YAMLからパースされた未知の値を型安全なCommand型に変換する。\n* normalizersを使用してBranded Type化された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* YAMLParseErrorから位置情報を抽出する\n*\n* @param error - YAMLParseError\n* @returns line, column情報を含むオブジェクト\n*/\nconst extractYamlErrorPosition = (error) => ({\n\tline: error.linePos?.[0]?.line ?? NoInfo,\n\tcolumn: error.linePos?.[0]?.col ?? NoInfo\n});\n/**\n* YAMLパースエラーをParseErrorに変換する\n*\n* @param error - YAMLパース時に発生したエラー\n* @returns ParseError形式のエラー\n*/\nconst convertYamlParseError = (error) => {\n\tif (error instanceof yaml.YAMLParseError) {\n\t\tconst position = extractYamlErrorPosition(error);\n\t\treturn {\n\t\t\ttype: \"yaml_syntax_error\",\n\t\t\tmessage: error.message,\n\t\t\t...position\n\t\t};\n\t}\n\treturn {\n\t\ttype: \"yaml_syntax_error\",\n\t\tmessage: error instanceof Error ? error.message : \"Unknown YAML parse error\",\n\t\tline: NoInfo,\n\t\tcolumn: NoInfo\n\t};\n};\n/**\n* YAMLパースをResult型でラップ\n*\n* fromThrowableのスコープは最小限(yaml.parseのみ)\n*\n* @remarks\n* 新形式では単一ドキュメントのみをサポートするため、parseAllDocumentsではなくparseを使用\n*/\nconst safeYamlParse = fromThrowable((text) => yaml.parse(text), convertYamlParseError);\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\treturn match(root).with({ steps: P.array() }, (r) => ok(r)).with({ steps: P.any }, () => 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})).otherwise(() => 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};\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* ts-patternで型安全にenvキーをチェックする。\n*\n* @param root - 検証済みのルートオブジェクト\n* @returns env情報\n*\n* @remarks\n* - envキーがない場合: 空のオブジェクトを返す\n* - envがオブジェクトでない場合: 空のオブジェクトを返す\n*/\nconst extractEnvFromRoot = (root) => {\n\tconst envSection = root.env;\n\treturn isRecord(envSection) ? 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* @param processEnv - プロセス環境変数(process.env)\n* @param dotEnv - .envファイルから読み込んだ環境変数\n* @returns 成功時: Flowオブジェクト、失敗時: ParseError\n*\n* @remarks\n* 新しいYAML形式のみをサポート:\n* - ルートはオブジェクト形式(`steps`キーは必須、`env`キーはオプション)\n* - 旧形式(配列形式や`---`区切り)はサポートしない\n* - 環境変数はCommand型検証前に解決される\n* - コマンドは型検証され、不正な形式はエラーとなる\n*\n* 処理順序:\n* 1. YAMLをパース\n* 2. 環境変数を解決(文字列レベル)\n* 3. Command型に検証\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(\n* yamlContent,\n* 'login.enbu.yaml',\n* process.env,\n* {}\n* );\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*\n* @remarks\n* convertYamlParseErrorを再利用してエラーハンドリングを統一\n*/\nconst safeParseDocument = fromThrowable((text) => yaml.parseDocument(text), convertYamlParseError);\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};\n/**\n* ルートオブジェクトからRawFlowDataを構築する\n*/\nconst buildRawFlowData = (root) => ({\n\tenv: extractEnvFromRoot(root),\n\tsteps: extractStepsFromRoot(root)\n});\n/**\n* 解決済みRawFlowDataからFlowを構築する\n*/\nconst buildFlow = (resolvedRawFlow, fileName) => validateCommands(resolvedRawFlow.steps).map((validatedCommands) => ({\n\tname: fileName.replace(/\\.enbu\\.yaml$/, \"\"),\n\tenv: resolvedRawFlow.env,\n\tsteps: validatedCommands\n}));\nconst parseFlowYaml = (yamlContent, fileName, processEnv, dotEnv) => safeYamlParse(yamlContent).andThen(validateRootStructure).map(buildRawFlowData).andThen((rawFlow) => resolveEnvVariables(rawFlow, processEnv, dotEnv)).andThen((resolvedRawFlow) => buildFlow(resolvedRawFlow, fileName));\n\n//#endregion\n//#region src/executor/commands/cli-selector-utils.ts\n/**\n* SelectorSpecまたはResolvedSelectorSpecからセレクタ文字列を取得する\n*\n* autoWaitの入力やエラーメッセージで使用する文字列表現を返す。\n* css/text/xpath/refのいずれかから値を取り出す。\n*\n* @param spec - セレクタ指定\n* @returns セレクタ文字列\n*/\nconst getSelectorString = (spec) => match(spec).with({ css: P.string }, (s) => s.css).with({ interactableText: P.string }, (s) => s.interactableText).with({ anyText: P.string }, (s) => s.anyText).with({ xpath: P.string }, (s) => s.xpath).with({ ref: P.string }, (s) => s.ref).exhaustive();\n/**\n* SelectorSpecまたはResolvedSelectorSpecがTextSelectorかどうかを判定する\n*\n* @param spec - セレクタ指定\n* @returns InteractableTextSelectorまたはAnyTextSelectorの場合true\n*/\nconst isTextSelector = (spec) => match(spec).with({ interactableText: P.string }, () => true).with({ anyText: P.string }, () => true).otherwise(() => false);\n/**\n* SelectorSpecまたはResolvedSelectorSpecからCLIセレクタを取得する\n*\n* agent-browser CLIに渡すセレクタ文字列を生成する。\n* - CssSelector: そのまま使用\n* - RefSelector: そのまま使用\n* - TextSelector: \"text=\" プレフィックスを付与してCliTextSelectorに変換\n* - XpathSelector: \"xpath=\" プレフィックスを付与してCliXpathSelectorに変換\n*\n* autoWaitで解決されたRefがある場合はそれを優先使用する。\n*\n* @param spec - セレクタ指定\n* @param context - 実行コンテキスト\n* @returns CLIセレクタのResultAsync\n*/\nconst resolveCliSelector = (spec, _context) => match(spec).with({ css: P.string }, (s) => {\n\tconst selector = s.css;\n\treturn okAsync(selector);\n}).with({ ref: P.string }, (s) => {\n\tconst selector = s.ref;\n\treturn okAsync(selector);\n}).with({ interactableText: P.string }, (s) => {\n\treturn asCliTextSelector(`text=${s.interactableText}`).match((cliTextSelector) => {\n\t\treturn okAsync(cliTextSelector);\n\t}, (error) => errAsync(error));\n}).with({ anyText: P.string }, (s) => {\n\treturn asCliTextSelector(`text=${s.anyText}`).match((cliTextSelector) => {\n\t\treturn okAsync(cliTextSelector);\n\t}, (error) => errAsync(error));\n}).with({ xpath: P.string }, (s) => {\n\treturn asCliXpathSelector(`xpath=${s.xpath}`).match((cliXpathSelector) => {\n\t\treturn okAsync(cliXpathSelector);\n\t}, (error) => errAsync(error));\n}).exhaustive();\n/**\n* エラーメッセージ用のセレクタ文字列を取得する\n*\n* SelectorSpecまたはResolvedSelectorSpecから、エラーメッセージに含めるセレクタ文字列を取得する。\n* autoWaitで解決されている場合はその値を、そうでない場合は元の値を返す。\n*\n* @param spec - セレクタ指定\n* @param context - 実行コンテキスト\n* @returns セレクタ文字列\n*/\nconst getSelectorForErrorMessage = (spec, _context) => {\n\treturn getSelectorString(spec);\n};\n\n//#endregion\n//#region src/executor/commands/assertions.ts\n/**\n* 要素の出現を待機する\n*\n* CSSセレクタ/@ref形式の場合: browserWaitForSelector\n* テキストの場合: browserWaitForText\n*\n* @param spec - セレクタ指定\n* @param context - 実行コンテキスト\n* @returns 成功時はok(undefined)、失敗時はerr(AgentBrowserError)\n*/\nconst waitForElement = (spec, context) => {\n\tif (isTextSelector(spec)) return browserWaitForText(getSelectorString(spec), context.executeOptions).map(() => void 0);\n\treturn resolveCliSelector(spec, context).andThen((selector) => browserWaitForSelector(selector, context.executeOptions)).map(() => void 0);\n};\n/**\n* ページの安定状態(networkidle)を待機する\n*\n* @param context - 実行コンテキスト\n* @returns 成功時はok(undefined)、失敗時はerr(AgentBrowserError)\n*/\nconst waitForPageStable = (context) => browserWaitForNetworkIdle(context.executeOptions).map(() => void 0);\n/**\n* 表示状態を確認するヘルパー関数\n*/\nconst checkVisibility = (selectorStr, data, startTime) => {\n\tconst duration = Date.now() - startTime;\n\tif (!data.visible) return errAsync({\n\t\ttype: \"assertion_failed\",\n\t\tmessage: `Element \"${selectorStr}\" is not visible`,\n\t\tcommand: \"assertVisible\",\n\t\tselector: selectorStr,\n\t\texpected: true,\n\t\tactual: false\n\t});\n\treturn okAsync({\n\t\tstdout: JSON.stringify(data),\n\t\tduration\n\t});\n};\n/**\n* セレクタを取得して表示状態を確認する\n*/\nconst getAndCheckVisibility = (spec, context, startTime) => resolveCliSelector(spec, context).map((selector) => ({\n\tselector,\n\tselectorStr: getSelectorForErrorMessage(spec, context),\n\tstartTime\n})).andThen((ctx) => browserIsVisible(ctx.selector, context.executeOptions).map((data) => ({\n\tctx,\n\tdata\n}))).andThen(({ ctx, data }) => checkVisibility(ctx.selectorStr, data, ctx.startTime));\n/**\n* TextSelectorのassertVisible処理\n*\n* TextSelectorの場合、browserWaitForTextの成功自体が表示確認となる。\n* browserIsVisibleはCLIセレクタを必要とするため使用できない。\n*\n* @param selectorStr - セレクタ文字列\n* @param context - 実行コンテキスト\n* @param startTime - 開始時刻\n* @returns コマンド実行結果\n*/\nconst handleTextSelectorVisible = (selectorStr, context, startTime) => browserWaitForText(selectorStr, context.executeOptions).map(() => ({\n\tstdout: JSON.stringify({ visible: true }),\n\tduration: Date.now() - startTime\n})).mapErr(() => ({\n\ttype: \"assertion_failed\",\n\tmessage: `Text \"${selectorStr}\" is not visible`,\n\tcommand: \"assertVisible\",\n\tselector: selectorStr,\n\texpected: true,\n\tactual: false\n}));\n/**\n* assertVisible コマンドのハンドラ\n*\n* 指定されたセレクタの要素が表示されていることを確認する。\n*\n* 処理の流れ:\n* - TextSelector: browserWaitForTextで直接確認(成功=表示)\n* (注: ResolvedSelectorSpecにはtextは含まれないが、後方互換のためチェック)\n* - CSSセレクタ/Ref/XPath:\n* 1. agent-browserのwaitコマンドで要素の出現を待機\n* 2. agent-browserのis visibleコマンドで表示状態を確認\n*\n* 要素が表示されていない場合は assertion_failed エラーを返す。\n*\n* @param command - assertVisible コマンドのパラメータ(解決済み)\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleAssertVisible = (command, context) => {\n\tconst startTime = Date.now();\n\tconst selectorStr = getSelectorString(command);\n\tif (isTextSelector(command)) return handleTextSelectorVisible(selectorStr, context, startTime);\n\treturn waitForElement(command, context).mapErr(() => ({\n\t\ttype: \"timeout\",\n\t\tcommand: \"wait\",\n\t\targs: [selectorStr],\n\t\ttimeoutMs: context.autoWaitTimeoutMs\n\t})).andThen(() => getAndCheckVisibility(command, context, startTime));\n};\n/**\n* 非表示状態を確認するヘルパー関数\n*/\nconst checkNotVisible = (selectorStr, data, startTime) => {\n\tconst duration = Date.now() - startTime;\n\tif (data.visible) return errAsync({\n\t\ttype: \"assertion_failed\",\n\t\tmessage: `Element \"${selectorStr}\" is visible`,\n\t\tcommand: \"assertNotVisible\",\n\t\tselector: selectorStr,\n\t\texpected: false,\n\t\tactual: true\n\t});\n\treturn okAsync({\n\t\tstdout: JSON.stringify(data),\n\t\tduration\n\t});\n};\n/**\n* セレクタを取得して非表示状態を確認する\n*/\nconst getAndCheckNotVisible = (spec, context, startTime) => resolveCliSelector(spec, context).map((selector) => ({\n\tselector,\n\tselectorStr: getSelectorForErrorMessage(spec, context),\n\tstartTime\n})).andThen((ctx) => browserIsVisible(ctx.selector, context.executeOptions).map((data) => ({\n\tctx,\n\tdata\n}))).andThen(({ ctx, data }) => checkNotVisible(ctx.selectorStr, data, ctx.startTime));\n/**\n* 短いタイムアウトでテキストの非表示を確認する\n*\n* browserWaitForTextを短いタイムアウトで実行し、\n* タイムアウトすれば非表示(成功)、見つかれば表示(エラー)と判定する。\n*\n* @param selectorStr - セレクタ文字列\n* @param context - 実行コンテキスト\n* @param startTime - 開始時刻\n* @returns コマンド実行結果\n*/\nconst checkTextNotVisible = async (selectorStr, context, startTime) => {\n\treturn (await browserWaitForText(selectorStr, {\n\t\t...context.executeOptions,\n\t\ttimeout: 1e3\n\t})).match(() => errAsync({\n\t\ttype: \"assertion_failed\",\n\t\tmessage: `Text \"${selectorStr}\" is visible`,\n\t\tcommand: \"assertNotVisible\",\n\t\tselector: selectorStr,\n\t\texpected: false,\n\t\tactual: true\n\t}), () => okAsync({\n\t\tstdout: JSON.stringify({ visible: false }),\n\t\tduration: Date.now() - startTime\n\t}));\n};\n/**\n* TextSelectorのassertNotVisible処理\n*\n* TextSelectorの場合、ページの安定状態を待機してから、\n* browserWaitForTextがタイムアウトすれば非表示と判断する。\n* 短いタイムアウト(1秒)で確認を行う。\n*\n* @param selectorStr - セレクタ文字列\n* @param context - 実行コンテキスト\n* @param startTime - 開始時刻\n* @returns コマンド実行結果\n*/\nconst handleTextSelectorNotVisible = (selectorStr, context, startTime) => waitForPageStable(context).mapErr(() => ({\n\ttype: \"timeout\",\n\tcommand: \"wait\",\n\targs: [\"--load\", \"networkidle\"],\n\ttimeoutMs: context.autoWaitTimeoutMs\n})).andThen(() => ResultAsync.fromSafePromise(checkTextNotVisible(selectorStr, context, startTime))).andThen((result) => result);\n/**\n* assertNotVisible コマンドのハンドラ\n*\n* 指定されたセレクタの要素が表示されていないことを確認する。\n*\n* 処理の流れ:\n* - TextSelector: networkidleを待機後、browserWaitForTextがタイムアウトすれば成功\n* (注: ResolvedSelectorSpecにはtextは含まれないが、後方互換のためチェック)\n* - CSSセレクタ/Ref/XPath:\n* 1. agent-browserのwaitコマンドでページの安定状態(networkidle)を待機\n* 2. agent-browserのis visibleコマンドで表示状態を確認\n*\n* 要素が表示されている場合は assertion_failed エラーを返す。\n*\n* @param command - assertNotVisible コマンドのパラメータ(解決済み)\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleAssertNotVisible = (command, context) => {\n\tconst startTime = Date.now();\n\tconst selectorStr = getSelectorString(command);\n\tif (isTextSelector(command)) return handleTextSelectorNotVisible(selectorStr, context, startTime);\n\treturn waitForPageStable(context).mapErr(() => ({\n\t\ttype: \"timeout\",\n\t\tcommand: \"wait\",\n\t\targs: [\"--load\", \"networkidle\"],\n\t\ttimeoutMs: context.autoWaitTimeoutMs\n\t})).andThen(() => getAndCheckNotVisible(command, context, startTime));\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*/\n/**\n* enabled状態のチェック結果を処理する\n*/\nconst checkEnabled = (selectorStr, data, startTime) => {\n\tconst duration = Date.now() - startTime;\n\tif (!data.enabled) return errAsync({\n\t\ttype: \"assertion_failed\",\n\t\tmessage: `Element \"${selectorStr}\" is not enabled`,\n\t\tcommand: \"assertEnabled\",\n\t\tselector: selectorStr,\n\t\texpected: true,\n\t\tactual: false\n\t});\n\treturn okAsync({\n\t\tstdout: JSON.stringify(data),\n\t\tduration\n\t});\n};\nconst handleAssertEnabled = (command, context) => {\n\tconst startTime = Date.now();\n\tconst selectorStr = getSelectorForErrorMessage(command, context);\n\treturn resolveCliSelector(command, context).map((selector) => ({\n\t\tselector,\n\t\tselectorStr,\n\t\tstartTime\n\t})).andThen((ctx) => browserIsEnabled(ctx.selector, context.executeOptions).map((data) => ({\n\t\tctx,\n\t\tdata\n\t}))).andThen(({ ctx, data }) => checkEnabled(ctx.selectorStr, data, ctx.startTime));\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*/\n/**\n* checked状態のチェック結果を処理する\n*/\nconst checkChecked = (selectorStr, data, startTime, expectedChecked) => {\n\tconst duration = Date.now() - startTime;\n\tconst actualChecked = data.checked;\n\tif (actualChecked !== expectedChecked) return errAsync({\n\t\ttype: \"assertion_failed\",\n\t\tmessage: `Element \"${selectorStr}\" checked state is ${actualChecked}, expected ${expectedChecked}`,\n\t\tcommand: \"assertChecked\",\n\t\tselector: selectorStr,\n\t\texpected: expectedChecked,\n\t\tactual: actualChecked\n\t});\n\treturn okAsync({\n\t\tstdout: JSON.stringify(data),\n\t\tduration\n\t});\n};\nconst handleAssertChecked = (command, context) => {\n\tconst startTime = Date.now();\n\tconst selectorStr = getSelectorForErrorMessage(command, context);\n\tconst expectedChecked = command.checked === UseDefault ? true : command.checked;\n\treturn resolveCliSelector(command, context).map((selector) => ({\n\t\tselector,\n\t\tselectorStr,\n\t\tstartTime,\n\t\texpectedChecked\n\t})).andThen((ctx) => browserIsChecked(ctx.selector, context.executeOptions).map((data) => ({\n\t\tctx,\n\t\tdata\n\t}))).andThen(({ ctx, data }) => checkChecked(ctx.selectorStr, data, ctx.startTime, ctx.expectedChecked));\n};\n\n//#endregion\n//#region src/executor/commands/capture.ts\n/**\n* screenshot コマンドのハンドラ\n*\n* ページのスクリーンショットを撮影し、指定されたパスに保存する。\n* fullオプションがtrueの場合、ページ全体のスクリーンショットを撮影する。\n*\n* @param command - screenshot コマンドのパラメータ\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleScreenshot = (command, context) => {\n\tconst startTime = Date.now();\n\tconst fullPage = command.full === UseDefault ? void 0 : command.full;\n\treturn browserScreenshot(command.path, {\n\t\t...context.executeOptions,\n\t\tfullPage\n\t}).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 = (command, context) => {\n\tconst startTime = Date.now();\n\treturn browserEval(command.script, context.executeOptions).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* hover コマンドのハンドラ\n*\n* 指定されたセレクタの要素にマウスホバーする。\n* ResolvedSelectorSpec (css/ref/xpath) からCLIセレクタを解決して実行する。\n*\n* @param command - hover コマンドのパラメータ(解決済み)\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleHover = (command, context) => {\n\tconst startTime = Date.now();\n\treturn resolveCliSelector(command, context).andThen((selector) => browserHover(selector, context.executeOptions)).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n};\n/**\n* select コマンドのハンドラ\n*\n* 指定されたセレクタのセレクトボックスから値を選択する。\n* ResolvedSelectorSpec (css/ref/xpath) からCLIセレクタを解決して実行する。\n*\n* @param command - select コマンドのパラメータ(解決済み)\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleSelect = (command, context) => {\n\tconst startTime = Date.now();\n\treturn resolveCliSelector(command, context).andThen((selector) => browserSelect(selector, command.value, context.executeOptions)).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/interaction.ts\n/**\n* click コマンドのハンドラ\n*\n* 指定されたセレクタの要素をクリックする。\n* ResolvedSelectorSpec (css/ref/xpath) からCLIセレクタを解決して実行する。\n*\n* @param command - click コマンドのパラメータ(解決済み)\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResultAsync型\n*/\nconst handleClick = (command, context) => {\n\tconst startTime = Date.now();\n\treturn resolveCliSelector(command, context).andThen((selector) => browserClick(selector, context.executeOptions)).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n};\n/**\n* type コマンドのハンドラ\n*\n* 指定されたセレクタの要素にテキストを入力する。\n* ResolvedSelectorSpec (css/ref/xpath) からCLIセレクタを解決して実行する。\n*\n* @param command - type コマンドのパラメータ(解決済み)\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResultAsync型\n*/\nconst handleType = (command, context) => {\n\tconst startTime = Date.now();\n\treturn resolveCliSelector(command, context).andThen((selector) => browserType(selector, command.value, context.executeOptions)).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n};\n/**\n* fill コマンドのハンドラ\n*\n* 指定されたセレクタのフォーム要素にテキストを入力する。\n* 既存のテキストは自動的にクリアされる。\n* ResolvedSelectorSpec (css/ref/xpath) からCLIセレクタを解決して実行する。\n*\n* @param command - fill コマンドのパラメータ(解決済み)\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResultAsync型\n*/\nconst handleFill = (command, context) => {\n\tconst startTime = Date.now();\n\treturn resolveCliSelector(command, context).andThen((selector) => browserFill(selector, command.value, context.executeOptions)).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 コマンド実行結果を含むResultAsync型\n*/\nconst handlePress = (command, context) => {\n\tconst startTime = Date.now();\n\treturn browserPress(command.key, context.executeOptions).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/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 = (command, context) => {\n\tconst startTime = Date.now();\n\treturn browserOpen(command.url, context.executeOptions).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/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 = (command, context) => {\n\tconst startTime = Date.now();\n\tconst direction = command.direction;\n\treturn browserScroll(direction, command.amount, context.executeOptions).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n};\n/**\n* TextSelectorのscrollIntoView処理\n*\n* TextSelectorの場合、Playwrightの `text=<text>` 形式を使用して\n* 要素までスクロールする。まずbrowserWaitForTextで要素の存在を確認し、\n* その後 `text=<text>` 形式でscrollIntoViewを実行する。\n*\n* @param textStr - テキスト文字列\n* @param context - 実行コンテキスト\n* @param startTime - 開始時刻\n* @returns コマンド実行結果\n*/\nconst handleTextSelectorScrollIntoView = (textStr, context, startTime) => browserWaitForText(textStr, context.executeOptions).andThen(() => {\n\treturn asCliTextSelector(`text=${textStr}`).match((selector) => browserScrollIntoView(selector, context.executeOptions), (error) => errAsync(error));\n}).map((output) => ({\n\tstdout: JSON.stringify(output),\n\tduration: Date.now() - startTime\n}));\n/**\n* CSS/RefセレクタのscrollIntoView処理\n*\n* CssSelectorまたはRefSelectorの要素までスクロールする。\n*\n* 注意: agent-browser 0.5.0 の scrollintoview コマンドには @ref 形式を\n* サポートしないバグがある(browser.getLocator() を使用していない)。\n* そのため、@ref 形式の場合は focus コマンドを使用してスクロールを実現する。\n* focus コマンドは Playwright の focus() を使用し、要素をビューポートに\n* 表示するためにスクロールする動作を持つ。\n*\n* @param command - scrollIntoView コマンドのパラメータ(解決済み)\n* @param context - 実行コンテキスト\n* @param startTime - 開始時刻\n* @returns コマンド実行結果\n*/\nconst handleCssOrRefScrollIntoView = (command, context, startTime) => resolveCliSelector(command, context).andThen((selector) => {\n\treturn browserScrollIntoView(selector, context.executeOptions).map((output) => ({\n\t\tstdout: JSON.stringify(output),\n\t\tduration: Date.now() - startTime\n\t}));\n});\n/**\n* scrollIntoView コマンドのハンドラ\n*\n* 指定されたセレクタの要素がビューポートに表示されるようにスクロールする。\n*\n* 処理の流れ:\n* - TextSelector: browserWaitForTextで存在確認後、text=形式でスクロール\n* (注: ResolvedSelectorSpecにはtextは含まれないが、後方互換のためチェック)\n* - CSSセレクタ/Ref/XPath: resolveCliSelectorで解決後、scrollIntoViewを実行\n* (@ref形式の場合はfocusコマンドで代用)\n*\n* @param command - scrollIntoView コマンドのパラメータ(解決済み)\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleScrollIntoView = (command, context) => {\n\tconst startTime = Date.now();\n\tconst selectorStr = getSelectorString(command);\n\tif (isTextSelector(command)) return handleTextSelectorScrollIntoView(selectorStr, context, startTime);\n\treturn handleCssOrRefScrollIntoView(command, context, startTime);\n};\n\n//#endregion\n//#region src/executor/commands/wait.ts\n/**\n* 出力をCommandResultに変換するヘルパー関数を生成する\n*\n* @param startTime - コマンド実行開始時刻(ミリ秒)\n* @returns CommandResult変換関数\n*/\nconst createResultMapper = (startTime) => (output) => ({\n\tstdout: JSON.stringify(output),\n\tduration: Date.now() - startTime\n});\n/**\n* wait コマンドのハンドラ\n*\n* agent-browserのwaitコマンドと1:1対応:\n* - ms: 指定ミリ秒待機 (wait <ms>)\n* - css: CSSセレクタで要素出現を待つ (wait <selector>)\n* - text: テキスト出現を待つ (wait --text <text>)\n* - xpath: XPathセレクタで要素出現を待つ (wait <selector>)\n* - load: ロード状態を待つ (wait --load <state>)\n* - url: URL変化を待つ (wait --url <pattern>)\n* - fn: JS式がtruthyになるのを待つ (wait --fn <expression>)\n*\n* ts-patternでパターンマッチし、型安全にルーティングする。\n*\n* @param command - wait コマンドのパラメータ\n* @param context - 実行コンテキスト\n* @returns コマンド実行結果を含むResult型\n*/\nconst handleWait = (command, context) => {\n\tconst toResult = createResultMapper(Date.now());\n\tconst options = context.executeOptions;\n\treturn match(command).with({ ms: P.number }, (cmd) => browserWaitForMs(cmd.ms, options).map(toResult)).with({ css: P.string }, (cmd) => browserWaitForSelector(cmd.css, options).map(toResult)).with({ anyText: P.string }, (cmd) => browserWaitForText(cmd.anyText, options).map(toResult)).with({ xpath: P.string }, (cmd) => asCliXpathSelector(`xpath=${cmd.xpath}`).match((cliXpathSelector) => browserWaitForSelector(cliXpathSelector, options).map(toResult), (error) => errAsync(error))).with({ load: P.string }, (cmd) => browserWaitForLoad(cmd.load, options).map(toResult)).with({ url: P.string }, (cmd) => browserWaitForUrl(cmd.url, options).map(toResult)).with({ fn: P.string }, (cmd) => browserWaitForFunction(cmd.fn, options).map(toResult)).exhaustive();\n};\n\n//#endregion\n//#region src/executor/commands/handler-registry.ts\n/**\n* コマンドを実行するルーター関数\n*\n* ts-patternのmatchで網羅的にコマンドをルーティングする。\n* exhaustive()により、ResolvedCommand型の全バリアントがカバーされていることを型レベルで保証する。\n* returnType で戻り型を明示することで、各ハンドラのエラー型が ExecutorError に拡大される。\n*/\nconst executeResolvedCommand = (command, context) => match(command).returnType().with({ command: \"open\" }, (cmd) => handleOpen(cmd, context)).with({ command: \"click\" }, (cmd) => handleClick(cmd, context)).with({ command: \"type\" }, (cmd) => handleType(cmd, context)).with({ command: \"fill\" }, (cmd) => handleFill(cmd, context)).with({ command: \"press\" }, (cmd) => handlePress(cmd, context)).with({ command: \"hover\" }, (cmd) => handleHover(cmd, context)).with({ command: \"select\" }, (cmd) => handleSelect(cmd, context)).with({ command: \"scroll\" }, (cmd) => handleScroll(cmd, context)).with({ command: \"scrollIntoView\" }, (cmd) => handleScrollIntoView(cmd, context)).with({ command: \"wait\" }, (cmd) => handleWait(cmd, context)).with({ command: \"screenshot\" }, (cmd) => handleScreenshot(cmd, context)).with({ command: \"eval\" }, (cmd) => handleEval(cmd, context)).with({ command: \"assertVisible\" }, (cmd) => handleAssertVisible(cmd, context)).with({ command: \"assertNotVisible\" }, (cmd) => handleAssertNotVisible(cmd, context)).with({ command: \"assertEnabled\" }, (cmd) => handleAssertEnabled(cmd, context)).with({ command: \"assertChecked\" }, (cmd) => handleAssertChecked(cmd, context)).exhaustive();\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* 撮影が失敗した場合はエラーを返す。\n*\n* @param context - 実行コンテキスト(セッション名や実行オプションを含む)\n* @returns 成功時: スクリーンショットのパス、失敗時: AgentBrowserError\n*/\nconst captureErrorScreenshot = (context) => {\n\tconst timestamp = Date.now();\n\tconst screenshotPath = path.join(os.tmpdir(), `flow-error-${timestamp}.png`);\n\treturn asFilePath(screenshotPath).asyncAndThen((validPath) => browserScreenshot(validPath, context.executeOptions).map(() => screenshotPath));\n};\n\n//#endregion\n//#region src/executor/wait-until.ts\n/**\n* デバッグログ用(stderrに出力してno-consoleルールを回避)\n*/\nconst DEBUG$1 = process.env.DEBUG_FLOW === \"1\";\nconst debugLog$1 = (msg, ...args) => {\n\tif (DEBUG$1) process.stderr.write(`[wait-until] ${msg} ${args.map(String).join(\" \")}\\n`);\n};\n/**\n* 指定ミリ秒待機\n*\n* @param ms - 待機するミリ秒数\n* @returns 待機が完了したら解決されるPromise\n*/\nconst sleep = (ms) => {\n\treturn new Promise((resolve$1) => setTimeout(resolve$1, ms));\n};\n/**\n* タイムアウトエラーを生成する\n*\n* @param options - waitUntilオプション\n* @param timeoutMs - タイムアウト時間\n* @returns AgentBrowserError\n*/\nconst createTimeoutError = (options, timeoutMs) => ({\n\ttype: \"timeout\",\n\tcommand: options.commandName,\n\targs: [options.selectorForError],\n\ttimeoutMs\n});\n/**\n* 単一のポーリングイテレーションを実行する\n*\n* @param checkFunc - チェック関数\n* @param context - 実行コンテキスト\n* @param options - オプション\n* @param startTime - 処理開始時刻\n* @param pollCount - 現在のポーリング回数\n* @returns 結果を含むResultAsync\n*/\nconst executePollIteration = (checkFunc, context, options, startTime, pollCount) => {\n\tdebugLog$1(`poll #${pollCount}: checking...`);\n\treturn checkFunc().andThen((result) => {\n\t\tif (result.type === \"found\") {\n\t\t\tdebugLog$1(`poll #${pollCount}: found!`);\n\t\t\treturn okAsync({\n\t\t\t\ttype: \"found\",\n\t\t\t\tvalue: result.value\n\t\t\t});\n\t\t}\n\t\tif (result.type === \"error\") {\n\t\t\tdebugLog$1(`poll #${pollCount}: error`, result.error);\n\t\t\treturn errAsync(result.error);\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 >= context.autoWaitTimeoutMs) {\n\t\t\tdebugLog$1(`poll #${pollCount}: TIMEOUT`);\n\t\t\treturn errAsync(createTimeoutError(options, context.autoWaitTimeoutMs));\n\t\t}\n\t\tdebugLog$1(`poll #${pollCount}: will continue...`);\n\t\treturn okAsync({ type: \"continue\" });\n\t});\n};\n/**\n* 次のポーリングまで待機する\n*\n* @param nextContext - 次のポーリングのコンテキスト\n* @returns 待機後のコンテキスト\n*/\nconst sleepAndPollNext = (nextContext) => ResultAsync.fromSafePromise(sleep(nextContext.context.autoWaitIntervalMs)).map(() => nextContext);\n/**\n* 次のポーリングを再帰的に実行する\n*\n* @param ctx - 次のポーリングのコンテキスト\n* @returns 結果を含むResultAsync\n*/\nconst continuePolling = (ctx) => pollRecursively(ctx.checkFunc, ctx.context, ctx.options, ctx.startTime, ctx.pollCount);\n/**\n* ポーリング結果を処理し、見つかればOK、継続なら次のポーリングを実行する\n*\n* @param result - ポーリングイテレーションの結果\n* @param checkFunc - チェック関数\n* @param context - 実行コンテキスト\n* @param options - オプション\n* @param startTime - 処理開始時刻\n* @param pollCount - 現在のポーリング回数\n* @returns 結果を含むResultAsync\n*/\nconst handlePollResult = (result, checkFunc, context, options, startTime, pollCount) => {\n\tif (result.type === \"found\") return okAsync(result.value);\n\treturn sleepAndPollNext({\n\t\tcheckFunc,\n\t\tcontext,\n\t\toptions,\n\t\tstartTime,\n\t\tpollCount: pollCount + 1\n\t}).andThen(continuePolling);\n};\n/**\n* 再帰的にポーリングを実行する\n*\n* @param checkFunc - チェック関数\n* @param context - 実行コンテキスト\n* @param options - オプション\n* @param startTime - 処理開始時刻\n* @param pollCount - 現在のポーリング回数\n* @returns 結果を含むResultAsync\n*/\nconst pollRecursively = (checkFunc, context, options, startTime, pollCount) => executePollIteration(checkFunc, context, options, startTime, pollCount).map((result) => ({\n\tresult,\n\tcheckFunc,\n\tcontext,\n\toptions,\n\tstartTime,\n\tpollCount\n})).andThen(({ result: pollResult, ...params }) => handlePollResult(pollResult, params.checkFunc, params.context, params.options, params.startTime, params.pollCount));\n/**\n* checkFuncがfoundを返すまでポーリングして待機する\n*\n* @param checkFunc - チェック関数。found/not_found/errorのいずれかを返す\n* @param context - 実行コンテキスト(タイムアウト時間、ポーリング間隔を含む)\n* @param options - オプション(エラーメッセージ用のセレクタ文字列など)\n* @returns 成功時: checkFuncが返したT、失敗時: AgentBrowserError\n*/\nconst waitUntil = (checkFunc, context, options) => {\n\tdebugLog$1(`waitUntil start: selector=${options.selectorForError}`);\n\tdebugLog$1(`timeout=${context.autoWaitTimeoutMs}ms, interval=${context.autoWaitIntervalMs}ms`);\n\treturn pollRecursively(checkFunc, context, options, Date.now(), 1);\n};\n\n//#endregion\n//#region src/executor/selector-wait.ts\n/**\n* CSS/XPath用: browserIsVisibleでチェックするcheckFunc\n*\n* @param selector - CLIセレクタ\n* @param context - 実行コンテキスト\n* @returns CheckResult<true>を返すcheckFunc\n*/\nconst createVisibilityCheckFunc = (selector, context) => () => browserIsVisible(selector, context.executeOptions).map((data) => {\n\tif (data.visible) return {\n\t\ttype: \"found\",\n\t\tvalue: true\n\t};\n\treturn { type: \"not_found\" };\n});\n/**\n* 要素がテキストセレクタにマッチするかどうかを判定する\n*\n* @param ref - 要素情報\n* @param text - 検索するテキスト\n* @returns マッチする場合はtrue\n*/\nconst isMatchingElement = (ref, text) => {\n\treturn ref.name.includes(text) || ref.role === text || ref.name === text;\n};\n/**\n* snapshotのrefsからテキストにマッチするrefIdを検索する\n*\n* @param text - 検索するテキスト\n* @param refs - snapshotから取得した要素参照マップ\n* @returns マッチ結果\n*/\nconst findMatchingRefId = (text, refs) => {\n\tconst matchedRefIds = Object.entries(refs).filter(([, ref]) => isMatchingElement(ref, text)).map(([refId]) => refId);\n\tif (matchedRefIds.length === 0) return { type: \"not_found\" };\n\tif (matchedRefIds.length === 1) return {\n\t\ttype: \"found\",\n\t\trefId: matchedRefIds[0]\n\t};\n\treturn {\n\t\ttype: \"multiple\",\n\t\trefIds: matchedRefIds\n\t};\n};\n/**\n* InteractableText用: snapshotでref変換しながらチェックするcheckFunc\n*\n* @param interactableText - インタラクティブ要素のテキストセレクタ\n* @param context - 実行コンテキスト\n* @returns CheckResult<RefSelector>を返すcheckFunc\n*/\nconst createTextToRefCheckFunc = (interactableText, context) => () => browserSnapshot(context.executeOptions).map((snapshotOutput) => {\n\treturn match(findMatchingRefId(interactableText, snapshotOutput.refs)).with({ type: \"found\" }, (r) => {\n\t\treturn asRefSelector(`@${r.refId}`).match((ref) => ({\n\t\t\ttype: \"found\",\n\t\t\tvalue: ref\n\t\t}), (error) => ({\n\t\t\ttype: \"error\",\n\t\t\terror: {\n\t\t\t\ttype: \"brand_validation_error\",\n\t\t\t\tmessage: error.message,\n\t\t\t\tfield: error.field,\n\t\t\t\tvalue: error.value\n\t\t\t}\n\t\t}));\n\t}).with({ type: \"multiple\" }, (r) => ({\n\t\ttype: \"error\",\n\t\terror: {\n\t\t\ttype: \"command_execution_failed\",\n\t\t\tmessage: `Selector \"${interactableText}\" matched ${r.refIds.length} elements. Use a more specific selector.`,\n\t\t\tcommand: \"waitForText\",\n\t\t\trawError: `Multiple matches: ${r.refIds.join(\", \")}`\n\t\t}\n\t})).with({ type: \"not_found\" }, () => ({ type: \"not_found\" })).exhaustive();\n});\n/**\n* CSSセレクタの要素が表示されるまで待機する\n*\n* @param css - CSSセレクタ\n* @param context - 実行コンテキスト\n* @returns 成功時: true、失敗時: AgentBrowserError\n*/\nconst waitForCssSelector = (css, context) => {\n\treturn waitUntil(createVisibilityCheckFunc(css, context), context, {\n\t\tselectorForError: css,\n\t\tcommandName: \"waitForCssSelector\"\n\t});\n};\n/**\n* XPathセレクタの要素が表示されるまで待機する\n*\n* @param xpath - XPathセレクタ\n* @param context - 実行コンテキスト\n* @returns 成功時: true、失敗時: AgentBrowserError\n*/\nconst waitForXpathSelector = (xpath, context) => {\n\tconst cliXpathResult = asCliXpathSelector(`xpath=${xpath}`);\n\tif (cliXpathResult.isErr()) return okAsync(true);\n\treturn waitUntil(createVisibilityCheckFunc(cliXpathResult.value, context), context, {\n\t\tselectorForError: xpath,\n\t\tcommandName: \"waitForXpathSelector\"\n\t});\n};\n/**\n* インタラクティブ要素のテキストセレクタが表示されるまで待機し、RefSelectorに変換する\n*\n* @param interactableText - インタラクティブ要素のテキストセレクタ\n* @param context - 実行コンテキスト\n* @returns 成功時: RefSelector、失敗時: AgentBrowserError\n*/\nconst waitForTextAndResolveRef = (interactableText, context) => {\n\treturn waitUntil(createTextToRefCheckFunc(interactableText, context), context, {\n\t\tselectorForError: interactableText,\n\t\tcommandName: \"waitForText\"\n\t});\n};\n/**\n* セレクタ種別に応じて待機し、実行可能なセレクタを返す\n*\n* @param spec - セレクタ指定\n* @param context - 実行コンテキスト\n* @returns 成功時: WaitResult、失敗時: AgentBrowserError\n*/\nconst waitForSelector = (spec, context) => match(spec).with({ css: P.string }, (s) => waitForCssSelector(s.css, context).map(() => ({\n\ttype: \"css\",\n\tselector: s.css\n}))).with({ xpath: P.string }, (s) => waitForXpathSelector(s.xpath, context).map(() => ({\n\ttype: \"xpath\",\n\tselector: s.xpath\n}))).with({ interactableText: P.string }, (s) => waitForTextAndResolveRef(s.interactableText, context).map((ref) => ({\n\ttype: \"ref\",\n\tselector: ref\n}))).exhaustive();\n\n//#endregion\n//#region src/executor/execute-step.ts\n/**\n* AgentBrowserErrorからメッセージを取得する\n*\n* timeout型にはmessageフィールドがないため、型に応じてメッセージを生成する。\n*\n* @param error - AgentBrowserError\n* @returns エラーメッセージ\n*/\nconst getAgentBrowserErrorMessage = (error) => {\n\tif (error.type === \"timeout\") return `Timeout after ${error.timeoutMs}ms: ${error.command}`;\n\treturn error.message;\n};\n/**\n* エラー時のスクリーンショットを撮影し、ScreenshotResult型で返す\n*\n* @param context - 実行コンテキスト\n* @param captureScreenshot - スクリーンショット撮影が有効かどうか\n* @returns スクリーンショット撮影結果\n*/\nconst takeErrorScreenshot = async (context, captureScreenshot) => {\n\tif (!captureScreenshot) return { status: \"disabled\" };\n\treturn captureErrorScreenshot(context).match((path$1) => ({\n\t\tstatus: \"captured\",\n\t\tpath: path$1\n\t}), (error) => ({\n\t\tstatus: \"failed\",\n\t\treason: getAgentBrowserErrorMessage(error)\n\t}));\n};\n/**\n* メッセージフィールドを持つエラーかどうかを判定する\n*\n* @param error - ExecutorError\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 === \"command_execution_failed\" || error.type === \"agent_browser_output_parse_error\" || error.type === \"brand_validation_error\";\n};\n/**\n* アサーションエラーのフォールバックメッセージを生成する\n*\n* @param error - アサーションエラー\n* @returns フォールバックメッセージ\n*/\nconst getAssertionFallback = (error) => {\n\treturn error.message || `Assertion failed for command: ${error.command}`;\n};\n/**\n* コマンド失敗エラーのフォールバックメッセージを生成する\n*\n* @param error - コマンド失敗エラー\n* @returns フォールバックメッセージ\n*/\nconst getCommandErrorFallback = (error) => {\n\treturn error.rawError || error.stderr || `Command failed: ${error.command}`;\n};\n/**\n* コマンド実行エラーのフォールバックメッセージを生成する\n*\n* ts-patternで型安全にエラーをルーティングし、メッセージを生成する。\n*\n* @param error - コマンド実行エラー\n* @returns フォールバックメッセージ\n*/\nconst getCommandFailedFallback = (error) => match(error).with({ type: \"assertion_failed\" }, getAssertionFallback).with({ type: \"command_failed\" }, getCommandErrorFallback).with({ message: P.string }, (e) => e.message || \"Unknown error\").otherwise(() => \"Unknown error\");\n/**\n* ExecutorErrorからメッセージを取得する\n*\n* エラーの種類によってメッセージの形式が異なるため、\n* 統一的なメッセージを生成する。\n* messageフィールドが空文字列の場合は、rawErrorまたはstderrから\n* フォールバックメッセージを生成する。\n*\n* @param error - ExecutorError\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\") return getCommandFailedFallback(error);\n\t\treturn error.message;\n\t}\n\treturn `Timeout after ${error.timeoutMs}ms: ${error.command}`;\n};\n/**\n* WaitResultからResolvedSelectorSpecへの型安全な変換\n*\n* @param result - セレクタ待機の結果\n* @returns ResolvedSelectorSpec\n*/\nconst waitResultToResolvedSelectorSpec = (result) => match(result).with({ type: \"css\" }, (r) => ({ css: r.selector })).with({ type: \"xpath\" }, (r) => ({ xpath: r.selector })).with({ type: \"ref\" }, (r) => ({ ref: r.selector })).exhaustive();\n/**\n* SelectorSpecからResolvedSelectorSpecへの直接変換を試みる\n*\n* css/xpathセレクタはそのまま変換可能。\n* textセレクタは通常待機が必要だが、assertVisible/assertNotVisibleでは\n* textのまま保持して直接browserWaitForTextで確認するため、\n* allowTextオプションで制御する。\n*\n* @param spec - セレクタ指定\n* @param allowText - textセレクタを直接解決するか(assertVisible/assertNotVisible用)\n* @returns 変換結果\n*/\nconst tryDirectResolve = (spec, allowText) => match(spec).with({ css: P.string }, (s) => ({\n\ttype: \"resolved\",\n\tspec: { css: s.css }\n})).with({ xpath: P.string }, (s) => ({\n\ttype: \"resolved\",\n\tspec: { xpath: s.xpath }\n})).with({ interactableText: P.string }, (s) => allowText ? {\n\ttype: \"resolved\",\n\tspec: { interactableText: s.interactableText }\n} : { type: \"needs_wait\" }).with({ anyText: P.string }, (s) => allowText ? {\n\ttype: \"resolved\",\n\tspec: { anyText: s.anyText }\n} : { type: \"needs_wait\" }).exhaustive();\n/**\n* セレクタ待機が必要なコマンドを処理する\n*\n* セレクタの可視性を待機し、ResolvedCommandに変換する。\n*\n* @param command - セレクタを持つコマンド\n* @param spec - 抽出済みWaitableSelectorSpec(interactableTextのみ)\n* @param context - 実行コンテキスト\n* @returns 成功時: ResolvedCommand、失敗時: SelectorWaitFailure\n*/\nconst processWaitableSelector = (command, spec, context, resolveFunc) => waitForSelector(spec, context).map(waitResultToResolvedSelectorSpec).map((resolved) => resolveFunc(command, resolved)).mapErr((error) => ({\n\t_tag: \"SelectorWaitFailure\",\n\tmessage: `Selector wait timeout: ${getErrorMessage(error)}`,\n\terrorType: error.type\n}));\n/**\n* SelectorSpecからWaitableSelectorSpecへの変換\n*\n* anyTextが含まれている場合はエラー(待機が必要なコマンドはinteractableTextのみ)\n*/\nconst toWaitableSelectorSpec = (spec) => match(spec).with({ css: P.string }, (s) => okAsync({ css: s.css })).with({ interactableText: P.string }, (s) => okAsync({ interactableText: s.interactableText })).with({ xpath: P.string }, (s) => okAsync({ xpath: s.xpath })).with({ anyText: P.string }, () => errAsync({\n\t_tag: \"SelectorWaitFailure\",\n\tmessage: \"anyText selector requires waiting, but should be resolved directly\",\n\terrorType: \"parse_error\"\n})).exhaustive();\n/**\n* セレクタ待機不要なコマンドを直接解決する\n*\n* css/xpathセレクタはそのまま変換。textセレクタはallowTextに応じて処理。\n*\n* @param command - セレクタを持つコマンド\n* @param spec - 抽出済みSelectorSpec\n* @param allowText - textセレクタを直接解決するか\n* @param context - 実行コンテキスト(待機が必要な場合に使用)\n* @returns 成功時: ResolvedCommand、失敗時: SelectorWaitFailure\n*/\nconst processDirectOrWaitSelector = (command, spec, allowText, context, resolveFunc) => match(tryDirectResolve(spec, allowText)).with({ type: \"resolved\" }, ({ spec: resolved }) => okAsync(resolveFunc(command, resolved))).with({ type: \"needs_wait\" }, () => toWaitableSelectorSpec(spec).andThen((waitableSpec) => processWaitableSelector(command, waitableSpec, context, resolveFunc))).exhaustive();\n/**\n* ClickCommandのResolvedCommand変換関数\n*/\nconst resolveClick = (_cmd, resolved) => ({\n\tcommand: \"click\",\n\t...resolved\n});\n/**\n* TypeCommandのResolvedCommand変換関数\n*/\nconst resolveType = (cmd, resolved) => ({\n\tcommand: \"type\",\n\tvalue: cmd.value,\n\t...resolved\n});\n/**\n* FillCommandのResolvedCommand変換関数\n*/\nconst resolveFill = (cmd, resolved) => ({\n\tcommand: \"fill\",\n\tvalue: cmd.value,\n\t...resolved\n});\n/**\n* HoverCommandのResolvedCommand変換関数\n*/\nconst resolveHover = (_cmd, resolved) => ({\n\tcommand: \"hover\",\n\t...resolved\n});\n/**\n* SelectCommandのResolvedCommand変換関数\n*/\nconst resolveSelect = (cmd, resolved) => ({\n\tcommand: \"select\",\n\tvalue: cmd.value,\n\t...resolved\n});\n/**\n* AssertEnabledCommandのResolvedCommand変換関数\n*/\nconst resolveAssertEnabled = (_cmd, resolved) => ({\n\tcommand: \"assertEnabled\",\n\t...resolved\n});\n/**\n* AssertCheckedCommandのResolvedCommand変換関数\n*/\nconst resolveAssertChecked = (cmd, resolved) => ({\n\tcommand: \"assertChecked\",\n\tchecked: cmd.checked,\n\t...resolved\n});\n/**\n* AssertVisibleCommandのResolvedCommand変換関数\n*/\nconst resolveAssertVisible = (_cmd, resolved) => ({\n\tcommand: \"assertVisible\",\n\t...resolved\n});\n/**\n* AssertNotVisibleCommandのResolvedCommand変換関数\n*/\nconst resolveAssertNotVisible = (_cmd, resolved) => ({\n\tcommand: \"assertNotVisible\",\n\t...resolved\n});\n/**\n* ScrollIntoViewCommandのResolvedCommand変換関数\n*/\nconst resolveScrollIntoView = (_cmd, resolved) => ({\n\tcommand: \"scrollIntoView\",\n\t...resolved\n});\n/**\n* SelectorSpecを抽出し、存在しない場合はエラーを返す\n*/\nconst extractSelectorSpecOrFail = (command) => match(extractSelectorSpec(command)).with({ type: \"found\" }, ({ spec }) => okAsync(spec)).with({ type: \"not_found\" }, () => errAsync({\n\t_tag: \"SelectorWaitFailure\",\n\tmessage: \"Selector not found in command\",\n\terrorType: \"parse_error\"\n})).exhaustive();\n/**\n* WaitableSelectorSpec(interactableTextのみ)を抽出し、存在しない場合はエラーを返す\n*\n* インタラクティブ要素のみを対象とするコマンド(click, type, fill, hover, select)用\n*/\nconst extractWaitableSelectorSpecOrFail = (command) => match(extractSelectorSpec(command)).with({\n\ttype: \"found\",\n\tspec: { css: P.string }\n}, ({ spec }) => okAsync({ css: spec.css })).with({\n\ttype: \"found\",\n\tspec: { interactableText: P.string }\n}, ({ spec }) => okAsync({ interactableText: spec.interactableText })).with({\n\ttype: \"found\",\n\tspec: { xpath: P.string }\n}, ({ spec }) => okAsync({ xpath: spec.xpath })).with({\n\ttype: \"found\",\n\tspec: { anyText: P.string }\n}, () => errAsync({\n\t_tag: \"SelectorWaitFailure\",\n\tmessage: \"anyText selector is not supported for interactive commands. Use interactableText instead.\",\n\terrorType: \"parse_error\"\n})).with({ type: \"not_found\" }, () => errAsync({\n\t_tag: \"SelectorWaitFailure\",\n\tmessage: \"Selector not found in command\",\n\terrorType: \"parse_error\"\n})).exhaustive();\n/**\n* セレクタ待機を処理する(純粋なmatch + ResultAsyncチェーン版)\n*\n* コマンドの種類に応じてセレクタ待機を行い、ResolvedCommandを返す。\n* 各コマンドタイプごとに独立したパイプラインを持ち、静的解析で追跡可能。\n*\n* @param command - 実行するコマンド\n* @param context - 実行コンテキスト\n* @returns 成功時: ResolvedCommand、失敗時: SelectorWaitFailure\n*/\nconst processSelectorWait = (command, context) => match(command).with({ command: \"open\" }, (cmd) => okAsync(cmd)).with({ command: \"press\" }, (cmd) => okAsync(cmd)).with({ command: \"scroll\" }, (cmd) => okAsync(cmd)).with({ command: \"wait\" }, (cmd) => okAsync(cmd)).with({ command: \"screenshot\" }, (cmd) => okAsync(cmd)).with({ command: \"eval\" }, (cmd) => okAsync(cmd)).with({ command: \"click\" }, (cmd) => extractWaitableSelectorSpecOrFail(cmd).andThen((spec) => processWaitableSelector(cmd, spec, context, resolveClick))).with({ command: \"type\" }, (cmd) => extractWaitableSelectorSpecOrFail(cmd).andThen((spec) => processWaitableSelector(cmd, spec, context, resolveType))).with({ command: \"fill\" }, (cmd) => extractWaitableSelectorSpecOrFail(cmd).andThen((spec) => processWaitableSelector(cmd, spec, context, resolveFill))).with({ command: \"hover\" }, (cmd) => extractWaitableSelectorSpecOrFail(cmd).andThen((spec) => processWaitableSelector(cmd, spec, context, resolveHover))).with({ command: \"select\" }, (cmd) => extractWaitableSelectorSpecOrFail(cmd).andThen((spec) => processWaitableSelector(cmd, spec, context, resolveSelect))).with({ command: \"assertEnabled\" }, (cmd) => extractWaitableSelectorSpecOrFail(cmd).andThen((spec) => processWaitableSelector(cmd, spec, context, resolveAssertEnabled))).with({ command: \"assertChecked\" }, (cmd) => extractWaitableSelectorSpecOrFail(cmd).andThen((spec) => processWaitableSelector(cmd, spec, context, resolveAssertChecked))).with({ command: \"assertVisible\" }, (cmd) => extractSelectorSpecOrFail(cmd).andThen((spec) => processDirectOrWaitSelector(cmd, spec, true, context, resolveAssertVisible))).with({ command: \"assertNotVisible\" }, (cmd) => extractSelectorSpecOrFail(cmd).andThen((spec) => processDirectOrWaitSelector(cmd, spec, true, context, resolveAssertNotVisible))).with({ command: \"scrollIntoView\" }, (cmd) => extractSelectorSpecOrFail(cmd).andThen((spec) => processDirectOrWaitSelector(cmd, spec, true, context, resolveScrollIntoView))).exhaustive();\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\treturn await processSelectorWait(command, context).andThen((resolvedCommand) => executeResolvedCommand(resolvedCommand, context)).match(async (commandResult) => ({\n\t\tindex,\n\t\tcommand,\n\t\tstatus: \"passed\",\n\t\tduration: Date.now() - startTime,\n\t\tstdout: commandResult.stdout\n\t}), async (error) => {\n\t\tconst screenshot = await takeErrorScreenshot(context, captureScreenshot);\n\t\tconst { errorMessage, errorType } = match(error).with({ _tag: \"SelectorWaitFailure\" }, (e) => ({\n\t\t\terrorMessage: e.message,\n\t\t\terrorType: e.errorType\n\t\t})).otherwise((e) => ({\n\t\t\terrorMessage: getErrorMessage(e),\n\t\t\terrorType: e.type\n\t\t}));\n\t\treturn {\n\t\t\tindex,\n\t\t\tcommand,\n\t\t\tstatus: \"failed\",\n\t\t\tduration: Date.now() - startTime,\n\t\t\terror: {\n\t\t\t\tmessage: errorMessage,\n\t\t\t\ttype: errorType,\n\t\t\t\tscreenshot\n\t\t\t}\n\t\t};\n\t});\n};\n/**\n* コマンドからSelectorSpecを抽出する\n*\n* @param command - セレクタを取得するコマンド\n* @returns SelectorSpec抽出結果\n*/\nconst extractSelectorSpec = (command) => match(command).with({ css: P.string }, (cmd) => ({\n\ttype: \"found\",\n\tspec: { css: cmd.css }\n})).with({ interactableText: P.string }, (cmd) => ({\n\ttype: \"found\",\n\tspec: { interactableText: cmd.interactableText }\n})).with({ anyText: P.string }, (cmd) => ({\n\ttype: \"found\",\n\tspec: { anyText: cmd.anyText }\n})).with({ xpath: P.string }, (cmd) => ({\n\ttype: \"found\",\n\tspec: { xpath: cmd.xpath }\n})).otherwise(() => ({ type: \"not_found\" }));\n\n//#endregion\n//#region src/executor/result.ts\n/**\n* コールバックなし定数\n*\n* onStepProgressが不要な場合に使用する。\n* 型と値を同時に定義することで、as による型アサーションを回避する。\n*/\nconst NO_CALLBACK = { _brand: \"NoCallback\" };\n/**\n* StepResultが失敗したステップかどうかを判定する型ガード関数\n*\n* @param result - 判定対象のStepResult\n* @returns 失敗したステップの場合はtrue、成功したステップの場合はfalse\n*\n* @example\n* ```typescript\n* if (isFailedStepResult(stepResult)) {\n* // stepResult.errorは必ず存在する\n* console.log(stepResult.error.message);\n* }\n* ```\n*/\nconst isFailedStepResult = (result) => {\n\treturn result.status === \"failed\";\n};\n\n//#endregion\n//#region src/executor/flow-executor.ts\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* NoCallbackかどうかを判定する型ガード関数\n*\n* @param callback - 判定対象のコールバック\n* @returns NoCallbackの場合はfalse、StepProgressCallbackの場合はtrue\n*/\nconst isStepProgressCallback = (callback) => {\n\treturn typeof callback === \"function\";\n};\n/**\n* 失敗したフロー結果を構築する\n*\n* @param expandedFlow - 環境変数が展開されたフロー定義\n* @param sessionName - セッション名\n* @param duration - 全体の実行時間(ミリ秒)\n* @param steps - 実行済みのステップ結果の配列\n* @param firstFailureStep - 最初に失敗したステップの結果(必ずfailedステータス)\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 duration - 全体の実行時間(ミリ秒)\n* @param steps - 実行済みのステップ結果の配列\n* @returns 成功したフロー結果\n*/\nconst buildSuccessFlowResult = (expandedFlow, duration, steps) => {\n\treturn {\n\t\tflow: expandedFlow,\n\t\tstatus: \"passed\",\n\t\tduration,\n\t\tsteps\n\t};\n};\n/**\n* ユニークなセッション名を生成する\n*\n* 並列実行時の衝突を防ぐため、タイムスタンプとランダム値を組み合わせる。\n* Unixドメインソケットのパス長制限(約108バイト)を考慮し、セッション名は短くする。\n*\n* @param prefix - セッション名のプレフィックス(デフォルト: 'enbu')\n* @returns ユニークなセッション名({prefix}-timestamp-random 形式)\n*/\nconst generateSessionName = (prefix = \"enbu\") => {\n\treturn `${prefix}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`;\n};\n/**\n* SessionSpec からセッション名を解決する\n*\n* @param spec - セッション指定\n* @returns セッション名\n*/\nconst resolveSessionName = (spec) => {\n\tswitch (spec.type) {\n\t\tcase \"name\": return spec.value;\n\t\tcase \"prefix\": return generateSessionName(spec.value);\n\t\tcase \"default\": return generateSessionName(\"enbu\");\n\t}\n};\n/**\n* 実行コンテキストを構築する\n*\n* @param options - フロー実行オプション\n* @param flow - フロー定義(flow.envを使用)\n* @returns 実行コンテキスト\n*/\nconst buildExecutionContext = (options, flow) => {\n\tconst sessionName = resolveSessionName(options.session);\n\tconst mergedEnv = {\n\t\t...flow.env,\n\t\t...options.env\n\t};\n\treturn {\n\t\tsessionName,\n\t\texecuteOptions: {\n\t\t\tsessionName,\n\t\t\theaded: options.headed,\n\t\t\ttimeoutMs: options.commandTimeoutMs,\n\t\t\tcwd: options.cwd\n\t\t},\n\t\tenv: mergedEnv,\n\t\tautoWaitTimeoutMs: options.autoWaitTimeoutMs,\n\t\tautoWaitIntervalMs: options.autoWaitIntervalMs\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 タグ付きユニオンによる実行結果(earlyExit または completed)\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 (isStepProgressCallback(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 (isStepProgressCallback(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\tkind: \"earlyExit\",\n\t\t\t\t\tresult: ok(buildFailedFlowResult(expandedFlow, context.sessionName, duration, steps, stepResult, i)),\n\t\t\t\t\tsteps,\n\t\t\t\t\thasFailure: true,\n\t\t\t\t\tfirstFailureIndex\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tkind: \"completed\",\n\t\tsteps,\n\t\thasFailure,\n\t\tfirstFailureIndex\n\t};\n};\n/**\n* フローを実行する\n*\n* フロー実行の処理フローは以下の通り:\n* 1. オプションのデフォルト値を設定\n* 2. 実行コンテキストを構築\n* 3. 各ステップを順次実行\n* 4. エラー発生時の処理:\n* - `bail: true`(デフォルト): 最初の失敗で即座に停止\n* - `bail: false`: 失敗ステップをスキップして続行\n* 5. スクリーンショット撮影:\n* - `screenshot: true`(デフォルト): 失敗時にスクリーンショットを撮影\n* - `screenshot: false`: スクリーンショットを撮影しない\n* 6. 実行結果を集約して返す\n*\n* @param flow - 実行するフロー定義(環境変数は解決済みである前提)\n* @param options - 実行時のオプション(セッション名、タイムアウトなど)\n* @returns フロー実行結果(成功時)、またはエラー(失敗時)\n*\n* @remarks\n* ## 前提条件\n* - 環境変数の展開はParser層(env-resolver)で既に完了している前提\n* - flowに含まれる${VAR}形式の変数は全て解決済み\n*\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*/\nconst executeFlow = (flow, options) => {\n\tconst context = buildExecutionContext(options, flow);\n\tconst bail = options.bail;\n\tconst screenshot = options.screenshot;\n\tconst startTime = Date.now();\n\treturn ResultAsync.fromPromise(executeAllSteps(flow, context, screenshot, bail, startTime, options.onStepProgress), (error) => ({\n\t\ttype: \"command_execution_failed\",\n\t\tmessage: \"executeFlow internal error\",\n\t\tcommand: \"executeFlow\",\n\t\trawError: String(error)\n\t})).andThen((result) => {\n\t\tif (result.kind === \"earlyExit\") return result.result.match((value) => okAsync(value), (error) => errAsync(error));\n\t\tconst { steps, hasFailure, firstFailureIndex } = result;\n\t\tconst duration = Date.now() - startTime;\n\t\tif (hasFailure) {\n\t\t\tconst firstFailureStep = steps[firstFailureIndex];\n\t\t\tif (!isFailedStepResult(firstFailureStep)) return errAsync({\n\t\t\t\ttype: \"command_execution_failed\",\n\t\t\t\tmessage: \"Internal error: firstFailureStep must have failed status\",\n\t\t\t\tcommand: \"executeFlow\",\n\t\t\t\trawError: \"hasFailure is true but step status is not failed\"\n\t\t\t});\n\t\t\treturn okAsync(buildFailedFlowResult(flow, context.sessionName, duration, steps, firstFailureStep, firstFailureIndex));\n\t\t}\n\t\treturn browserClose(context.sessionName).map(() => buildSuccessFlowResult(flow, duration, steps)).mapErr((error) => {\n\t\t\tif (error.type !== \"command_execution_failed\") return error;\n\t\t\treturn {\n\t\t\t\ttype: \"command_execution_failed\",\n\t\t\t\tmessage: \"Failed to close browser session\",\n\t\t\t\tcommand: \"browserClose\",\n\t\t\t\trawError: String(error)\n\t\t\t};\n\t\t});\n\t});\n};\n\n//#endregion\n//#region src/orchestrator/run-flows.ts\n/**\n* フロー実行パイプラインのメイン実装\n*\n* ファイル検出、読み込み、パース、実行を統合し、\n* 単一のエントリーポイント runFlows を提供する。\n*\n* @remarks\n* このモジュールはアプリケーション層への境界として機能するため、\n* undefinedの使用が許容される(optional引数の処理のため)。\n* eslint.config.mjsで除外設定済み。\n*/\n/**\n* ScreenshotResultからパスを取得する\n*\n* スクリーンショットが撮影成功した場合はパスを返し、\n* それ以外(失敗・無効)の場合はundefinedを返す。\n*\n* @param result - スクリーンショット撮影結果\n* @returns 撮影成功時はパス、それ以外はundefined\n*/\nconst getScreenshotPath = (result) => {\n\treturn result.status === \"captured\" ? result.path : void 0;\n};\n/**\n* デフォルトの実行オプション\n*/\nconst DEFAULT_OPTIONS = {\n\theaded: false,\n\tenv: {},\n\tcommandTimeoutMs: 3e4,\n\tautoWaitTimeoutMs: 3e4,\n\tautoWaitIntervalMs: 100,\n\tscreenshot: true,\n\tbail: true,\n\tparallel: 1\n};\n/**\n* ファイルパスまたはglobパターンからフローファイルを検出する\n*\n* @param files - ファイルパスまたはglobパターンの配列(空の場合は.enbuflow/*.enbu.yamlを検索)\n* @param cwd - 作業ディレクトリ\n* @returns 成功時: 解決されたファイルパスの配列、失敗時: OrchestratorError\n*/\nconst discoverFlowFiles = (files, cwd) => {\n\tif (files.length > 0) return okAsync(files.map((f) => resolve(cwd, f)));\n\tconst pattern = join(cwd, \".enbuflow\", \"*.enbu.yaml\");\n\treturn ResultAsync.fromPromise(glob(pattern), (error) => ({\n\t\ttype: \"no_flows_found\",\n\t\tmessage: `Failed to search for flow files: ${error instanceof Error ? error.message : String(error)}`\n\t}));\n};\n/**\n* 単一のフローファイルを読み込んでパースする\n*\n* @param filePath - フローファイルのパス\n* @param processEnv - プロセス環境変数\n* @param inputEnv - ユーザー指定の環境変数\n* @returns 成功時: Flowオブジェクト、失敗時: OrchestratorError\n*/\nconst loadSingleFlow = (filePath, processEnv, inputEnv) => {\n\tconst fileName = basename(filePath);\n\treturn ResultAsync.fromPromise(readFile(filePath, \"utf-8\"), (error) => ({\n\t\ttype: \"load_error\",\n\t\tmessage: `Failed to read file: ${error instanceof Error ? error.message : String(error)}`,\n\t\tfilePath\n\t})).andThen((yamlContent) => parseFlowYaml(yamlContent, fileName, processEnv, inputEnv).mapErr((error) => ({\n\t\ttype: \"load_error\",\n\t\tmessage: formatParseErrorMessage(error),\n\t\tfilePath\n\t})));\n};\n/**\n* ParseErrorからユーザー向けエラーメッセージを生成する\n*\n* エラータイプに応じて適切なプレフィックスを付与する。\n*/\nconst formatParseErrorMessage = (error) => {\n\tswitch (error.type) {\n\t\tcase \"yaml_syntax_error\":\n\t\tcase \"invalid_flow_structure\":\n\t\tcase \"invalid_command\": return `Failed to parse YAML: ${error.message}`;\n\t\tcase \"undefined_variable\": return `Failed to resolve environment variable: ${error.message}`;\n\t\tcase \"file_read_error\": return `Failed to read file: ${error.message}`;\n\t}\n};\n/**\n* 全てのフローファイルを読み込む\n*\n* @param flowFiles - フローファイルパスの配列\n* @param processEnv - プロセス環境変数\n* @param inputEnv - ユーザー指定の環境変数\n* @returns 成功時: Flowオブジェクトの配列、失敗時: OrchestratorError\n*/\nconst loadAllFlows = (flowFiles, processEnv, inputEnv) => {\n\tconst loadResults = flowFiles.map((filePath) => loadSingleFlow(filePath, processEnv, inputEnv));\n\treturn ResultAsync.combine(loadResults);\n};\n/**\n* FlowExecutionOptionsを構築する\n*\n* @param input - 実行オプション\n* @param cwd - 作業ディレクトリ\n* @returns FlowExecutionOptions\n*/\nconst buildFlowExecutionOptions = (input, cwd) => {\n\treturn {\n\t\tsession: input.sessionName !== void 0 ? {\n\t\t\ttype: \"name\",\n\t\t\tvalue: input.sessionName\n\t\t} : { type: \"default\" },\n\t\theaded: input.headed ?? DEFAULT_OPTIONS.headed,\n\t\tenv: input.env ?? DEFAULT_OPTIONS.env,\n\t\tcommandTimeoutMs: input.commandTimeoutMs ?? DEFAULT_OPTIONS.commandTimeoutMs,\n\t\tautoWaitTimeoutMs: input.autoWaitTimeoutMs ?? DEFAULT_OPTIONS.autoWaitTimeoutMs,\n\t\tautoWaitIntervalMs: input.autoWaitIntervalMs ?? DEFAULT_OPTIONS.autoWaitIntervalMs,\n\t\tcwd,\n\t\tscreenshot: input.screenshot ?? DEFAULT_OPTIONS.screenshot,\n\t\tbail: input.bail ?? DEFAULT_OPTIONS.bail,\n\t\tonStepProgress: input.onStepProgress ?? NO_CALLBACK\n\t};\n};\n/**\n* フロー進捗を通知する\n*\n* @param input - 実行オプション\n* @param flowName - フロー名\n* @param status - ステータス\n* @param duration - 実行時間\n* @param stepTotal - ステップ総数(開始時のみ)\n*/\nconst notifyFlowProgress = async (input, flowName, status, duration, stepTotal) => {\n\tif (!input.onFlowProgress) return;\n\tif (status === \"start\") await input.onFlowProgress({\n\t\ttype: \"flow:start\",\n\t\tflowName,\n\t\tstepTotal: stepTotal ?? 0\n\t});\n\telse await input.onFlowProgress({\n\t\ttype: \"flow:complete\",\n\t\tflowName,\n\t\tstatus,\n\t\tduration\n\t});\n};\n/**\n* 単一フローを実行する\n*\n* @param flow - 実行するフロー\n* @param input - 実行オプション\n* @returns フロー実行結果のサマリー\n*/\nconst executeSingleFlow = async (flow, input) => {\n\tconst startTime = Date.now();\n\tawait notifyFlowProgress(input, flow.name, \"start\", 0, flow.steps.length);\n\treturn (await executeFlow(flow, buildFlowExecutionOptions(input, input.cwd))).match(async (flowResult) => {\n\t\tconst duration = Date.now() - startTime;\n\t\tconst status = flowResult.status;\n\t\tawait notifyFlowProgress(input, flow.name, status, duration, void 0);\n\t\tconst summary = {\n\t\t\tflowName: flow.name,\n\t\t\tstatus,\n\t\t\tduration,\n\t\t\tsteps: flowResult.steps\n\t\t};\n\t\tif (status === \"failed\" && flowResult.error) summary.error = {\n\t\t\tstepIndex: flowResult.error.stepIndex,\n\t\t\tmessage: flowResult.error.message,\n\t\t\tscreenshot: getScreenshotPath(flowResult.error.screenshot)\n\t\t};\n\t\treturn summary;\n\t}, async (error) => {\n\t\tconst duration = Date.now() - startTime;\n\t\tawait notifyFlowProgress(input, flow.name, \"failed\", duration, void 0);\n\t\treturn {\n\t\t\tflowName: flow.name,\n\t\t\tstatus: \"failed\",\n\t\t\tduration,\n\t\t\tsteps: [],\n\t\t\terror: {\n\t\t\t\tstepIndex: 0,\n\t\t\t\tmessage: `Execution error: ${error.type}`\n\t\t\t}\n\t\t};\n\t});\n};\n/**\n* 全てのフローを並列実行する\n*\n* @param flows - 実行するフロー配列\n* @param input - 実行オプション\n* @param startTime - 実行開始時刻\n* @returns フロー実行結果のサマリー配列\n*/\nconst executeAllFlowsParallel = async (flows, input, startTime) => {\n\tconst limit = pLimit(input.parallel ?? DEFAULT_OPTIONS.parallel);\n\tconst summaries = await Promise.all(flows.map((flow) => limit(() => executeSingleFlow(flow, input))));\n\tconst passed = summaries.filter((s) => s.status === \"passed\").length;\n\tconst failed = summaries.filter((s) => s.status === \"failed\").length;\n\tconst duration = Date.now() - startTime;\n\treturn {\n\t\tpassed,\n\t\tfailed,\n\t\ttotal: flows.length,\n\t\tduration,\n\t\tflows: summaries\n\t};\n};\n/**\n* 全てのフローを順次実行する\n*\n* @param flows - 実行するフロー配列\n* @param input - 実行オプション\n* @param startTime - 実行開始時刻\n* @returns フロー実行結果のサマリー配列\n*/\nconst executeAllFlowsSequential = async (flows, input, startTime) => {\n\tconst summaries = [];\n\tfor (const flow of flows) {\n\t\tconst summary = await executeSingleFlow(flow, input);\n\t\tsummaries.push(summary);\n\t}\n\tconst passed = summaries.filter((s) => s.status === \"passed\").length;\n\tconst failed = summaries.filter((s) => s.status === \"failed\").length;\n\tconst duration = Date.now() - startTime;\n\treturn {\n\t\tpassed,\n\t\tfailed,\n\t\ttotal: flows.length,\n\t\tduration,\n\t\tflows: summaries\n\t};\n};\n/**\n* 全てのフローを実行する\n*\n* parallelオプションが1より大きい場合は並列実行、それ以外は順次実行。\n*\n* @param flows - 実行するフロー配列\n* @param input - 実行オプション\n* @param startTime - 実行開始時刻\n* @returns フロー実行結果\n*/\nconst executeAllFlows = async (flows, input, startTime) => {\n\tif ((input.parallel ?? DEFAULT_OPTIONS.parallel) > 1) return executeAllFlowsParallel(flows, input, startTime);\n\treturn executeAllFlowsSequential(flows, input, startTime);\n};\n/**\n* フロー実行パイプラインのメインエントリーポイント\n*\n* 以下の処理を順次実行する:\n* 1. フローファイルの検出\n* 2. フローファイルの読み込み・パース\n* 3. フローの実行(順次または並列)\n* 4. 実行結果の集約\n*\n* @param input - 実行オプション\n* @returns 成功時: RunFlowsOutput、失敗時: OrchestratorError\n*/\nconst runFlows = (input) => {\n\tconst startTime = Date.now();\n\treturn discoverFlowFiles(input.files, input.cwd).andThen((flowFiles) => {\n\t\tif (flowFiles.length === 0) return errAsync({\n\t\t\ttype: \"no_flows_found\",\n\t\t\tmessage: \"No flow files found\"\n\t\t});\n\t\treturn okAsync(flowFiles);\n\t}).andThen((flowFiles) => loadAllFlows(flowFiles, process.env, input.env ?? {})).andThen((flows) => ResultAsync.fromPromise(executeAllFlows(flows, input, startTime), (error) => ({\n\t\ttype: \"execution_error\",\n\t\tmessage: `Failed to execute flows: ${error instanceof Error ? error.message : String(error)}`,\n\t\tflowName: \"unknown\"\n\t})));\n};\n\n//#endregion\nexport { getStepLineNumbers, runFlows };\n//# sourceMappingURL=index.mjs.map","/**\n * runコマンドの実装\n *\n * フローファイルを読み込み、agent-browserで実行する。\n * 実行結果を表示し、終了コードを返す。\n */\n\nimport { ResultAsync } from 'neverthrow';\nimport { P, match } from 'ts-pattern';\nimport type { CliError, FlowExecutionResult } from '../types';\nimport type { OutputFormatter } from '../output/formatter';\nimport {\n runFlows,\n type RunFlowsInput,\n type RunFlowsOutput,\n type OrchestratorError,\n type FlowRunSummary,\n type FlowProgressCallback,\n type StepProgress,\n type StepCompletedProgress,\n type Command,\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 session?: string;\n /** verboseモード */\n verbose: boolean;\n /** 進捗をJSON形式で出力するか */\n progressJson: boolean;\n /** 並列実行数(指定しない場合は順次実行) */\n parallel?: number;\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 *\n * ts-patternで各コマンドの型を安全にマッチングし、説明文字列を生成する。\n *\n * @param command - コマンド\n * @returns コマンドの説明文字列\n */\nconst formatCommandDescription = (command: Command): string =>\n match(command)\n .with({ command: 'open', url: P.string }, (cmd) => `open ${cmd.url}`)\n .with({ command: 'click', css: P.string }, (cmd) => `click \"${cmd.css}\"`)\n .with(\n { command: 'click', interactableText: P.string },\n (cmd) => `click text:\"${cmd.interactableText}\"`,\n )\n .with({ command: 'click', xpath: P.string }, (cmd) => `click xpath:\"${cmd.xpath}\"`)\n .with(\n { command: 'type', css: P.string, value: P.string },\n (cmd) => `type \"${cmd.css}\" = \"${cmd.value}\"`,\n )\n .with(\n { command: 'type', interactableText: P.string, value: P.string },\n (cmd) => `type text:\"${cmd.interactableText}\" = \"${cmd.value}\"`,\n )\n .with(\n { command: 'type', xpath: P.string, value: P.string },\n (cmd) => `type xpath:\"${cmd.xpath}\" = \"${cmd.value}\"`,\n )\n .with(\n { command: 'fill', css: P.string, value: P.string },\n (cmd) => `fill \"${cmd.css}\" = \"${cmd.value}\"`,\n )\n .with(\n { command: 'fill', interactableText: P.string, value: P.string },\n (cmd) => `fill text:\"${cmd.interactableText}\" = \"${cmd.value}\"`,\n )\n .with(\n { command: 'fill', xpath: P.string, value: P.string },\n (cmd) => `fill xpath:\"${cmd.xpath}\" = \"${cmd.value}\"`,\n )\n .with({ command: 'press', key: P.string }, (cmd) => `press ${cmd.key}`)\n .with({ command: 'hover', css: P.string }, (cmd) => `hover \"${cmd.css}\"`)\n .with(\n { command: 'hover', interactableText: P.string },\n (cmd) => `hover text:\"${cmd.interactableText}\"`,\n )\n .with({ command: 'hover', xpath: P.string }, (cmd) => `hover xpath:\"${cmd.xpath}\"`)\n .with(\n { command: 'select', css: P.string, value: P.string },\n (cmd) => `select \"${cmd.css}\" = \"${cmd.value}\"`,\n )\n .with(\n { command: 'select', interactableText: P.string, value: P.string },\n (cmd) => `select text:\"${cmd.interactableText}\" = \"${cmd.value}\"`,\n )\n .with(\n { command: 'select', xpath: P.string, value: P.string },\n (cmd) => `select xpath:\"${cmd.xpath}\" = \"${cmd.value}\"`,\n )\n .with(\n { command: 'scroll', direction: P.string, amount: P.number },\n (cmd) => `scroll ${cmd.direction} ${cmd.amount}px`,\n )\n .with({ command: 'scrollIntoView', css: P.string }, (cmd) => `scrollIntoView \"${cmd.css}\"`)\n .with(\n { command: 'scrollIntoView', anyText: P.string },\n (cmd) => `scrollIntoView text:\"${cmd.anyText}\"`,\n )\n .with(\n { command: 'scrollIntoView', xpath: P.string },\n (cmd) => `scrollIntoView xpath:\"${cmd.xpath}\"`,\n )\n .with({ command: 'wait', ms: P.number }, (cmd) => `wait ${cmd.ms}ms`)\n .with({ command: 'wait', css: P.string }, (cmd) => `wait \"${cmd.css}\"`)\n .with({ command: 'wait', anyText: P.string }, (cmd) => `wait text \"${cmd.anyText}\"`)\n .with({ command: 'wait', xpath: P.string }, (cmd) => `wait xpath:\"${cmd.xpath}\"`)\n .with({ command: 'wait', load: P.string }, (cmd) => `wait load ${cmd.load}`)\n .with({ command: 'wait', url: P.string }, (cmd) => `wait url \"${cmd.url}\"`)\n .with({ command: 'wait', fn: P.string }, (cmd) => `wait fn \"${cmd.fn.substring(0, 30)}...\"`)\n .with({ command: 'screenshot', path: P.string }, (cmd) => `screenshot ${cmd.path}`)\n .with(\n { command: 'eval', script: P.string },\n (cmd) => `eval \"${cmd.script.substring(0, 50)}${cmd.script.length > 50 ? '...' : ''}\"`,\n )\n .with({ command: 'assertVisible', css: P.string }, (cmd) => `assertVisible \"${cmd.css}\"`)\n .with(\n { command: 'assertVisible', anyText: P.string },\n (cmd) => `assertVisible text:\"${cmd.anyText}\"`,\n )\n .with(\n { command: 'assertVisible', xpath: P.string },\n (cmd) => `assertVisible xpath:\"${cmd.xpath}\"`,\n )\n .with({ command: 'assertNotVisible', css: P.string }, (cmd) => `assertNotVisible \"${cmd.css}\"`)\n .with(\n { command: 'assertNotVisible', anyText: P.string },\n (cmd) => `assertNotVisible text:\"${cmd.anyText}\"`,\n )\n .with(\n { command: 'assertNotVisible', xpath: P.string },\n (cmd) => `assertNotVisible xpath:\"${cmd.xpath}\"`,\n )\n .with({ command: 'assertEnabled', css: P.string }, (cmd) => `assertEnabled \"${cmd.css}\"`)\n .with(\n { command: 'assertEnabled', interactableText: P.string },\n (cmd) => `assertEnabled text:\"${cmd.interactableText}\"`,\n )\n .with(\n { command: 'assertEnabled', xpath: P.string },\n (cmd) => `assertEnabled xpath:\"${cmd.xpath}\"`,\n )\n .with({ command: 'assertChecked', css: P.string }, (cmd) => `assertChecked \"${cmd.css}\"`)\n .with(\n { command: 'assertChecked', interactableText: P.string },\n (cmd) => `assertChecked text:\"${cmd.interactableText}\"`,\n )\n .with(\n { command: 'assertChecked', xpath: P.string },\n (cmd) => `assertChecked xpath:\"${cmd.xpath}\"`,\n )\n .exhaustive();\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 - ステップ完了進捗情報(stepResultが必ず存在する)\n */\nconst outputStepCompleteJson = (progress: StepCompletedProgress): void => {\n const stepResult = progress.stepResult;\n const errorMessage = stepResult.status === 'failed' ? stepResult.error.message : undefined;\n\n outputProgressJson({\n type: 'step:complete',\n stepIndex: progress.stepIndex,\n stepTotal: progress.stepTotal,\n status: stepResult.status,\n duration: stepResult.duration,\n error: errorMessage,\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 * フロー進捗コールバックを生成する(progressJsonモード用)\n *\n * @param progressJson - JSON進捗出力を有効にするか\n * @returns フロー進捗コールバック(progressJson=falseの場合はundefined)\n */\nconst createFlowProgressCallback = (progressJson: boolean): FlowProgressCallback | undefined => {\n if (!progressJson) {\n return undefined;\n }\n\n return (\n progress:\n | { type: 'flow:start'; flowName: string; stepTotal: number }\n | { type: 'flow:complete'; flowName: string; status: 'passed' | 'failed'; duration: number },\n ): void => {\n outputProgressJson(progress);\n };\n};\n\n/**\n * 各ステップの結果を表示する(verboseモードのみ)\n *\n * @param steps - ステップ実行結果の配列\n * @param formatter - 出力フォーマッター\n */\nconst displayStepResults = (steps: FlowRunSummary['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.status === 'failed') {\n formatter.indent(`Error: ${step.error.message}`, 3);\n }\n }\n};\n\n/**\n * フロー実行結果を表示する\n *\n * @param summary - フロー実行サマリー\n * @param formatter - 出力フォーマッター\n * @param verbose - verboseモードフラグ\n */\nconst displayFlowResult = (\n summary: FlowRunSummary,\n formatter: OutputFormatter,\n verbose: boolean,\n): void => {\n formatter.newline();\n\n if (summary.status === 'passed') {\n formatter.success(`PASSED: ${summary.flowName}.enbu.yaml`, summary.duration);\n } else {\n formatter.failure(`FAILED: ${summary.flowName}.enbu.yaml`, summary.duration);\n if (summary.error) {\n formatter.indent(`Step ${summary.error.stepIndex + 1} failed: ${summary.error.message}`, 1);\n if (summary.error.screenshot) {\n formatter.indent(`Screenshot: ${summary.error.screenshot}`, 1);\n }\n }\n }\n\n // 各ステップの結果を表示(verboseモードのみ)\n if (verbose) {\n displayStepResults(summary.steps, formatter);\n }\n\n formatter.newline();\n};\n\n/**\n * OrchestratorErrorをCliErrorに変換する\n *\n * @param error - OrchestratorError\n * @returns CliError\n */\nconst toCliError = (error: OrchestratorError): CliError => {\n return {\n type: 'execution_error' as const,\n message: error.message,\n };\n};\n\n/**\n * RunFlowsOutputの結果を表示する\n *\n * @param output - runFlowsの実行結果\n * @param formatter - 出力フォーマッター\n * @param verbose - verboseモードフラグ\n */\nconst displayResults = (\n output: RunFlowsOutput,\n formatter: OutputFormatter,\n verbose: boolean,\n): void => {\n // 各フローの結果を表示\n for (const flowSummary of output.flows) {\n displayFlowResult(flowSummary, formatter, verbose);\n }\n\n // サマリー表示\n formatter.separator();\n formatter.info(\n `Summary: ${output.passed}/${output.total} flows passed (${(output.duration / 1000).toFixed(1)}s)`,\n );\n\n if (output.failed > 0) {\n formatter.newline();\n formatter.error('Exit code: 1');\n }\n};\n\n/**\n * runコマンドを実行する\n *\n * @param args - runコマンドの引数\n * @param formatter - 出力フォーマッター\n * @returns 成功時: 実行結果、失敗時: CliError\n */\nexport const runFlowCommand = (\n args: RunCommandArgs,\n formatter: OutputFormatter,\n): ResultAsync<FlowExecutionResult, CliError> => {\n formatter.debug(`Args: ${JSON.stringify(args)}`);\n\n const input: RunFlowsInput = {\n files: args.files,\n cwd: process.cwd(),\n sessionName: args.session,\n // CLI からは sessionPrefix を指定しない(デフォルトの 'enbu' を使用)\n headed: args.headed,\n env: args.env,\n commandTimeoutMs: args.timeout,\n screenshot: args.screenshot,\n parallel: args.parallel,\n onStepProgress: createStepProgressCallback(args.progressJson),\n onFlowProgress: createFlowProgressCallback(args.progressJson),\n };\n\n return runFlows(input)\n .map((output) => {\n displayResults(output, formatter, args.verbose);\n return { passed: output.passed, failed: output.failed, total: output.total };\n })\n .mapErr((error) => toCliError(error));\n};\n","/**\n * cleanupコマンドの実装\n *\n * enbu-* プレフィックスを持つagent-browserセッションを一括クリーンアップする。\n * 他のプロジェクトのセッション(enbu-以外のプレフィックス)は残す。\n */\n\nimport { type Result, ResultAsync, ok, err, okAsync, fromThrowable } from 'neverthrow';\nimport { spawn } from 'node:child_process';\nimport type { CliError } from '../types';\nimport { OutputFormatter } from '../output/formatter';\n\n/**\n * cleanupコマンドの引数\n */\ntype CleanupCommandArgs = {\n /** verboseモード */\n verbose: boolean;\n};\n\n/**\n * セッションのクリーンアップ結果\n */\ntype CleanupResult = {\n /** 成功したセッション数 */\n succeeded: number;\n /** 失敗したセッション数 */\n failed: number;\n /** クリーンアップ対象のセッション総数 */\n total: number;\n};\n\n/**\n * agent-browser session list --json の出力型\n */\ntype SessionListResponse = {\n success: boolean;\n data: {\n sessions: string[];\n };\n};\n\n/**\n * コマンドを実行して標準出力を取得する\n *\n * @param command - 実行するコマンド\n * @param args - コマンドの引数\n * @returns 標準出力の文字列\n */\nconst execCommand = (command: string, args: string[]): ResultAsync<string, CliError> => {\n return ResultAsync.fromSafePromise(\n new Promise<Result<string, CliError>>((resolve) => {\n const proc = spawn(command, args, {\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n });\n\n let stdout = '';\n let stderr = '';\n\n proc.stdout.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n proc.stderr.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n proc.on('close', (code) => {\n if (code === 0) {\n resolve(ok(stdout));\n } else {\n resolve(\n err({\n type: 'execution_error' as const,\n message: `Command failed with code ${code}: ${stderr}`,\n }),\n );\n }\n });\n\n proc.on('error', (error) => {\n resolve(\n err({\n type: 'execution_error' as const,\n message: `Failed to spawn command: ${error.message}`,\n }),\n );\n });\n }),\n ).andThen((result) => result);\n};\n\n/**\n * JSONパースエラーをCliErrorに変換する\n */\nconst toParseError = (error: unknown): CliError => ({\n type: 'execution_error',\n message: `Failed to parse session list JSON: ${error}`,\n});\n\n/**\n * JSON文字列をSessionListResponseとしてパースする\n */\nconst parseSessionListJson = fromThrowable(\n (json: string): SessionListResponse => JSON.parse(json),\n toParseError,\n);\n\n/**\n * SessionListResponseからセッション配列を抽出する\n */\nconst extractSessions = (response: SessionListResponse): Result<string[], CliError> => {\n if (!response.success) {\n const error: CliError = {\n type: 'execution_error',\n message: 'agent-browser session list returned success: false',\n };\n return err(error);\n }\n return ok(response.data.sessions);\n};\n\n/**\n * agent-browser session list --json を実行してセッション一覧を取得する\n *\n * @returns 成功時: 全セッション名の配列、失敗時: CliError\n */\nconst listAllSessions = (): ResultAsync<string[], CliError> => {\n return execCommand('npx', ['agent-browser', 'session', 'list', '--json'])\n .andThen((json) => parseSessionListJson(json))\n .andThen(extractSessions);\n};\n\n/**\n * enbu-* プレフィックスを持つセッションのみをフィルタリングする\n *\n * @param sessions - 全セッション名の配列\n * @returns enbu-プレフィックスを持つセッション名の配列\n */\nconst filterEnbuSessions = (sessions: string[]): string[] => {\n return sessions.filter((session) => session.startsWith('enbu-'));\n};\n\n/**\n * 単一のセッションをクローズする\n *\n * npx agent-browser --session <name> close を実行してセッションを終了する。\n *\n * @param sessionName - クローズするセッション名\n * @param formatter - 出力フォーマッター\n * @returns セッションのクローズに成功した場合はtrue、失敗した場合はfalse\n */\nconst cleanupSession = async (\n sessionName: string,\n formatter: OutputFormatter,\n): Promise<boolean> => {\n const result = await execCommand('npx', ['agent-browser', '--session', sessionName, 'close']);\n\n return result.match(\n () => {\n formatter.success(sessionName);\n return true;\n },\n (error) => {\n formatter.failure(`${sessionName} (${error.message})`);\n return false;\n },\n );\n};\n\n/**\n * 全てのenbu-セッションをクリーンアップする\n *\n * 各セッションに対してcloseコマンドを実行し、成功・失敗の数を集計する。\n * エラーが発生したセッションがあっても処理を継続し、可能な限り多くのセッションをクリーンアップする。\n *\n * @param sessions - クリーンアップ対象のセッション名配列\n * @param formatter - 出力フォーマッター\n * @returns クリーンアップ結果(成功数、失敗数、総数)\n */\nconst cleanupAllSessions = async (\n sessions: string[],\n formatter: OutputFormatter,\n): Promise<CleanupResult> => {\n let succeeded = 0;\n let failed = 0;\n\n for (const sessionName of sessions) {\n const success = await cleanupSession(sessionName, formatter);\n if (success) {\n succeeded++;\n } else {\n failed++;\n }\n }\n\n return {\n succeeded,\n failed,\n total: sessions.length,\n };\n};\n\n/**\n * cleanupコマンドを実行する\n *\n * enbu-* プレフィックスを持つagent-browserセッションを一括クリーンアップする。\n * 以下の処理を順次実行する:\n * 1. npx agent-browser session list --json でセッション一覧を取得\n * 2. enbu-* プレフィックスでフィルタリング\n * 3. 各セッションに対して npx agent-browser --session <name> close を実行\n * 4. 成功・失敗の数を集計して表示\n *\n * @param args - cleanupコマンドの引数\n * @returns 成功時: void、失敗時: CliError\n */\nexport const runCleanupCommand = (args: CleanupCommandArgs): ResultAsync<void, CliError> => {\n const formatter = new OutputFormatter(args.verbose);\n\n formatter.info('Cleaning up enbu sessions...');\n formatter.newline();\n\n // 1. 全セッションを取得\n return listAllSessions()\n .mapErr((error) => {\n formatter.error(`Failed to list sessions: ${error.message}`);\n return error;\n })\n .andThen((allSessions) => {\n // 2. enbu-セッションのみをフィルタリング\n const enbuSessions = filterEnbuSessions(allSessions);\n\n // クリーンアップ対象のセッションがない場合\n if (enbuSessions.length === 0) {\n formatter.info('No enbu sessions found');\n return okAsync(undefined);\n }\n\n formatter.debug(`Found ${enbuSessions.length} enbu session(s)`);\n\n // 3. 各セッションをクリーンアップ\n return ResultAsync.fromPromise(\n cleanupAllSessions(enbuSessions, formatter),\n (): CliError => ({\n type: 'execution_error',\n message: 'Unexpected error during cleanup',\n }),\n ).map((result) => {\n // 4. サマリーを表示\n formatter.newline();\n if (result.failed === 0) {\n formatter.info(`Cleaned up ${result.succeeded} session(s)`);\n } else {\n formatter.info(`Cleaned up ${result.succeeded} session(s) (${result.failed} failed)`);\n }\n return undefined;\n });\n });\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 { runCleanupCommand } from './commands/cleanup';\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 if (args.command === 'cleanup') {\n const result = await runCleanupCommand({\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 session: args.session,\n verbose: args.verbose,\n progressJson: args.progressJson,\n parallel: args.parallel,\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,23,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,98],"mappings":"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"}