opkg 0.9.2 → 0.9.3
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.
- package/package.json +3 -1
- package/packages/cli/dist/add-U44SL3OR.js +624 -0
- package/packages/cli/dist/add-U44SL3OR.js.map +7 -0
- package/packages/cli/dist/chunk-4B5HJLP2.js +48 -0
- package/packages/cli/dist/chunk-4B5HJLP2.js.map +7 -0
- package/packages/cli/dist/chunk-BROJ6OUT.js +631 -0
- package/packages/cli/dist/chunk-BROJ6OUT.js.map +7 -0
- package/packages/cli/dist/chunk-CVA64SXK.js +1136 -0
- package/packages/cli/dist/chunk-CVA64SXK.js.map +7 -0
- package/packages/cli/dist/chunk-D6LEPODL.js +413 -0
- package/packages/cli/dist/chunk-D6LEPODL.js.map +7 -0
- package/packages/cli/dist/chunk-HTYHJA3B.js +61 -0
- package/packages/cli/dist/chunk-HTYHJA3B.js.map +7 -0
- package/packages/cli/dist/chunk-KI7FDU3H.js +99 -0
- package/packages/cli/dist/chunk-KI7FDU3H.js.map +7 -0
- package/packages/cli/dist/chunk-PSQXKAL4.js +371 -0
- package/packages/cli/dist/chunk-PSQXKAL4.js.map +7 -0
- package/packages/cli/dist/chunk-PUDRKDVZ.js +1419 -0
- package/packages/cli/dist/chunk-PUDRKDVZ.js.map +7 -0
- package/packages/cli/dist/chunk-U7FW7SXX.js +568 -0
- package/packages/cli/dist/chunk-U7FW7SXX.js.map +7 -0
- package/packages/cli/dist/configure-3AZUMDJZ.js +107 -0
- package/packages/cli/dist/configure-3AZUMDJZ.js.map +7 -0
- package/packages/cli/dist/index.js +15 -15
- package/packages/cli/dist/install-EZNWMLJR.js +7581 -0
- package/packages/cli/dist/install-EZNWMLJR.js.map +7 -0
- package/packages/cli/dist/list-XR7RSJFS.js +327 -0
- package/packages/cli/dist/list-XR7RSJFS.js.map +7 -0
- package/packages/cli/dist/login-NRKHXZKM.js +150 -0
- package/packages/cli/dist/login-NRKHXZKM.js.map +7 -0
- package/packages/cli/dist/logout-SYHXCVCQ.js +40 -0
- package/packages/cli/dist/logout-SYHXCVCQ.js.map +7 -0
- package/packages/cli/dist/new-F46OSD72.js +277 -0
- package/packages/cli/dist/new-F46OSD72.js.map +7 -0
- package/packages/cli/dist/publish-4H43PCSG.js +619 -0
- package/packages/cli/dist/publish-4H43PCSG.js.map +7 -0
- package/packages/cli/dist/remove-BD52BHR2.js +542 -0
- package/packages/cli/dist/remove-BD52BHR2.js.map +7 -0
- package/packages/cli/dist/save-N3QWF2WN.js +1728 -0
- package/packages/cli/dist/save-N3QWF2WN.js.map +7 -0
- package/packages/cli/dist/search-ABROK3UO.js +157 -0
- package/packages/cli/dist/search-ABROK3UO.js.map +7 -0
- package/packages/cli/dist/set-NGM2FIKF.js +251 -0
- package/packages/cli/dist/set-NGM2FIKF.js.map +7 -0
- package/packages/cli/dist/uninstall-Q3CP4UN5.js +539 -0
- package/packages/cli/dist/uninstall-Q3CP4UN5.js.map +7 -0
- package/packages/cli/dist/unpublish-VBTNTMS5.js +245 -0
- package/packages/cli/dist/unpublish-VBTNTMS5.js.map +7 -0
- package/packages/cli/dist/view-MXRBMXOG.js +488 -0
- package/packages/cli/dist/view-MXRBMXOG.js.map +7 -0
- package/packages/cli/package.json +2 -0
- package/packages/core/dist/core/install/conflicts/file-conflict-resolver.d.ts +5 -4
- package/packages/core/dist/core/install/conflicts/file-conflict-resolver.d.ts.map +1 -1
- package/packages/core/dist/core/install/conflicts/file-conflict-resolver.js +6 -5
- package/packages/core/dist/core/install/conflicts/file-conflict-resolver.js.map +1 -1
- package/packages/core/dist/core/install/install-reporting.js +1 -1
- package/packages/core/dist/core/install/install-reporting.js.map +1 -1
- package/packages/core/dist/core/install/list-handler.d.ts.map +1 -1
- package/packages/core/dist/core/install/list-handler.js +7 -0
- package/packages/core/dist/core/install/list-handler.js.map +1 -1
- package/packages/core/dist/core/install/marketplace-handler.d.ts.map +1 -1
- package/packages/core/dist/core/install/marketplace-handler.js.map +1 -1
- package/packages/core/dist/core/install/operations/conflict-handler.d.ts +2 -1
- package/packages/core/dist/core/install/operations/conflict-handler.d.ts.map +1 -1
- package/packages/core/dist/core/install/operations/conflict-handler.js +2 -2
- package/packages/core/dist/core/install/operations/conflict-handler.js.map +1 -1
- package/packages/core/dist/core/install/orchestrator/orchestrator.d.ts.map +1 -1
- package/packages/core/dist/core/install/orchestrator/orchestrator.js +22 -14
- package/packages/core/dist/core/install/orchestrator/orchestrator.js.map +1 -1
- package/packages/core/dist/core/install/orchestrator/strategies/git-strategy.d.ts +1 -0
- package/packages/core/dist/core/install/orchestrator/strategies/git-strategy.d.ts.map +1 -1
- package/packages/core/dist/core/install/orchestrator/strategies/git-strategy.js +11 -24
- package/packages/core/dist/core/install/orchestrator/strategies/git-strategy.js.map +1 -1
- package/packages/core/dist/core/install/orchestrator/strategies/path-strategy.d.ts +2 -0
- package/packages/core/dist/core/install/orchestrator/strategies/path-strategy.d.ts.map +1 -1
- package/packages/core/dist/core/install/orchestrator/strategies/path-strategy.js +14 -14
- package/packages/core/dist/core/install/orchestrator/strategies/path-strategy.js.map +1 -1
- package/packages/core/dist/core/install/orchestrator/strategies/registry-strategy.d.ts +7 -0
- package/packages/core/dist/core/install/orchestrator/strategies/registry-strategy.d.ts.map +1 -1
- package/packages/core/dist/core/install/orchestrator/strategies/registry-strategy.js +28 -0
- package/packages/core/dist/core/install/orchestrator/strategies/registry-strategy.js.map +1 -1
- package/packages/core/dist/core/install/platform-resolution.d.ts +3 -0
- package/packages/core/dist/core/install/platform-resolution.d.ts.map +1 -1
- package/packages/core/dist/core/install/platform-resolution.js +5 -2
- package/packages/core/dist/core/install/platform-resolution.js.map +1 -1
- package/packages/core/dist/core/install/preprocessing/context-population.d.ts +18 -0
- package/packages/core/dist/core/install/preprocessing/context-population.d.ts.map +1 -0
- package/packages/core/dist/core/install/preprocessing/context-population.js +36 -0
- package/packages/core/dist/core/install/preprocessing/context-population.js.map +1 -0
- package/packages/core/dist/core/install/preprocessing/convenience-preprocessor.d.ts +23 -0
- package/packages/core/dist/core/install/preprocessing/convenience-preprocessor.d.ts.map +1 -1
- package/packages/core/dist/core/install/preprocessing/convenience-preprocessor.js +44 -0
- package/packages/core/dist/core/install/preprocessing/convenience-preprocessor.js.map +1 -1
- package/packages/core/dist/core/install/sources/path-source.d.ts.map +1 -1
- package/packages/core/dist/core/install/sources/path-source.js +8 -0
- package/packages/core/dist/core/install/sources/path-source.js.map +1 -1
- package/packages/core/dist/core/install/unified/context-builders.d.ts +5 -0
- package/packages/core/dist/core/install/unified/context-builders.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/context-builders.js +13 -0
- package/packages/core/dist/core/install/unified/context-builders.js.map +1 -1
- package/packages/core/dist/core/install/unified/context-helpers.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/context-helpers.js +5 -0
- package/packages/core/dist/core/install/unified/context-helpers.js.map +1 -1
- package/packages/core/dist/core/install/unified/context.d.ts +6 -0
- package/packages/core/dist/core/install/unified/context.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/multi-context-pipeline.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/multi-context-pipeline.js +0 -2
- package/packages/core/dist/core/install/unified/multi-context-pipeline.js.map +1 -1
- package/packages/core/dist/core/install/unified/phases/conflicts.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/phases/conflicts.js +1 -1
- package/packages/core/dist/core/install/unified/phases/conflicts.js.map +1 -1
- package/packages/core/dist/core/install/unified/phases/execute.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/phases/execute.js +2 -1
- package/packages/core/dist/core/install/unified/phases/execute.js.map +1 -1
- package/packages/core/dist/core/install/unified/phases/report.js +1 -1
- package/packages/core/dist/core/install/unified/phases/report.js.map +1 -1
- package/packages/core/dist/core/install/unified/pipeline.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/pipeline.js +5 -2
- package/packages/core/dist/core/install/unified/pipeline.js.map +1 -1
- package/packages/core/dist/core/ports/resolve.d.ts +0 -13
- package/packages/core/dist/core/ports/resolve.d.ts.map +1 -1
- package/packages/core/dist/core/ports/resolve.js +0 -28
- package/packages/core/dist/core/ports/resolve.js.map +1 -1
- package/packages/core/dist/core/remove/removal-confirmation.d.ts +4 -1
- package/packages/core/dist/core/remove/removal-confirmation.d.ts.map +1 -1
- package/packages/core/dist/core/remove/removal-confirmation.js +5 -4
- package/packages/core/dist/core/remove/removal-confirmation.js.map +1 -1
- package/packages/core/dist/core/remove/remove-from-source-pipeline.d.ts.map +1 -1
- package/packages/core/dist/core/remove/remove-from-source-pipeline.js +1 -10
- package/packages/core/dist/core/remove/remove-from-source-pipeline.js.map +1 -1
- package/packages/core/dist/core/uninstall/uninstall-executor.js +1 -1
- package/packages/core/dist/core/uninstall/uninstall-executor.js.map +1 -1
- package/packages/core/dist/core/uninstall/uninstall-reporter.d.ts +2 -2
- package/packages/core/dist/core/uninstall/uninstall-reporter.d.ts.map +1 -1
- package/packages/core/dist/core/uninstall/uninstall-reporter.js +4 -4
- package/packages/core/dist/core/uninstall/uninstall-reporter.js.map +1 -1
- package/packages/core/dist/index.d.ts +1 -1
- package/packages/core/dist/index.d.ts.map +1 -1
- package/packages/core/dist/types/execution-context.d.ts +24 -10
- package/packages/core/dist/types/execution-context.d.ts.map +1 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../core/src/core/ports/console-output.ts", "../../core/src/core/ports/console-prompt.ts", "../../core/src/core/ports/resolve.ts", "../../core/src/core/execution-context.ts", "../../core/src/utils/home-directory.ts", "../src/cli/clack-output-adapter.ts", "../src/utils/spinner.ts", "../src/cli/clack-prompt-adapter.ts", "../src/cli/plain-prompt-adapter.ts", "../src/cli/clack-progress-adapter.ts", "../src/cli/context.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Console Output Adapter (Default/CI)\n * \n * Plain console.log-based implementation of OutputPort.\n * Used as the default fallback when no interactive UI is available.\n * Safe for CI/CD pipelines and headless environments.\n */\n\nimport type { OutputPort, UnifiedSpinner } from './output.js';\n\nexport const consoleOutput: OutputPort = {\n info(message: string): void {\n console.log(message);\n },\n\n step(message: string): void {\n console.log(message);\n },\n\n connector(): void {\n // No-op in plain console mode\n },\n\n message(message: string): void {\n console.log(message);\n },\n\n success(message: string): void {\n console.log(`\u2713 ${message}`);\n },\n\n error(message: string): void {\n console.log(`\u2717 ${message}`);\n },\n\n warn(message: string): void {\n console.log(`\u26A0 ${message}`);\n },\n\n note(content: string, title?: string): void {\n const indented = content.split('\\n').map(line => ` ${line}`).join('\\n');\n if (title) {\n console.log(`\\n${title}\\n${indented}`);\n } else {\n console.log(`\\n${indented}`);\n }\n },\n\n async confirm(_message: string, options?: { initial?: boolean }): Promise<boolean> {\n // In non-interactive mode, return the default value\n return options?.initial ?? false;\n },\n\n spinner(): UnifiedSpinner {\n let msg = '';\n return {\n start(message: string) {\n msg = message;\n console.log(`\u2026 ${message}`);\n },\n stop(finalMessage?: string) {\n if (finalMessage) {\n console.log(`\u2713 ${finalMessage}`);\n } else {\n console.log(`\u2713 ${msg}`);\n }\n },\n message(text: string) {\n msg = text;\n },\n };\n },\n};\n", "/**\n * Non-Interactive Prompt Adapter (Default/CI)\n * \n * PromptPort implementation that throws on any prompt attempt.\n * Used in CI/CD pipelines and headless environments where\n * user interaction is not possible.\n */\n\nimport type { PromptPort, PromptChoice, PromptGroupChoices, TextPromptOptions } from './prompt.js';\n\nexport class NonInteractivePromptError extends Error {\n constructor(promptType: string) {\n super(\n `Cannot prompt for ${promptType} in non-interactive mode. ` +\n `Use specific flags or options to provide the required input.`\n );\n this.name = 'NonInteractivePromptError';\n }\n}\n\nexport const nonInteractivePrompt: PromptPort = {\n async confirm(_message: string, _initial?: boolean): Promise<boolean> {\n throw new NonInteractivePromptError('confirmation');\n },\n\n async select<T>(_message: string, _choices: Array<PromptChoice<T>>, _hint?: string): Promise<T> {\n throw new NonInteractivePromptError('selection');\n },\n\n async multiselect<T>(_message: string, _choices: Array<PromptChoice<T>>): Promise<T[]> {\n throw new NonInteractivePromptError('multi-selection');\n },\n\n async groupMultiselect<T>(_message: string, _groups: PromptGroupChoices<T>): Promise<T[]> {\n throw new NonInteractivePromptError('group selection');\n },\n\n async text(_message: string, _options?: TextPromptOptions): Promise<string> {\n throw new NonInteractivePromptError('text input');\n },\n};\n", "/**\n * Port Resolution Helpers\n * \n * Utilities for resolving OutputPort, PromptPort, and ProgressPort from\n * ExecutionContext, falling back to safe defaults when ports are not\n * explicitly provided.\n */\n\nimport type { ExecutionContext } from '../../types/execution-context.js';\nimport type { OutputPort } from './output.js';\nimport type { PromptPort } from './prompt.js';\nimport type { ProgressPort } from './progress.js';\nimport { consoleOutput } from './console-output.js';\nimport { nonInteractivePrompt } from './console-prompt.js';\nimport { silentProgress } from './console-progress.js';\n\n/**\n * Resolve the OutputPort from an ExecutionContext.\n * Falls back to consoleOutput (plain console.log) if not provided.\n */\nexport function resolveOutput(ctx?: ExecutionContext | { output?: OutputPort }): OutputPort {\n return ctx?.output ?? consoleOutput;\n}\n\n/**\n * Resolve the PromptPort from an ExecutionContext.\n * Falls back to nonInteractivePrompt (throws on any prompt) if not provided.\n */\nexport function resolvePrompt(ctx?: ExecutionContext | { prompt?: PromptPort }): PromptPort {\n return ctx?.prompt ?? nonInteractivePrompt;\n}\n\n/**\n * Resolve the ProgressPort from an ExecutionContext.\n * Falls back to silentProgress (no-op) if not provided.\n * \n * The default is silent (not consoleProgress) because progress events\n * are opt-in: the CLI adapter or GUI adapter must explicitly subscribe.\n * This prevents noisy [progress] logs in CI/CD unless explicitly requested.\n */\nexport function resolveProgress(ctx?: ExecutionContext | { progress?: ProgressPort }): ProgressPort {\n return ctx?.progress ?? silentProgress;\n}\n", "/**\n * Execution Context Module\n * \n * Central module for all directory resolution logic.\n * Creates and validates ExecutionContext for commands.\n * \n * This is the single source of truth for determining:\n * - Where to resolve input arguments (sourceCwd)\n * - Where to write output files (targetDir)\n */\n\nimport { resolve } from 'path';\nimport { stat, access, constants as fsConstants } from 'fs/promises';\nimport type { ExecutionContext, ExecutionOptions, ContextVariables } from '../types/execution-context.js';\nimport { getHomeDirectory, isHomeDirectory, normalizePathWithTilde } from '../utils/home-directory.js';\nimport { logger } from '../utils/logger.js';\n\n/**\n * Create an ExecutionContext from command options.\n * \n * Priority logic:\n * 1. If --global: targetDir = home directory\n * 2. Else if --cwd: targetDir = resolve(cwd)\n * 3. Else: targetDir = process.cwd()\n * \n * sourceCwd is always process.cwd() (original working directory)\n * \n * @param options - Command options (global, cwd flags)\n * @returns Validated ExecutionContext\n * @throws Error if validation fails\n */\nexport async function createExecutionContext(options: ExecutionOptions = {}): Promise<ExecutionContext> {\n // sourceCwd is always the original working directory\n const sourceCwd = process.cwd();\n \n // Determine targetDir based on options\n let targetDir: string;\n let isGlobal: boolean;\n \n if (options.global) {\n targetDir = getHomeDirectory();\n isGlobal = true;\n \n // Log warning if both flags present\n if (options.cwd) {\n logger.info('--global option present, ignoring --cwd', { \n cwd: options.cwd,\n targetDir \n });\n }\n } else if (options.cwd) {\n targetDir = resolve(sourceCwd, options.cwd);\n isGlobal = isHomeDirectory(targetDir);\n } else {\n targetDir = sourceCwd;\n isGlobal = isHomeDirectory(targetDir);\n }\n \n // Create context\n const context: ExecutionContext = {\n sourceCwd,\n targetDir,\n isGlobal,\n interactive: options.interactive\n };\n \n // Validate context\n await validateExecutionContext(context);\n \n // Log context creation\n logger.debug('Created execution context', {\n sourceCwd: context.sourceCwd,\n targetDir: context.targetDir,\n isGlobal: context.isGlobal\n });\n \n return context;\n}\n\n/**\n * Validate an ExecutionContext.\n * \n * Checks:\n * - targetDir exists and is a directory\n * - targetDir is writable\n * - sourceCwd exists and is readable\n * \n * @param context - ExecutionContext to validate\n * @throws Error with helpful message if validation fails\n */\nasync function validateExecutionContext(context: ExecutionContext): Promise<void> {\n // Validate targetDir\n try {\n const targetStat = await stat(context.targetDir);\n if (!targetStat.isDirectory()) {\n throw new Error(`Target path is not a directory: ${context.targetDir}`);\n }\n \n // Check if writable\n await access(context.targetDir, fsConstants.W_OK);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n throw new Error(\n `Target directory does not exist: ${context.targetDir}\\n\\n` +\n `Hint: Create the directory or specify a different target with --cwd`\n );\n }\n if ((error as NodeJS.ErrnoException).code === 'EACCES') {\n throw new Error(\n `Target directory is not writable: ${context.targetDir}\\n\\n` +\n `Hint: Check directory permissions`\n );\n }\n throw new Error(\n `Invalid target directory: ${context.targetDir}\\n` +\n `Error: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n \n // Validate sourceCwd\n try {\n const sourceStat = await stat(context.sourceCwd);\n if (!sourceStat.isDirectory()) {\n throw new Error(`Source working directory is not a directory: ${context.sourceCwd}`);\n }\n \n // Check if readable\n await access(context.sourceCwd, fsConstants.R_OK);\n } catch (error) {\n throw new Error(\n `Invalid source working directory: ${context.sourceCwd}\\n` +\n `Error: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n}\n\n/**\n * Generate context variables for platform flows and conditional logic.\n * \n * Variables:\n * - $$targetRoot: Normalized target path (with ~/ if home)\n * - $$sourceCwd: Original working directory\n * - $$isGlobal: Global flag for convenience\n * \n * @param context - ExecutionContext\n * @returns Map of context variables\n */\nexport function getContextVariables(context: ExecutionContext): ContextVariables {\n return {\n $$targetRoot: normalizePathWithTilde(context.targetDir),\n $$sourceCwd: context.sourceCwd,\n $$isGlobal: context.isGlobal\n };\n}\n\n/**\n * Get display-friendly target directory path.\n * Shows ~/ for home directory.\n * \n * @param context - ExecutionContext\n * @returns Display-friendly path\n */\nexport function getDisplayTargetDir(context: ExecutionContext): string {\n return normalizePathWithTilde(context.targetDir);\n}\n", "/**\n * Home Directory Utilities\n * \n * Centralized module for all home directory operations.\n * Handles path resolution, comparison, and display normalization.\n */\n\nimport { homedir } from 'os';\nimport { resolve, normalize } from 'path';\n\n/**\n * Get the home directory path.\n * \n * @returns Absolute path to the user's home directory\n */\nexport function getHomeDirectory(): string {\n return homedir();\n}\n\n/**\n * Check if a path equals the home directory.\n * \n * Handles path normalization to ensure accurate comparison.\n * \n * @param path - Path to check\n * @returns True if path is the home directory\n */\nexport function isHomeDirectory(path: string): boolean {\n const normalizedPath = normalize(resolve(path));\n const normalizedHome = normalize(getHomeDirectory());\n return normalizedPath === normalizedHome;\n}\n\n/**\n * Convert home directory path to tilde notation for display.\n * \n * Only converts if the path is exactly the home directory or\n * a subdirectory of it. Other paths are returned unchanged.\n * \n * @param path - Absolute path to normalize\n * @returns Path with ~/ prefix if applicable, otherwise original path\n */\nexport function normalizePathWithTilde(path: string): string {\n const normalizedPath = normalize(resolve(path));\n const homeDir = getHomeDirectory();\n const normalizedHome = normalize(homeDir);\n \n // Exact match - return ~/\n if (normalizedPath === normalizedHome) {\n return '~/';\n }\n \n // Subdirectory of home - replace prefix\n if (normalizedPath.startsWith(normalizedHome + '/')) {\n return '~/' + normalizedPath.slice(normalizedHome.length + 1);\n }\n \n // Not in home directory - return as-is\n return normalizedPath;\n}\n\n/**\n * Expand tilde notation to full home directory path.\n * \n * Used for path comparison in flow conditions and path resolution.\n * \n * @param path - Path that may start with ~/\n * @returns Path with ~/ expanded to home directory\n */\nexport function expandTilde(path: string): string {\n if (path === '~' || path === '~/') {\n return getHomeDirectory();\n }\n \n if (path.startsWith('~/')) {\n return resolve(getHomeDirectory(), path.slice(2));\n }\n \n return path;\n}\n", "/**\n * Clack Output Adapter\n * \n * CLI-specific OutputPort implementation that routes to @clack/prompts\n * for rich interactive terminal UI. Falls back to plain console for\n * non-interactive sessions.\n * \n * This is the CLI's implementation of the OutputPort interface defined\n * in core/ports/output.ts.\n */\n\nimport { log, spinner as clackSpinner, confirm as clackConfirm, note as clackNote, isCancel, cancel } from '@clack/prompts';\nimport { Spinner } from '../utils/spinner.js';\nimport type { OutputPort, UnifiedSpinner } from '@opkg/core/core/ports/output.js';\n\n/**\n * Create a Clack-based OutputPort for interactive terminal sessions.\n */\nexport function createClackOutput(): OutputPort {\n return {\n info(message: string): void {\n log.info(message);\n },\n\n step(message: string): void {\n log.step(message);\n },\n\n connector(): void {\n log.message(' ', { spacing: 0 });\n },\n\n message(message: string): void {\n log.message(message, { spacing: 0 });\n },\n\n success(message: string): void {\n log.success(message);\n },\n\n error(message: string): void {\n log.error(message);\n },\n\n warn(message: string): void {\n log.warn(message);\n },\n\n note(content: string, title?: string): void {\n clackNote(content, title ?? '');\n },\n\n async confirm(message: string, options?: { initial?: boolean }): Promise<boolean> {\n const result = await clackConfirm({\n message,\n initialValue: options?.initial ?? false,\n });\n if (isCancel(result)) {\n cancel('Operation cancelled.');\n const { UserCancellationError } = await import('@opkg/core/utils/errors.js');\n throw new UserCancellationError('Operation cancelled by user');\n }\n return result as boolean;\n },\n\n spinner(): UnifiedSpinner {\n const s = clackSpinner();\n let isStarted = false;\n\n return {\n start(message: string) {\n if (!isStarted) {\n s.start(message);\n isStarted = true;\n }\n },\n stop(finalMessage?: string) {\n if (isStarted) {\n if (finalMessage) {\n s.stop(finalMessage);\n } else {\n s.stop();\n }\n isStarted = false;\n }\n },\n message(text: string) {\n if (isStarted) {\n s.message(text);\n }\n },\n };\n },\n };\n}\n\n/**\n * Create a plain console OutputPort for non-interactive sessions (CI, piped output).\n */\nexport function createPlainOutput(): OutputPort {\n return {\n info(message: string): void {\n console.log(message);\n },\n\n step(message: string): void {\n console.log(message);\n },\n\n connector(): void {\n // No-op in plain mode\n },\n\n message(message: string): void {\n console.log(message);\n },\n\n success(message: string): void {\n console.log(`\u2713 ${message}`);\n },\n\n error(message: string): void {\n console.log(`\u274C ${message}`);\n },\n\n warn(message: string): void {\n console.log(`\u26A0\uFE0F ${message}`);\n },\n\n note(content: string, title?: string): void {\n const indented = content.split('\\n').map(line => ` ${line}`).join('\\n');\n if (title) {\n console.log(`\\n${title}\\n${indented}`);\n } else {\n console.log(`\\n${indented}`);\n }\n },\n\n async confirm(_message: string, options?: { initial?: boolean }): Promise<boolean> {\n // In non-interactive/plain mode, return the default value.\n // There is no TTY to prompt the user, so we fall through silently.\n console.log(`${_message} ${options?.initial ? '(Y)' : '(N)'}`);\n return options?.initial ?? false;\n },\n\n spinner(): UnifiedSpinner {\n let s: Spinner | null = null;\n\n return {\n start(message: string) {\n s = new Spinner(message);\n s.start();\n },\n stop(finalMessage?: string) {\n if (s) {\n s.stop();\n if (finalMessage) {\n console.log(finalMessage);\n }\n s = null;\n }\n },\n message(text: string) {\n if (s) {\n s.update(text);\n }\n },\n };\n },\n };\n}\n", "/**\n * Simple spinner utility for showing loading indicators in CLI\n */\n\nexport class Spinner {\n private intervalId: NodeJS.Timeout | null = null;\n private message: string;\n private frames: string[];\n private currentFrame: number = 0;\n private isRunning: boolean = false;\n\n constructor(message: string = 'Loading...') {\n this.message = message;\n // Different spinner frames for variety\n this.frames = ['\u280B', '\u2819', '\u2839', '\u2838', '\u283C', '\u2834', '\u2826', '\u2827', '\u2807', '\u280F'];\n }\n\n /**\n * Start the spinner animation\n */\n start(): void {\n if (this.isRunning) {\n return;\n }\n\n this.isRunning = true;\n this.currentFrame = 0;\n\n // Hide cursor for cleaner output\n process.stdout.write('\\x1B[?25l');\n\n this.intervalId = setInterval(() => {\n const frame = this.frames[this.currentFrame % this.frames.length];\n process.stdout.write(`\\r${frame} ${this.message}`);\n this.currentFrame++;\n }, 80); // Update every 80ms for smooth animation\n }\n\n /**\n * Update the spinner message\n */\n update(message: string): void {\n this.message = message;\n }\n\n /**\n * Stop the spinner\n */\n stop(): void {\n if (!this.isRunning) {\n return;\n }\n\n this.isRunning = false;\n\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n\n // Clear the spinner line\n process.stdout.write('\\r' + ' '.repeat(process.stdout.columns || 80) + '\\r');\n\n // Show cursor again\n process.stdout.write('\\x1B[?25h');\n }\n\n}\n\n", "/**\n * Clack Prompt Adapter\n * \n * CLI-specific PromptPort implementation that routes to @clack/prompts\n * for rich interactive terminal prompts.\n * \n * This is the CLI's implementation of the PromptPort interface defined\n * in core/ports/prompt.ts.\n */\n\nimport * as clack from '@clack/prompts';\nimport type { PromptPort, PromptChoice, PromptGroupChoices, TextPromptOptions } from '@opkg/core/core/ports/prompt.js';\nimport { UserCancellationError } from '@opkg/core/utils/errors.js';\n\nfunction handleCancel(result: unknown): void {\n if (clack.isCancel(result)) {\n clack.cancel('Operation cancelled.');\n throw new UserCancellationError('Operation cancelled by user');\n }\n}\n\n/**\n * Create a Clack-based PromptPort for interactive terminal sessions.\n */\nexport function createClackPrompt(): PromptPort {\n return {\n async confirm(message: string, initial?: boolean): Promise<boolean> {\n const result = await clack.confirm({\n message,\n initialValue: initial ?? false,\n });\n handleCancel(result);\n return result as boolean;\n },\n\n async select<T>(\n message: string,\n choices: Array<PromptChoice<T>>,\n hint?: string\n ): Promise<T> {\n const result = await clack.select({\n message,\n options: choices.map(c => ({\n label: c.title,\n value: c.value,\n ...(c.description ? { hint: c.description } : {}),\n })) as any,\n });\n handleCancel(result);\n return result as T;\n },\n\n async multiselect<T>(\n message: string,\n choices: Array<PromptChoice<T>>,\n options?: { hint?: string; min?: number }\n ): Promise<T[]> {\n const result = await clack.multiselect({\n message,\n options: choices.map(c => ({\n label: c.title,\n value: c.value,\n ...(c.description ? { hint: c.description } : {}),\n })) as any,\n required: options?.min ? options.min > 0 : false,\n });\n handleCancel(result);\n return result as T[];\n },\n\n async groupMultiselect<T>(\n message: string,\n groups: PromptGroupChoices<T>\n ): Promise<T[]> {\n const result = await clack.groupMultiselect({\n message,\n options: groups as any,\n });\n handleCancel(result);\n return result as T[];\n },\n\n async text(\n message: string,\n options?: TextPromptOptions\n ): Promise<string> {\n // @clack/core does NOT await validate results, so async validators\n // will render as [object Promise]. We need to handle sync and async\n // validators differently.\n const userValidate = options?.validate;\n\n // Wrap validate to be synchronous for clack. If the user's validator\n // is async, we skip clack's built-in validate and handle it via a\n // retry loop below.\n let isAsync = false;\n\n const syncValidate = userValidate ? (value: string | undefined) => {\n const r = userValidate(value ?? '');\n if (r && typeof (r as any).then === 'function') {\n // Async validator detected \u2014 let clack accept the value,\n // we'll validate after the prompt returns.\n isAsync = true;\n return undefined;\n }\n if (r === true || r === undefined) return undefined;\n return r as string;\n } : undefined;\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const result = await clack.text({\n message,\n placeholder: options?.placeholder,\n defaultValue: options?.initial,\n validate: syncValidate,\n });\n handleCancel(result);\n\n // If the validator was async, run it now and re-prompt on failure\n if (isAsync && userValidate) {\n const asyncResult = await userValidate((result as string) ?? '');\n if (asyncResult !== true && asyncResult !== undefined) {\n // Show the validation error and re-prompt\n clack.log.error(asyncResult as string);\n isAsync = false; // reset for next iteration\n continue;\n }\n }\n\n return result as string;\n }\n },\n };\n}\n", "/**\n * Plain Prompt Adapter\n *\n * PromptPort implementation backed by the `prompts` npm package\n * (terkelg/prompts). Provides arrow-key interactive selection,\n * confirm, multiselect, and text input without the box-drawing\n * chrome of @clack/prompts.\n *\n * Used when the CLI commits to \"plain\" output mode on a TTY.\n */\n\nimport prompts from 'prompts';\nimport type {\n PromptPort,\n PromptChoice,\n PromptGroupChoices,\n TextPromptOptions,\n} from '@opkg/core/core/ports/prompt.js';\nimport { UserCancellationError } from '@opkg/core/utils/errors.js';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Shared onCancel handler -- throws so callers never see `undefined`. */\nfunction onCancel(): never {\n throw new UserCancellationError('Prompt cancelled');\n}\n\n// ---------------------------------------------------------------------------\n// Adapter\n// ---------------------------------------------------------------------------\n\nexport function createPlainPrompt(): PromptPort {\n return {\n // \u2500\u2500 confirm \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n async confirm(message: string, initial?: boolean): Promise<boolean> {\n const { value } = await prompts(\n {\n type: 'confirm',\n name: 'value',\n message,\n initial: initial ?? false,\n },\n { onCancel },\n );\n return value as boolean;\n },\n\n // \u2500\u2500 select \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n async select<T>(\n message: string,\n choices: Array<PromptChoice<T>>,\n hint?: string,\n ): Promise<T> {\n const { value } = await prompts(\n {\n type: 'select',\n name: 'value',\n message,\n choices: choices.map((c) => ({\n title: c.title,\n value: c.value,\n description: c.description,\n })),\n hint,\n },\n { onCancel },\n );\n return value as T;\n },\n\n // \u2500\u2500 multiselect \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n async multiselect<T>(\n message: string,\n choices: Array<PromptChoice<T>>,\n options?: { hint?: string; min?: number },\n ): Promise<T[]> {\n const { value } = await prompts(\n {\n type: 'multiselect',\n name: 'value',\n message,\n choices: choices.map((c) => ({\n title: c.title,\n value: c.value,\n description: c.description,\n })),\n hint: options?.hint ?? '- Space: select/deselect, Enter: confirm',\n min: options?.min,\n },\n { onCancel },\n );\n return value as T[];\n },\n\n // \u2500\u2500 groupMultiselect \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n async groupMultiselect<T>(\n message: string,\n groups: PromptGroupChoices<T>,\n ): Promise<T[]> {\n // `prompts` has no native grouped multiselect, so we flatten the\n // groups into a single list with \"Group / Label\" titles.\n const flatChoices: Array<{ title: string; value: T }> = [];\n for (const [groupLabel, items] of Object.entries(groups)) {\n for (const item of items) {\n flatChoices.push({\n title: `${groupLabel} / ${item.label}`,\n value: item.value,\n });\n }\n }\n\n const { value } = await prompts(\n {\n type: 'multiselect',\n name: 'value',\n message,\n choices: flatChoices.map((c) => ({\n title: c.title,\n value: c.value,\n })),\n hint: '- Space: select/deselect, Enter: confirm',\n },\n { onCancel },\n );\n return value as T[];\n },\n\n // \u2500\u2500 text \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n async text(\n message: string,\n options?: TextPromptOptions,\n ): Promise<string> {\n const userValidate = options?.validate;\n\n // Detect whether the validator is async by probing with a dummy call.\n // If async, we skip prompts' built-in validate and loop manually.\n let isAsync = false;\n const syncValidate = userValidate\n ? (value: string) => {\n const r = userValidate(value);\n if (r && typeof (r as any).then === 'function') {\n isAsync = true;\n return true; // accept for now, validate after\n }\n if (r === true || r === undefined) return true;\n return r as string;\n }\n : undefined;\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { value } = await prompts(\n {\n type: 'text',\n name: 'value',\n message,\n initial: options?.initial,\n validate: syncValidate,\n },\n { onCancel },\n );\n\n const result = (value as string) ?? '';\n\n // Post-submit async validation\n if (isAsync && userValidate) {\n const asyncResult = await userValidate(result);\n if (asyncResult !== true && asyncResult !== undefined) {\n console.error(` Error: ${asyncResult}`);\n isAsync = false; // reset for next iteration\n continue;\n }\n }\n\n return result;\n }\n },\n };\n}\n", "/**\n * Clack Progress Adapter\n * \n * CLI-specific ProgressPort implementation that routes structured\n * progress events to @clack/prompts log output for terminal display.\n * \n * This is the CLI's implementation of the ProgressPort interface\n * defined in core/ports/progress.ts.\n */\n\nimport { log } from '@clack/prompts';\nimport type { ProgressPort, ProgressEvent, ProgressLogLevel } from '@opkg/core/core/ports/progress.js';\n\n/**\n * Create a Clack-based ProgressPort for interactive terminal sessions.\n * \n * Routes progress events to @clack/prompts log methods for rich\n * terminal output. Failed events are highlighted; success events\n * are concise.\n */\nexport function createClackProgress(): ProgressPort {\n return {\n emit(event: ProgressEvent): void {\n switch (event.type) {\n case 'install:start':\n log.step(`Installing ${event.packages.length} package(s)`);\n break;\n case 'install:resolve':\n if (event.status === 'failed') {\n log.warn(`Failed to resolve ${event.package}${event.detail ? `: ${event.detail}` : ''}`);\n }\n break;\n case 'install:download':\n if (event.status === 'failed') {\n log.warn(`Failed to download ${event.package}${event.detail ? `: ${event.detail}` : ''}`);\n }\n break;\n case 'install:extract':\n if (event.status === 'failed') {\n log.warn(`Failed to extract ${event.package}${event.detail ? `: ${event.detail}` : ''}`);\n }\n break;\n case 'install:complete': {\n const { installed, failed, skipped } = event.summary;\n if (failed > 0) {\n log.warn(`Install complete: ${installed} installed, ${failed} failed, ${skipped} skipped`);\n } else {\n log.info(`Install complete: ${installed} installed${skipped > 0 ? `, ${skipped} skipped` : ''}`);\n }\n break;\n }\n\n case 'publish:start':\n log.step(`Publishing ${event.package}@${event.version}`);\n break;\n case 'publish:upload':\n if (event.status === 'failed') {\n log.warn(`Upload failed for ${event.package}${event.detail ? `: ${event.detail}` : ''}`);\n }\n break;\n case 'publish:complete':\n if (event.success) {\n log.info(`Published ${event.package}`);\n } else {\n log.warn(`Failed to publish ${event.package}`);\n }\n break;\n\n case 'uninstall:start':\n log.step(`Uninstalling ${event.packages.length} package(s)`);\n break;\n case 'uninstall:remove':\n if (event.status === 'failed') {\n log.warn(`Failed to remove ${event.package}${event.detail ? `: ${event.detail}` : ''}`);\n }\n break;\n case 'uninstall:complete': {\n const { removed, failed } = event.summary;\n if (failed > 0) {\n log.warn(`Uninstall complete: ${removed} removed, ${failed} failed`);\n } else {\n log.info(`Uninstall complete: ${removed} removed`);\n }\n break;\n }\n\n case 'search:start':\n // Intentionally quiet -- search is fast\n break;\n case 'search:scanning':\n // Intentionally quiet\n break;\n case 'search:complete':\n log.info(`Found ${event.resultCount} result(s)`);\n break;\n\n case 'pipeline:start':\n log.step(`${event.pipeline}${event.detail ? `: ${event.detail}` : ''}`);\n break;\n case 'pipeline:step':\n log.info(`${event.step}${event.detail ? `: ${event.detail}` : ''}`);\n break;\n case 'pipeline:complete':\n if (!event.success) {\n log.warn(`${event.pipeline} failed${event.detail ? `: ${event.detail}` : ''}`);\n }\n break;\n }\n },\n\n log(level: ProgressLogLevel, message: string): void {\n switch (level) {\n case 'debug':\n // Silent in normal CLI mode\n break;\n case 'info':\n log.info(message);\n break;\n case 'warn':\n log.warn(message);\n break;\n case 'error':\n log.error(message);\n break;\n }\n },\n };\n}\n\n/**\n * Create a plain console ProgressPort for non-interactive sessions.\n * Minimal output -- only failures and summaries.\n */\nexport function createPlainProgress(): ProgressPort {\n return {\n emit(event: ProgressEvent): void {\n switch (event.type) {\n case 'install:complete':\n console.log(`Installed: ${event.summary.installed}, failed: ${event.summary.failed}, skipped: ${event.summary.skipped}`);\n break;\n case 'publish:complete':\n console.log(`Publish ${event.package}: ${event.success ? 'success' : 'failed'}`);\n break;\n case 'uninstall:complete':\n console.log(`Removed: ${event.summary.removed}, failed: ${event.summary.failed}`);\n break;\n case 'search:complete':\n console.log(`Found ${event.resultCount} result(s)`);\n break;\n case 'pipeline:complete':\n if (!event.success) {\n console.log(`${event.pipeline} failed${event.detail ? `: ${event.detail}` : ''}`);\n }\n break;\n default:\n // Silent for intermediate events in non-interactive mode\n break;\n }\n },\n\n log(level: ProgressLogLevel, message: string): void {\n switch (level) {\n case 'debug':\n case 'info':\n break;\n case 'warn':\n console.warn(message);\n break;\n case 'error':\n console.error(message);\n break;\n }\n },\n };\n}\n", "/**\n * CLI Context Factory\n * \n * Creates ExecutionContext instances with CLI-specific port implementations.\n * \n * Output mode is committed once at context creation. When the mode is not\n * yet known (e.g. install command that may discover a marketplace), the\n * context starts in plain mode and provides a `commitOutputMode` callback\n * that the orchestrator can invoke to upgrade to rich mode before any\n * visible output is produced.\n */\n\nimport type { ExecutionContext, ExecutionOptions, OutputMode } from '@opkg/core/types/execution-context.js';\nimport { createExecutionContext } from '@opkg/core/core/execution-context.js';\nimport { createClackOutput, createPlainOutput } from './clack-output-adapter.js';\nimport { createClackPrompt } from './clack-prompt-adapter.js';\nimport { createPlainPrompt } from './plain-prompt-adapter.js';\nimport { createClackProgress, createPlainProgress } from './clack-progress-adapter.js';\nimport { nonInteractivePrompt } from '@opkg/core/core/ports/console-prompt.js';\nimport type { OutputPort } from '@opkg/core/core/ports/output.js';\nimport type { PromptPort } from '@opkg/core/core/ports/prompt.js';\nimport type { ProgressPort } from '@opkg/core/core/ports/progress.js';\n\nexport interface CliContextOptions extends ExecutionOptions {\n /**\n * Explicit output mode.\n * - `'rich'` \u2013 Clack output, Clack prompts, Clack progress\n * - `'plain'` \u2013 Console output, readline prompts, plain progress\n * - When omitted, defaults to `'plain'`.\n */\n outputMode?: OutputMode;\n}\n\n// \u2500\u2500 Cached singletons \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nlet cachedClackOutput: OutputPort | undefined;\nlet cachedPlainOutput: OutputPort | undefined;\nlet cachedClackPrompt: PromptPort | undefined;\nlet cachedPlainPrompt: PromptPort | undefined;\nlet cachedClackProgress: ProgressPort | undefined;\nlet cachedPlainProgress: ProgressPort | undefined;\n\n// \u2500\u2500 TTY detection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Detect whether the current session is interactive (TTY, no CI). */\nfunction detectInteractive(): boolean {\n const isTTY = process.stdin.isTTY === true;\n return isTTY && process.env.CI !== 'true';\n}\n\n// \u2500\u2500 Port assignment \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Apply an output mode to an ExecutionContext, setting all three ports\n * (output, prompt, progress) atomically.\n */\nfunction applyOutputMode(ctx: ExecutionContext, mode: OutputMode, isTTY: boolean): void {\n ctx.outputMode = mode;\n\n if (mode === 'rich') {\n ctx.output = cachedClackOutput ??= createClackOutput();\n ctx.prompt = isTTY\n ? (cachedClackPrompt ??= createClackPrompt())\n : nonInteractivePrompt;\n ctx.progress = cachedClackProgress ??= createClackProgress();\n } else {\n ctx.output = cachedPlainOutput ??= createPlainOutput();\n ctx.prompt = isTTY\n ? (cachedPlainPrompt ??= createPlainPrompt())\n : nonInteractivePrompt;\n ctx.progress = cachedPlainProgress ??= createPlainProgress();\n }\n}\n\n// \u2500\u2500 Public API \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Create an ExecutionContext with CLI-specific ports injected.\n *\n * The output mode is committed once. If the caller does not know the\n * mode yet (e.g. the install command before preprocessing), omit\n * `outputMode` -- the context starts in plain mode and exposes a\n * `commitOutputMode` callback that core code can invoke to upgrade\n * to rich mode before any visible output is produced.\n */\nexport async function createCliExecutionContext(options: CliContextOptions = {}): Promise<ExecutionContext> {\n const ctx = await createExecutionContext(options);\n const isTTY = detectInteractive();\n const initialMode: OutputMode = options.outputMode ?? 'plain';\n\n applyOutputMode(ctx, initialMode, isTTY);\n\n // Allow core code to change mode (e.g. after install preprocessing\n // determines marketplace flow). No-op when already in the requested mode.\n ctx.commitOutputMode = (mode: OutputMode) => {\n if (ctx.outputMode === mode) return;\n applyOutputMode(ctx, mode, isTTY);\n };\n\n return ctx;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;AAUO,IAAM,gBAA4B;AAAA,EACvC,KAAK,SAAuB;AAC1B,YAAQ,IAAI,OAAO;AAAA,EACrB;AAAA,EAEA,KAAK,SAAuB;AAC1B,YAAQ,IAAI,OAAO;AAAA,EACrB;AAAA,EAEA,YAAkB;AAAA,EAElB;AAAA,EAEA,QAAQ,SAAuB;AAC7B,YAAQ,IAAI,OAAO;AAAA,EACrB;AAAA,EAEA,QAAQ,SAAuB;AAC7B,YAAQ,IAAI,UAAK,OAAO,EAAE;AAAA,EAC5B;AAAA,EAEA,MAAM,SAAuB;AAC3B,YAAQ,IAAI,UAAK,OAAO,EAAE;AAAA,EAC5B;AAAA,EAEA,KAAK,SAAuB;AAC1B,YAAQ,IAAI,UAAK,OAAO,EAAE;AAAA,EAC5B;AAAA,EAEA,KAAK,SAAiB,OAAsB;AAC1C,QAAM,WAAW,QAAQ,MAAM;AAAA,CAAI,EAAE,IAAI,UAAQ,KAAK,IAAI,EAAE,EAAE,KAAK;AAAA,CAAI;AACvE,IACE,QAAQ,IADN,QACU;AAAA,EAAK,KAAK;AAAA,EAAK,QAAQ,KAEvB;AAAA,EAAK,QAAQ,EAFY;AAAA,EAIzC;AAAA,EAEA,MAAM,QAAQ,UAAkB,SAAmD;AAEjF,WAAO,SAAS,WAAW;AAAA,EAC7B;AAAA,EAEA,UAA0B;AACxB,QAAI,MAAM;AACV,WAAO;AAAA,MACL,MAAM,SAAiB;AACrB,cAAM,SACN,QAAQ,IAAI,UAAK,OAAO,EAAE;AAAA,MAC5B;AAAA,MACA,KAAK,cAAuB;AAC1B,QACE,QAAQ,IADN,eACU,UAAK,YAAY,KAEjB,UAAK,GAAG,EAFW;AAAA,MAInC;AAAA,MACA,QAAQA,OAAc;AACpB,cAAMA;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;;;AC9DO,IAAM,4BAAN,cAAwC,MAAM;AAAA,EACnD,YAAY,YAAoB;AAC9B;AAAA,MACE,qBAAqB,UAAU;AAAA,IAEjC,GACA,KAAK,OAAO;AAAA,EACd;AACF,GAEa,uBAAmC;AAAA,EAC9C,MAAM,QAAQ,UAAkB,UAAsC;AACpE,UAAM,IAAI,0BAA0B,cAAc;AAAA,EACpD;AAAA,EAEA,MAAM,OAAU,UAAkB,UAAkC,OAA4B;AAC9F,UAAM,IAAI,0BAA0B,WAAW;AAAA,EACjD;AAAA,EAEA,MAAM,YAAe,UAAkB,UAAgD;AACrF,UAAM,IAAI,0BAA0B,iBAAiB;AAAA,EACvD;AAAA,EAEA,MAAM,iBAAoB,UAAkB,SAA8C;AACxF,UAAM,IAAI,0BAA0B,iBAAiB;AAAA,EACvD;AAAA,EAEA,MAAM,KAAK,UAAkB,UAA+C;AAC1E,UAAM,IAAI,0BAA0B,YAAY;AAAA,EAClD;AACF;;;ACpBO,SAAS,cAAc,KAA8D;AAC1F,SAAO,KAAK,UAAU;AACxB;AAMO,SAAS,cAAc,KAA8D;AAC1F,SAAO,KAAK,UAAU;AACxB;;;ACnBA,SAAS,WAAAC,gBAAe;AACxB,SAAS,MAAM,QAAQ,aAAa,mBAAmB;;;ACLvD,SAAS,eAAe;AACxB,SAAS,SAAS,iBAAiB;AAO5B,SAAS,mBAA2B;AACzC,SAAO,QAAQ;AACjB;AAUO,SAAS,gBAAgB,MAAuB;AACrD,MAAM,iBAAiB,UAAU,QAAQ,IAAI,CAAC,GACxC,iBAAiB,UAAU,iBAAiB,CAAC;AACnD,SAAO,mBAAmB;AAC5B;AAWO,SAAS,uBAAuB,MAAsB;AAC3D,MAAM,iBAAiB,UAAU,QAAQ,IAAI,CAAC,GACxC,UAAU,iBAAiB,GAC3B,iBAAiB,UAAU,OAAO;AAGxC,SAAI,mBAAmB,iBACd,OAIL,eAAe,WAAW,iBAAiB,GAAG,IACzC,OAAO,eAAe,MAAM,eAAe,SAAS,CAAC,IAIvD;AACT;;;AD5BA,eAAsB,uBAAuB,UAA4B,CAAC,GAA8B;AAEtG,MAAM,YAAY,QAAQ,IAAI,GAG1B,WACA;AAEJ,EAAI,QAAQ,UACV,YAAY,iBAAiB,GAC7B,WAAW,IAGP,QAAQ,OACV,OAAO,KAAK,2CAA2C;AAAA,IACrD,KAAK,QAAQ;AAAA,IACb;AAAA,EACF,CAAC,KAEM,QAAQ,OACjB,YAAYC,SAAQ,WAAW,QAAQ,GAAG,GAC1C,WAAW,gBAAgB,SAAS,MAEpC,YAAY,WACZ,WAAW,gBAAgB,SAAS;AAItC,MAAM,UAA4B;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa,QAAQ;AAAA,EACvB;AAGA,eAAM,yBAAyB,OAAO,GAGtC,OAAO,MAAM,6BAA6B;AAAA,IACxC,WAAW,QAAQ;AAAA,IACnB,WAAW,QAAQ;AAAA,IACnB,UAAU,QAAQ;AAAA,EACpB,CAAC,GAEM;AACT;AAaA,eAAe,yBAAyB,SAA0C;AAEhF,MAAI;AAEF,QAAI,EADe,MAAM,KAAK,QAAQ,SAAS,GAC/B,YAAY;AAC1B,YAAM,IAAI,MAAM,mCAAmC,QAAQ,SAAS,EAAE;AAIxE,UAAM,OAAO,QAAQ,WAAW,YAAY,IAAI;AAAA,EAClD,SAAS,OAAO;AACd,UAAK,MAAgC,SAAS,WACtC,IAAI;AAAA,MACR,oCAAoC,QAAQ,SAAS;AAAA;AAAA;AAAA,IAEvD,IAEG,MAAgC,SAAS,WACtC,IAAI;AAAA,MACR,qCAAqC,QAAQ,SAAS;AAAA;AAAA;AAAA,IAExD,IAEI,IAAI;AAAA,MACR,6BAA6B,QAAQ,SAAS;AAAA,SACpC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,IAClE;AAAA,EACF;AAGA,MAAI;AAEF,QAAI,EADe,MAAM,KAAK,QAAQ,SAAS,GAC/B,YAAY;AAC1B,YAAM,IAAI,MAAM,gDAAgD,QAAQ,SAAS,EAAE;AAIrF,UAAM,OAAO,QAAQ,WAAW,YAAY,IAAI;AAAA,EAClD,SAAS,OAAO;AACd,UAAM,IAAI;AAAA,MACR,qCAAqC,QAAQ,SAAS;AAAA,SAC5C,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,IAClE;AAAA,EACF;AACF;AA4BO,SAAS,oBAAoB,SAAmC;AACrE,SAAO,uBAAuB,QAAQ,SAAS;AACjD;;;AEzJA,SAAS,KAAK,WAAW,cAAc,WAAW,cAAc,QAAQ,WAAW,UAAU,cAAc;;;ACPpG,IAAM,UAAN,MAAc;AAAA,EAOnB,YAAY,UAAkB,cAAc;AAN5C,SAAQ,aAAoC;AAG5C,SAAQ,eAAuB;AAC/B,SAAQ,YAAqB;AAG3B,SAAK,UAAU,SAEf,KAAK,SAAS,CAAC,UAAK,UAAK,UAAK,UAAK,UAAK,UAAK,UAAK,UAAK,UAAK,QAAG;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACZ,IAAI,KAAK,cAIT,KAAK,YAAY,IACjB,KAAK,eAAe,GAGpB,QAAQ,OAAO,MAAM,WAAW,GAEhC,KAAK,aAAa,YAAY,MAAM;AAClC,UAAM,QAAQ,KAAK,OAAO,KAAK,eAAe,KAAK,OAAO,MAAM;AAChE,cAAQ,OAAO,MAAM,KAAK,KAAK,IAAI,KAAK,OAAO,EAAE,GACjD,KAAK;AAAA,IACP,GAAG,EAAE;AAAA,EACP;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,SAAuB;AAC5B,SAAK,UAAU;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAa;AACX,IAAK,KAAK,cAIV,KAAK,YAAY,IAEb,KAAK,eACP,cAAc,KAAK,UAAU,GAC7B,KAAK,aAAa,OAIpB,QAAQ,OAAO,MAAM,OAAO,IAAI,OAAO,QAAQ,OAAO,WAAW,EAAE,IAAI,IAAI,GAG3E,QAAQ,OAAO,MAAM,WAAW;AAAA,EAClC;AAEF;;;ADjDO,SAAS,oBAAgC;AAC9C,SAAO;AAAA,IACL,KAAK,SAAuB;AAC1B,UAAI,KAAK,OAAO;AAAA,IAClB;AAAA,IAEA,KAAK,SAAuB;AAC1B,UAAI,KAAK,OAAO;AAAA,IAClB;AAAA,IAEA,YAAkB;AAChB,UAAI,QAAQ,KAAK,EAAE,SAAS,EAAE,CAAC;AAAA,IACjC;AAAA,IAEA,QAAQ,SAAuB;AAC7B,UAAI,QAAQ,SAAS,EAAE,SAAS,EAAE,CAAC;AAAA,IACrC;AAAA,IAEA,QAAQ,SAAuB;AAC7B,UAAI,QAAQ,OAAO;AAAA,IACrB;AAAA,IAEA,MAAM,SAAuB;AAC3B,UAAI,MAAM,OAAO;AAAA,IACnB;AAAA,IAEA,KAAK,SAAuB;AAC1B,UAAI,KAAK,OAAO;AAAA,IAClB;AAAA,IAEA,KAAK,SAAiB,OAAsB;AAC1C,gBAAU,SAAS,SAAS,EAAE;AAAA,IAChC;AAAA,IAEA,MAAM,QAAQ,SAAiB,SAAmD;AAChF,UAAM,SAAS,MAAM,aAAa;AAAA,QAChC;AAAA,QACA,cAAc,SAAS,WAAW;AAAA,MACpC,CAAC;AACD,UAAI,SAAS,MAAM,GAAG;AACpB,eAAO,sBAAsB;AAC7B,YAAM,EAAE,uBAAAC,uBAAsB,IAAI,MAAM,OAAO,sBAA4B;AAC3E,cAAM,IAAIA,uBAAsB,6BAA6B;AAAA,MAC/D;AACA,aAAO;AAAA,IACT;AAAA,IAEA,UAA0B;AACxB,UAAM,IAAI,aAAa,GACnB,YAAY;AAEhB,aAAO;AAAA,QACL,MAAM,SAAiB;AACrB,UAAK,cACH,EAAE,MAAM,OAAO,GACf,YAAY;AAAA,QAEhB;AAAA,QACA,KAAK,cAAuB;AAC1B,UAAI,cACE,eACF,EAAE,KAAK,YAAY,IAEnB,EAAE,KAAK,GAET,YAAY;AAAA,QAEhB;AAAA,QACA,QAAQC,OAAc;AACpB,UAAI,aACF,EAAE,QAAQA,KAAI;AAAA,QAElB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAKO,SAAS,oBAAgC;AAC9C,SAAO;AAAA,IACL,KAAK,SAAuB;AAC1B,cAAQ,IAAI,OAAO;AAAA,IACrB;AAAA,IAEA,KAAK,SAAuB;AAC1B,cAAQ,IAAI,OAAO;AAAA,IACrB;AAAA,IAEA,YAAkB;AAAA,IAElB;AAAA,IAEA,QAAQ,SAAuB;AAC7B,cAAQ,IAAI,OAAO;AAAA,IACrB;AAAA,IAEA,QAAQ,SAAuB;AAC7B,cAAQ,IAAI,UAAK,OAAO,EAAE;AAAA,IAC5B;AAAA,IAEA,MAAM,SAAuB;AAC3B,cAAQ,IAAI,UAAK,OAAO,EAAE;AAAA,IAC5B;AAAA,IAEA,KAAK,SAAuB;AAC1B,cAAQ,IAAI,iBAAO,OAAO,EAAE;AAAA,IAC9B;AAAA,IAEA,KAAK,SAAiB,OAAsB;AAC1C,UAAM,WAAW,QAAQ,MAAM;AAAA,CAAI,EAAE,IAAI,UAAQ,KAAK,IAAI,EAAE,EAAE,KAAK;AAAA,CAAI;AACvE,MACE,QAAQ,IADN,QACU;AAAA,EAAK,KAAK;AAAA,EAAK,QAAQ,KAEvB;AAAA,EAAK,QAAQ,EAFY;AAAA,IAIzC;AAAA,IAEA,MAAM,QAAQ,UAAkB,SAAmD;AAGjF,qBAAQ,IAAI,GAAG,QAAQ,IAAI,SAAS,UAAU,QAAQ,KAAK,EAAE,GACtD,SAAS,WAAW;AAAA,IAC7B;AAAA,IAEA,UAA0B;AACxB,UAAI,IAAoB;AAExB,aAAO;AAAA,QACL,MAAM,SAAiB;AACrB,cAAI,IAAI,QAAQ,OAAO,GACvB,EAAE,MAAM;AAAA,QACV;AAAA,QACA,KAAK,cAAuB;AAC1B,UAAI,MACF,EAAE,KAAK,GACH,gBACF,QAAQ,IAAI,YAAY,GAE1B,IAAI;AAAA,QAER;AAAA,QACA,QAAQA,OAAc;AACpB,UAAI,KACF,EAAE,OAAOA,KAAI;AAAA,QAEjB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AEhKA,YAAY,WAAW;AAIvB,SAAS,aAAa,QAAuB;AAC3C,MAAU,eAAS,MAAM;AACvB,UAAM,aAAO,sBAAsB,GAC7B,IAAI,sBAAsB,6BAA6B;AAEjE;AAKO,SAAS,oBAAgC;AAC9C,SAAO;AAAA,IACL,MAAM,QAAQ,SAAiB,SAAqC;AAClE,UAAM,SAAS,MAAY,cAAQ;AAAA,QACjC;AAAA,QACA,cAAc,WAAW;AAAA,MAC3B,CAAC;AACD,0BAAa,MAAM,GACZ;AAAA,IACT;AAAA,IAEA,MAAM,OACJ,SACA,SACA,MACY;AACZ,UAAM,SAAS,MAAY,aAAO;AAAA,QAChC;AAAA,QACA,SAAS,QAAQ,IAAI,QAAM;AAAA,UACzB,OAAO,EAAE;AAAA,UACT,OAAO,EAAE;AAAA,UACT,GAAI,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,IAAI,CAAC;AAAA,QACjD,EAAE;AAAA,MACJ,CAAC;AACD,0BAAa,MAAM,GACZ;AAAA,IACT;AAAA,IAEA,MAAM,YACJ,SACA,SACA,SACc;AACd,UAAM,SAAS,MAAY,kBAAY;AAAA,QACrC;AAAA,QACA,SAAS,QAAQ,IAAI,QAAM;AAAA,UACzB,OAAO,EAAE;AAAA,UACT,OAAO,EAAE;AAAA,UACT,GAAI,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,IAAI,CAAC;AAAA,QACjD,EAAE;AAAA,QACF,UAAU,SAAS,MAAM,QAAQ,MAAM,IAAI;AAAA,MAC7C,CAAC;AACD,0BAAa,MAAM,GACZ;AAAA,IACT;AAAA,IAEA,MAAM,iBACJ,SACA,QACc;AACd,UAAM,SAAS,MAAY,uBAAiB;AAAA,QAC1C;AAAA,QACA,SAAS;AAAA,MACX,CAAC;AACD,0BAAa,MAAM,GACZ;AAAA,IACT;AAAA,IAEA,MAAM,KACJ,SACA,SACiB;AAIjB,UAAM,eAAe,SAAS,UAK1B,UAAU,IAER,eAAe,eAAe,CAAC,UAA8B;AACjE,YAAM,IAAI,aAAa,SAAS,EAAE;AAClC,YAAI,KAAK,OAAQ,EAAU,QAAS,YAAY;AAG9C,oBAAU;AACV;AAAA,QACF;AACA,YAAI,QAAM,MAAQ,MAAM;AACxB,iBAAO;AAAA,MACT,IAAI;AAGJ,iBAAa;AACX,YAAM,SAAS,MAAY,WAAK;AAAA,UAC9B;AAAA,UACA,aAAa,SAAS;AAAA,UACtB,cAAc,SAAS;AAAA,UACvB,UAAU;AAAA,QACZ,CAAC;AAID,YAHA,aAAa,MAAM,GAGf,WAAW,cAAc;AAC3B,cAAM,cAAc,MAAM,aAAc,UAAqB,EAAE;AAC/D,cAAI,gBAAgB,MAAQ,gBAAgB,QAAW;AAErD,YAAM,UAAI,MAAM,WAAqB,GACrC,UAAU;AACV;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;;;AC1HA,OAAO,aAAa;AAcpB,SAAS,WAAkB;AACzB,QAAM,IAAI,sBAAsB,kBAAkB;AACpD;AAMO,SAAS,oBAAgC;AAC9C,SAAO;AAAA;AAAA,IAEL,MAAM,QAAQ,SAAiB,SAAqC;AAClE,UAAM,EAAE,MAAM,IAAI,MAAM;AAAA,QACtB;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN;AAAA,UACA,SAAS,WAAW;AAAA,QACtB;AAAA,QACA,EAAE,SAAS;AAAA,MACb;AACA,aAAO;AAAA,IACT;AAAA;AAAA,IAGA,MAAM,OACJ,SACA,SACA,MACY;AACZ,UAAM,EAAE,MAAM,IAAI,MAAM;AAAA,QACtB;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN;AAAA,UACA,SAAS,QAAQ,IAAI,CAAC,OAAO;AAAA,YAC3B,OAAO,EAAE;AAAA,YACT,OAAO,EAAE;AAAA,YACT,aAAa,EAAE;AAAA,UACjB,EAAE;AAAA,UACF;AAAA,QACF;AAAA,QACA,EAAE,SAAS;AAAA,MACb;AACA,aAAO;AAAA,IACT;AAAA;AAAA,IAGA,MAAM,YACJ,SACA,SACA,SACc;AACd,UAAM,EAAE,MAAM,IAAI,MAAM;AAAA,QACtB;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN;AAAA,UACA,SAAS,QAAQ,IAAI,CAAC,OAAO;AAAA,YAC3B,OAAO,EAAE;AAAA,YACT,OAAO,EAAE;AAAA,YACT,aAAa,EAAE;AAAA,UACjB,EAAE;AAAA,UACF,MAAM,SAAS,QAAQ;AAAA,UACvB,KAAK,SAAS;AAAA,QAChB;AAAA,QACA,EAAE,SAAS;AAAA,MACb;AACA,aAAO;AAAA,IACT;AAAA;AAAA,IAGA,MAAM,iBACJ,SACA,QACc;AAGd,UAAM,cAAkD,CAAC;AACzD,eAAW,CAAC,YAAY,KAAK,KAAK,OAAO,QAAQ,MAAM;AACrD,iBAAW,QAAQ;AACjB,sBAAY,KAAK;AAAA,YACf,OAAO,GAAG,UAAU,MAAM,KAAK,KAAK;AAAA,YACpC,OAAO,KAAK;AAAA,UACd,CAAC;AAIL,UAAM,EAAE,MAAM,IAAI,MAAM;AAAA,QACtB;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN;AAAA,UACA,SAAS,YAAY,IAAI,CAAC,OAAO;AAAA,YAC/B,OAAO,EAAE;AAAA,YACT,OAAO,EAAE;AAAA,UACX,EAAE;AAAA,UACF,MAAM;AAAA,QACR;AAAA,QACA,EAAE,SAAS;AAAA,MACb;AACA,aAAO;AAAA,IACT;AAAA;AAAA,IAGA,MAAM,KACJ,SACA,SACiB;AACjB,UAAM,eAAe,SAAS,UAI1B,UAAU,IACR,eAAe,eACjB,CAAC,UAAkB;AACjB,YAAM,IAAI,aAAa,KAAK;AAC5B,eAAI,KAAK,OAAQ,EAAU,QAAS,cAClC,UAAU,IACH,MAEL,MAAM,MAAQ,MAAM,SAAkB,KACnC;AAAA,MACT,IACA;AAGJ,iBAAa;AACX,YAAM,EAAE,MAAM,IAAI,MAAM;AAAA,UACtB;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN;AAAA,YACA,SAAS,SAAS;AAAA,YAClB,UAAU;AAAA,UACZ;AAAA,UACA,EAAE,SAAS;AAAA,QACb,GAEM,SAAU,SAAoB;AAGpC,YAAI,WAAW,cAAc;AAC3B,cAAM,cAAc,MAAM,aAAa,MAAM;AAC7C,cAAI,gBAAgB,MAAQ,gBAAgB,QAAW;AACrD,oBAAQ,MAAM,YAAY,WAAW,EAAE,GACvC,UAAU;AACV;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;;;AC1KA,SAAS,OAAAC,YAAW;AAUb,SAAS,sBAAoC;AAClD,SAAO;AAAA,IACL,KAAK,OAA4B;AAC/B,cAAQ,MAAM,MAAM;AAAA,QAClB,KAAK;AACH,UAAAA,KAAI,KAAK,cAAc,MAAM,SAAS,MAAM,aAAa;AACzD;AAAA,QACF,KAAK;AACH,UAAI,MAAM,WAAW,YACnBA,KAAI,KAAK,qBAAqB,MAAM,OAAO,GAAG,MAAM,SAAS,KAAK,MAAM,MAAM,KAAK,EAAE,EAAE;AAEzF;AAAA,QACF,KAAK;AACH,UAAI,MAAM,WAAW,YACnBA,KAAI,KAAK,sBAAsB,MAAM,OAAO,GAAG,MAAM,SAAS,KAAK,MAAM,MAAM,KAAK,EAAE,EAAE;AAE1F;AAAA,QACF,KAAK;AACH,UAAI,MAAM,WAAW,YACnBA,KAAI,KAAK,qBAAqB,MAAM,OAAO,GAAG,MAAM,SAAS,KAAK,MAAM,MAAM,KAAK,EAAE,EAAE;AAEzF;AAAA,QACF,KAAK,oBAAoB;AACvB,cAAM,EAAE,WAAW,QAAQ,QAAQ,IAAI,MAAM;AAC7C,UAAI,SAAS,IACXA,KAAI,KAAK,qBAAqB,SAAS,eAAe,MAAM,YAAY,OAAO,UAAU,IAEzFA,KAAI,KAAK,qBAAqB,SAAS,aAAa,UAAU,IAAI,KAAK,OAAO,aAAa,EAAE,EAAE;AAEjG;AAAA,QACF;AAAA,QAEA,KAAK;AACH,UAAAA,KAAI,KAAK,cAAc,MAAM,OAAO,IAAI,MAAM,OAAO,EAAE;AACvD;AAAA,QACF,KAAK;AACH,UAAI,MAAM,WAAW,YACnBA,KAAI,KAAK,qBAAqB,MAAM,OAAO,GAAG,MAAM,SAAS,KAAK,MAAM,MAAM,KAAK,EAAE,EAAE;AAEzF;AAAA,QACF,KAAK;AACH,UAAI,MAAM,UACRA,KAAI,KAAK,aAAa,MAAM,OAAO,EAAE,IAErCA,KAAI,KAAK,qBAAqB,MAAM,OAAO,EAAE;AAE/C;AAAA,QAEF,KAAK;AACH,UAAAA,KAAI,KAAK,gBAAgB,MAAM,SAAS,MAAM,aAAa;AAC3D;AAAA,QACF,KAAK;AACH,UAAI,MAAM,WAAW,YACnBA,KAAI,KAAK,oBAAoB,MAAM,OAAO,GAAG,MAAM,SAAS,KAAK,MAAM,MAAM,KAAK,EAAE,EAAE;AAExF;AAAA,QACF,KAAK,sBAAsB;AACzB,cAAM,EAAE,SAAS,OAAO,IAAI,MAAM;AAClC,UAAI,SAAS,IACXA,KAAI,KAAK,uBAAuB,OAAO,aAAa,MAAM,SAAS,IAEnEA,KAAI,KAAK,uBAAuB,OAAO,UAAU;AAEnD;AAAA,QACF;AAAA,QAEA,KAAK;AAEH;AAAA,QACF,KAAK;AAEH;AAAA,QACF,KAAK;AACH,UAAAA,KAAI,KAAK,SAAS,MAAM,WAAW,YAAY;AAC/C;AAAA,QAEF,KAAK;AACH,UAAAA,KAAI,KAAK,GAAG,MAAM,QAAQ,GAAG,MAAM,SAAS,KAAK,MAAM,MAAM,KAAK,EAAE,EAAE;AACtE;AAAA,QACF,KAAK;AACH,UAAAA,KAAI,KAAK,GAAG,MAAM,IAAI,GAAG,MAAM,SAAS,KAAK,MAAM,MAAM,KAAK,EAAE,EAAE;AAClE;AAAA,QACF,KAAK;AACH,UAAK,MAAM,WACTA,KAAI,KAAK,GAAG,MAAM,QAAQ,UAAU,MAAM,SAAS,KAAK,MAAM,MAAM,KAAK,EAAE,EAAE;AAE/E;AAAA,MACJ;AAAA,IACF;AAAA,IAEA,IAAI,OAAyB,SAAuB;AAClD,cAAQ,OAAO;AAAA,QACb,KAAK;AAEH;AAAA,QACF,KAAK;AACH,UAAAA,KAAI,KAAK,OAAO;AAChB;AAAA,QACF,KAAK;AACH,UAAAA,KAAI,KAAK,OAAO;AAChB;AAAA,QACF,KAAK;AACH,UAAAA,KAAI,MAAM,OAAO;AACjB;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AACF;AAMO,SAAS,sBAAoC;AAClD,SAAO;AAAA,IACL,KAAK,OAA4B;AAC/B,cAAQ,MAAM,MAAM;AAAA,QAClB,KAAK;AACH,kBAAQ,IAAI,cAAc,MAAM,QAAQ,SAAS,aAAa,MAAM,QAAQ,MAAM,cAAc,MAAM,QAAQ,OAAO,EAAE;AACvH;AAAA,QACF,KAAK;AACH,kBAAQ,IAAI,WAAW,MAAM,OAAO,KAAK,MAAM,UAAU,YAAY,QAAQ,EAAE;AAC/E;AAAA,QACF,KAAK;AACH,kBAAQ,IAAI,YAAY,MAAM,QAAQ,OAAO,aAAa,MAAM,QAAQ,MAAM,EAAE;AAChF;AAAA,QACF,KAAK;AACH,kBAAQ,IAAI,SAAS,MAAM,WAAW,YAAY;AAClD;AAAA,QACF,KAAK;AACH,UAAK,MAAM,WACT,QAAQ,IAAI,GAAG,MAAM,QAAQ,UAAU,MAAM,SAAS,KAAK,MAAM,MAAM,KAAK,EAAE,EAAE;AAElF;AAAA,QACF;AAEE;AAAA,MACJ;AAAA,IACF;AAAA,IAEA,IAAI,OAAyB,SAAuB;AAClD,cAAQ,OAAO;AAAA,QACb,KAAK;AAAA,QACL,KAAK;AACH;AAAA,QACF,KAAK;AACH,kBAAQ,KAAK,OAAO;AACpB;AAAA,QACF,KAAK;AACH,kBAAQ,MAAM,OAAO;AACrB;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AACF;;;AC3IA,IAAI,mBACA,mBACA,mBACA,mBACA,qBACA;AAKJ,SAAS,oBAA6B;AAEpC,SADc,QAAQ,MAAM,UAAU,MACtB,QAAQ,IAAI,OAAO;AACrC;AAQA,SAAS,gBAAgB,KAAuB,MAAkB,OAAsB;AACtF,MAAI,aAAa,MAEb,SAAS,UACX,IAAI,SAAS,0CAAsB,kBAAkB,IACrD,IAAI,SAAS,QACR,0CAAsB,kBAAkB,KACzC,sBACJ,IAAI,WAAW,8CAAwB,oBAAoB,OAE3D,IAAI,SAAS,0CAAsB,kBAAkB,IACrD,IAAI,SAAS,QACR,0CAAsB,kBAAkB,KACzC,sBACJ,IAAI,WAAW,8CAAwB,oBAAoB;AAE/D;AAaA,eAAsB,0BAA0B,UAA6B,CAAC,GAA8B;AAC1G,MAAM,MAAM,MAAM,uBAAuB,OAAO,GAC1C,QAAQ,kBAAkB,GAC1B,cAA0B,QAAQ,cAAc;AAEtD,yBAAgB,KAAK,aAAa,KAAK,GAIvC,IAAI,mBAAmB,CAAC,SAAqB;AAC3C,IAAI,IAAI,eAAe,QACvB,gBAAgB,KAAK,MAAM,KAAK;AAAA,EAClC,GAEO;AACT;",
|
|
6
|
+
"names": ["text", "resolve", "resolve", "UserCancellationError", "text", "log"]
|
|
7
|
+
}
|